Linux автозапуск приложения gui

Обновлено: 07.07.2024

У каждого пользователя есть набор программ, которые он запускает ежедневно. Чтобы избавить себя от необходимости проделывать это вручную, оные приложения можно добавить в автозагрузку. В Windows это можно сделать, закинув ярлык программы в каталог автозагрузки, прописав ее в соответствующем ключе реестра или добавив в Планировщик заданий. А как с этим дела обстоят в Linux? В операционной системе Linux также имеется автозагрузка, но работает она несколько иначе.

За автозагрузку в Linux отвечает специальный процесс, именуемый системой инициализации. Этот процесс запускает все остальные процессы после того, как ядро операционной системы передаст ему дальнейшее управление. Также в Linux имеется несколько уровней или режимов автозагрузки. Например, автозагрузка на уровне ядра позволяет заменить систему инициализации любой другой программой. Есть уровни автозагрузки специально для скриптов (rc.local и Xinitrc) , есть автозагрузка bash , позволяющая автоматически выполнять команды в открытом терминале и есть автозагрузка окружения рабочего стола.

Этот последний уровень для начинающих осваивать Linux пользователей является наиболее удобным. Добавим для примера в автозагрузки Ubuntu браузер Firefox .

Откройте поиск и начинайте вводить «автоматически запускаемые приложения», а когда в списке приложений появится одноименная утилита, запустите ее.

Ubuntu поиск

Добавить

И укажите в открывшемся окошке название добавляемого в автозагрузку приложения и путь к его исполняемому файлу.

Bin

Исполняемые файлы пользовательских приложений в Linux копируются в папку /usr/bin , а если программа запускается с правами администратора, то в папку /usr/sbin . Если вы не нашли в них своей программы, поищите ее в папке /usr/opt , иногда разработчики прописывают в программе этот путь установки.

Добавить программу

Поле «Описание» заполнять необязательно.

Настройки запуска приложений

Всё, жмем «Добавить» и программа окажется в автозагрузке.

Второй способ добавить программу в автозагрузку — создать в папке

/.config/autostart конфигурационный файл desktop . Вот как, к примеру, выглядит содержимое файла автозапуска только что добавленной нами в автозагрузку Firefox.

Autostart

Папка «.config» располагается в каталоге Home и является скрытой, чтобы ее показать, нажмите Ctrl + H . В папке autostart создайте пустой документ.

Пустой документ

Откройте его текстовым редактором и вставьте в него набор команд, указанный на скриншоте.

Набор команд

Это минимальный набор параметров.

В нашем примере в автозагрузку добавляется текстовый редактор leafpad , его название мы указываем в параметрах Name и Exec. Осталось только переименовать файл в name.desktop , где name — название программы.

Файл leafpad

По сути, данный способ равнозначен первому способу, но при этом вы не используете утилиту настройки запуска приложений. Кстати, если вы откроете эту утилиту, то найдете в списке добавленную посредством ручного создания конфигурационного файла программу.

Программы, запускаемые при старте

Как видите, добавлять программы в автозагрузку Linux не так уже и трудно.

Конечно, есть здесь и свои нюансы, Linux вообще очень гибкая система, но для начала этих знаний вам будет вполне достаточно, чтобы автоматически запускать любые пользовательские приложения.

Вывод systemd-analyze dot --user ‘i3.service’ | dot -Tpng | imv -

О как интересно, подумалось мне. Можно реализовать функционал полноценных Desktop Environments , по автоматическому запуску приложений, при старте. А у меня как раз i3wm, который таковым не является и которому такой функционал не помешал бы. Надо это дело исследовать. Тогда я ещё не знал во что ввязался. Как оказалось, не всё так просто.

  • $XDG_CONFIG_DIRS/autostart/ ( /etc/xdg/autostart/ по умолчанию) — общесистемная директория, для всех пользователей. Туда, обычно, попадают десктоп файлы при установке софта пакетным менеджером.
  • $XDG_CONFIG_HOME/autostart/ ( $HOME/.config/autostart/ по умолчанию) — Пользовательская директория, имеющая больший приоритет, нежели общесистемная, то есть если в пользовательской лежит десктоп файл с таким же именем, что и в общесистемной, будет использован именно пользовательский файл.

Если в этих переменных семейства XDG directories не указано иное, или эти переменные отсутствуют (так происходит в большинстве классических дистрибутивов, привет NixOS!), будут использованы значения по умолчанию.

Итак, с директориями определились. Файлы в них можно:

    Симлинкнуть из стандартных путей: $XDG_DATA_DIRS/applications/ ( /usr/share/applications/ по умолчанию) или из пользовательского $XDG_DATA_HOME/applications/ (

Всё хорошо. Одно плохо. Это не работает, как минимум, в Leftwm, Spectrwm, xmonad, bspwm, dwm (без патчей точно) и, разумеется, в любимом i3wm. Просто потому, что у них отсутствует session manager. И вот тут мы переходим к самому интересному. Встречайте! systemd!

Systemd как спасательный круг тайловых (и не очень) оконных менеджеров

Эта глава будет самой объёмной. Тут мы разберёмся кто и как может помочь разобрать залежи desktop файлов, кто, как и когда их запустит, и при чём тут вообще systemd. Поехали!

▍ Developers, developers, developers! Генераторы, генераторы, генераторы!

Systemd, как известно, это не только система инициализации, логгирования событий, но и набор готовых дополнительных утилит, готовых сервисов с их юнитами, система управления сетью, and more… Среди прочего systemd может выступать в качестве системного менеджера для пользовательских сервисов — юнитов, работающих в пространстве пользователя. То есть после логина пользователя в систему запускается ещё один экземпляр /usr/lib/systemd только уже от пользователя и позволяет запускать юниты в пространстве пользователя, с наследованием его окружения и правами.

Среди других интересных и полезных вещей в systemd есть такая штука, как генераторы. Маленькие утилиты запускаемые на раннем этапе загрузки системы или сразу после логина пользователя и выполняющие динамическую генерацию юнитов и/или их конфигов. Например, есть генератор, который читает /etc/fstab и на его основе генерирует *.mount юниты. Или генератор, который вычитывает файлы *.conf из /etc/environment.d/ и $HOME/.config/environment.d/ и на их основе собирает переменные которые пользователь видит набирая команду env и которые наследуются всеми пользовательскими юнитами. Среди прочего есть и генератор, который пробегает по $XDG_CONFIG_DIRS/autostart и $XDG_CONFIG_HOME/autostart , вычитывает *.desktop файлы, генерирует пользовательские *.service юниты и кладёт их в /run/user/<UID>/systemd/generator.late .

Всё хорошо и замечательно, но есть одно но. Если есть сервисы, их должен кто-то вовремя запустить. То есть запустить ровно тогда, когда будет запущена графическая оболочка… Если посмотреть, произвольный такой юнит, мы увидим там упоминание target-а graphical-session.target (Юнит на основе десктоп файла апплета управления Bluetooth cat /run/user/1000/systemd/generator.late/app-blueman@autostart.service ):

Хорошо, но что это за graphical-session.target? В выводе systemctl --user --type=target , если выполнить команду из-под i3wm никакого такого таргета не наблюдается. А вот если запустить из-под, например, Gnome, то вполне:

И что же со всем этим делать и как быть? Как получить заветный target?

▍ Графическая оболочка тоже сервис. Подсматриваем в Gnome

Если в Gnome запустить systemctl --user --type=service можно заметить интересный сервис:

Становится всё интереснее. Значит Gnome запускается как systemd сервис ( gnome-shell-x11.service ). Ну а уж из сервиса можно реализовывать любые зависимости. В принципе ожидаемо. Но как реализовывать такое для произвольной графической оболочки, которая не заточена под такие тонкие извращения? Надеемся на то не должно быть сложно… Перво-наперво смотрим в юнит ( systemctl cat --user gnome-shell-x11.service ) и понимаем, что ничего не понимаем и что мы немножко попали…

Ладно, чёрт с ним, идём смотреть в *.desktop файл xsessions( cat /usr/share/xsessions/gnome.desktop )…

… и понимаем, что попали несколько серьёзнее чем хотелось бы и что гном, в данном случае, нам мало чем поможет. Он изначально заточен под работу с systemd. Идём в эти наши интернеты.

▍ Выходим на финишную прямую. Пишем враппер, юнит и наконец удачно стартуем

Не буду затягивать и утомлять читателя подробностями того, как и где приходилось выуживать информацию по крупицам. Это были и маны и ArchWiki и чёрт его знает что ещё. Лучше сразу приведу готовые, в меру откомментированные файлы.

Итак, копируем дефолтный /usr/share/xsessions/i3.desktop в /usr/share/xsessions/i3-systemd.desktop и немного модифицируем.

Теперь нам нужно написать враппер i3-service который будет подготавливать окружение и запускать i3wm в качестве сервиса. Ну и, разумеется, сам i3.service файл тоже должен быть написан. Итак враппер /usr/local/bin/i3-service :

Ну и наконец вишенка на нашем торте, сам /etc/systemd/user/i3.service :

  • Записываемся.
  • Для проверки добавляем в автозагрузку, например, тот же клиент телеграма.
  • Идём на перезагрузку и в дисплейном менеджере при старте системы, выбираем пункт «i3 via systemd»

Что в итоге?

  • Работает автозагрузка, прямо как в каком-нить гноме.
  • Бонусом получили graphical-session.target , к которому можно биндить сервисы, зависящие от запущенной графической оболочки. Например, до этого у меня падал, при загрузке юнит clipboard manager-а, в результате приходилось костылять таймаут… Теперь не падает.
  • Можно выкинуть из конфига i3 всё, что запускается при старте (Директива exec --no-startup-id и это вот всё) и упаковать в отдельные аккуратные пользовательские *.service и по-человечески рулить ими в процессе работы. Например, отключать и включать lockscreen простым systemctl --user start / stop
  • Для автозагружаемых юнитов, сгенерённых из *.desktop файлов, в самих этих файлах их можно отключать, добавив строчку Hidden=true

Ну и вообще, приятно быть первооткрывателем. Ибо в процессе гугления и чтения манов, готового рецепта обнаружено не было. Так что любители wm, не относящиеся к systemd хейтерам. Пробуйте. За месяц использования был замечен ровно один косяк. Не работает gvgs-* функционал в pcman-fm, если его запустить хоткеем из i3 Но если запустить из rofi, волшебным образом всё начинает работать. Возможно я забыл импортировать какую-то переменную в d-bus Ну и, чтоб не копипастить, ссылка на гитхаб.

После запуска компьютера, как правило, нам приходится запускать некоторые программы. которыми мы пользуемся чаще всего. Также после запуска системы нам может понадобиться выполнить какие-либо специфичные действия, например, создать нужные файлы или установить некоторые параметры. Очень неудобно делать это вручную. Для решения таких задач существует автозагрузка.

В этой статье мы рассмотрим как работает автозагрузка Linux, как добавить программы автозагрузки, куда их будет более правильно добавить, а также какие виды автозагрузки бывают в этой операционной системы.

Как работает автозагрузка?

Чтобы понять как работает автозагрузка, сначала нужно вспомнить, что происходит во время процесса загрузки Linux. Как только ядро завершит свою инициализацию и будет готово к дальнейшей работе, оно передаст управление системе инициализации. Система инициализации - это основной процесс, именно он запускает все другие процессы в системе.

Есть процессы, которые система инициализации, например, systemd, запускает по умолчанию, но также вы можете настроить чтобы она запускала нужные вам процессы. Также многими дочерними процессами выполняются файлы скриптов или имеется та или иная возможность запускать необходимые вам программы. Такая возможность есть и у большинства окружений рабочего стола.

Рассмотрим основные уровни автозагрузки которые вы можете использовать:

  • Автозагрузка на уровне ядра - вы можете указать любую программу, которая будет запускаться после старта ядра вместо системы инициализации;
  • Автозагрузка системы инициализации - запуск основных системных сервисов, дополнительных сервисов, а также ваших скриптов на этапе инициализации системы;
  • Автозагрузка rc.local - устаревший метод загрузки скриптов, выполняется перед запуском графического окружения;
  • Автозагрузка менеджера входа - вы можете выполнять свои скрипты или команды после запуска менеджера входа, но перед запуском окружения;
  • Автозагрузка X сервера - запуск нужных программ или скрпитов сразу после старта X сервера;
  • Автозагрузка окружения - большинство окружений поддерживают автозагрузку программ, там даже можно настроить отложенный запуск и другие параметры;
  • Автозагрузка bash - самый последний вариант - это автозагрузка на уровне отдельной командной оболочки, вы можете выполнять нужные команды автоматически, как только будет запущен терминал.

Дальше мы рассмотрим более подробно как использовать каждый из пунктов для автозагрузки программ, скриптов или выполнения команд в Linux.

Автозагрузка на уровне ядра

sudo vi /boot/grub2/grub.cfg

linux /vmlinuz-4.8.0-22-generic root=/dev/mapper/systems-ubuntu ro quiet init=/bin/bash

Но, обычно, удобнее изменить это значение временно, в меню Grub. Читайте подробнее об этом в статье параметры ядра Linux. Так не выполняется автозагрузка программы linux, но, тем не менее, иногда может быть полезно.

Автозагрузка в системе инициализации

Чаще всего, когда говорится автозагрузка Linux, подразумевается именно автозагрузка сервисов с помощью системы инициализации. В systemd очень продвинутая система управления службами. Здесь поддерживается разрешение зависимостей, параллельный запуск, отсрочка запуска и перезапуск при ошибке. В терминологии Systemd все запускаемые программы представлены файлами юнитов, в каждом юните описаны параметры программы, ее исполняемый файл, а также дополнительные требования к запуску.

Для добавления или удаления служб из автозапуска используется команда systemctl. Чтобы добавить службу в автозапуск выполните:

sudo systemctl enable имя_службы

А чтобы отключить ее автозапуск linux:

sudo systemctl disable имя_службы

Например, если вы хотите добавить в автозагрузку Apache, то нужно выполнить:

sudo systemctl enable apache

Также вы можете проверить добавлена ли уже служба в автозагрузку:

Если вы не знаете точное имя файла сервиса, но знаете его первую букву, то можно использовать автодополнение, как и в любом другом месте терминала с помощью кнопки Tab:

Также вы можете посмотреть все сервисы, которые были добавлены в автозагрузку с помощью команды:

systemctl list-unit-files | grep enabled

Автозагрузка скриптов в Linux

Раньше было принято размещать все скрипты, которые запускаются по умолчанию в файле /etc/rc.local. Этот файл все еще существует, но это пережиток системы инициализации SysVinit и теперь он сохраняется только для совместимости. Скрипты же нужно загружать только с помощью Systemd.

Для этого достаточно создать простой юнит-файл и добавить его в автозагрузку, как любой другой сервис. Сначала создадим этот файл:

sudo vi /lib/systemd/system/runscript.service

[Unit]
Description=My Script Service
After=multi-user.target
[Service]
Type=idle
ExecStart=/usr/bin/local/script.sh
[Install]
WantedBy=multi-user.target

В секции Unit мы даем краткое описание нашему файлу и говорим с помощью опции After, что нужно запускать этот скрипт в многопользовательском режиме (multi-user). Секция Service самая важная, здесь мы указываем тип сервиса - idle, это значит, что нужно просто запустить и забыть, вести наблюдение нет необходимости, а затем в параметре ExecStart указываем полный путь к нашему скрипту.

Осталось выставить правильные права:

sudo chmod 644 /lib/systemd/system/runscript.service

Затем обновить конфигурацию и добавить в автозагрузку Linux новый скрипт:

sudo systemctl daemon-reload
sudo systemctl enable myscript.service

После следующей перезагрузки этот скрипт будет запущен автоматически. Обратите внимание, что для каждого скрипта, который вы собираетесь запускать должны быть правильно выставлены права, а именно нужно установить флаг выполнения. Для этого используйте команду chmod:

sudo chmod u+x /usr/local/bin/script

В параметрах мы передаем утилите адрес файла скрипта. Исполняемость - это обязательный параметр для всех способов.

Автозагрузка X сервера

Часто, в легких окружениях рабочего стола и оконных менеджеров для автозагрузки программ используется автозагрузка на уровне X сервера. Все запускаемые, таким образом, скрипты будут стартовать после запуска X сервера. Чтобы настроить такую автозагрузку Linux вам будет достаточно добавить путь к нужному скрипту в файл

/.xinitrc или /etc/X11/xinit/xinitrc. Синтаксис добавляемой строки таков:

exec путь_к_скрипту &

/.xinitrc еще не существует, то его нужно создать:

Затем, чтобы добавить в автозагрузку linux скрипт, отредактируйте файл так, как вам нужно. Например, будем запускать Firefox:


Готово. Осталось сохранить изменения. При следующем запуске X сервера сработает автозапуск Linux и выполняется эта команда. Таким же способом может выполняться автозапуск приложений linux.

Автозагрузка окружения рабочего стола

Такие мощные окружения рабочего стола как Gnome и KDE имеют свои приложения для автозагрузки. Например, в Gnome программа называется "Запускаемые автоматически приложения". Вы можете запустить ее из главного меню системы:


Здесь вы видите все программы, которые уже добавлены в автозагрузку. Вы можете отключить каждую из них просто сняв галочку.


Чтобы добавить новую программу или скрипт в автозагрузку нажмите кнопку "Добавить":


Тут вам нужно заполнить три поля:

  • Имя - произвольное имя для команды, по которому вы сможете ее найти;
  • Команда - полный путь к исполняемому файлу программы;
  • Комментарий - дополнительная информация, указывать необязательно.


Дальше нажмите "Добавить" ваша программа появится в списке. При следующей загрузке системы, будет выполняться автозагрузка программ linux.

Автозагрузка Bash

Самый простой автозапуск скрипта linux - это запуск с помощью bashrc. Ваш скрипт или команда будет выполняться каждый раз, когда запускается новая сессия терминала. Для этого добавьте адрес нужного скрипта в файл

/usr/bin/local/script
export MYWAR=test

Здесь вы можете запускать на выполнение любые скрипты или команды. Часто такой подход используется для создания псевдонимов команд, объявления новых переменных и собственных функций.

Выводы

В этой статье мы рассмотрели добавление в автозагрузку linux, а также как работает автозагрузка и ее виды. Конечно, существует множество других файлов, куда бы вы могли пристроить свой скрипт, но это будет неправильно. Нужно использовать только предназначенные для этого методы, хотя бы потому, чтобы потом не забыть. Если у вас остались вопросы, спрашивайте в комментариях!

Всех приветствую!

Сегодняшний вопрос (насчет автозагрузки приложений) весьма популярен, причем, как при работе в Windows, так и Linux. Разумеется, в Linux он имеет свои особенности.

Наверное, для начала сразу же следует сказать, что в Linux несколько уровней (режимов) автозагрузки. Например, есть автозагрузка на уровне ядра, на уровне скриптов (rc.local), bash, и пр. малопонятные для начинающего пользователя аббревиатуры.

Если в процессе настройки вам понадобиться указать программу вручную (которую требуется авто-загружать) — ищите исполняемый файл в каталоге: /usr/bin (для отдельных приложений, запускаемых от имени админа: /usr/sbin ).

ускорение ПК

Примеры настройки автозагрузки

Вариант 1

Примечание : в некоторых системах Linux подобная опция в настройках приложения может ничего не дать. (т.е. приложение не будет запускаться при загрузке ОС).

Настройки конкретного приложения

Настройки конкретного приложения / параметры запуска

Вариант 2

Теперь пару слов о панелях управления тех дистрибутивов Linux, которые я рекомендовал.

Linux Mint

Сначала необходимо открыть меню ПУСК/параметры системы и перейти во вкладку "Автозагрузка" .

Параметры системы - автозагрузка (Linux Mint)

Параметры системы - автозагрузка (Linux Mint)

После кликнуть по "плюсику" и выбрать нужное приложение из списка. Это всё. ✌

Добавляем нужно приложение (Linux Mint)

Добавляем нужно приложение (Linux Mint)

Elementary OS

Здесь все делается практически аналогично, как в Linux Mint.

Сначала необходимо открыть параметры системы и перейти во вкладку "Приложения" .

Параметры системы - приложения (Elementary OS)

Параметры системы - приложения (Elementary OS)

После раскрыть меню "Автозапуск" , нажать на "плюс" и выбрать нужное приложение.

Автозапуск — выбор нужного приложения (Elementary OS)

Автозапуск — выбор нужного приложения (Elementary OS)

Теперь приложение для мониторинга будет запускаться при старте Linux

Теперь приложение для мониторинга будет запускаться при старте Linux

Ubuntu

В Ubuntu также есть специальное ПО для решения этой задачи: необходимо перейти во вкладку "Система → Параметры → Запускаемые приложения" .

Ubuntu — добавить программу

Ubuntu — добавить программу

Находим нужное приложение в каталоге

Находим нужное приложение в каталоге

Deepin

Этот дистрибутив (на мой взгляд) в плане простоты работы выигрывает у предыдущих!

Как вам. (так просто даже в Windows не сделаешь!)

Как добавить ярлык на раб. стол или программу в автозагрузку

Как добавить ярлык на раб. стол или программу в автозагрузку

Разумеется, для исключения приложения из автозагрузки — нужно проделать обратную операцию: также кликнуть ПКМ по значку.

Теперь на приложении спец. значок — оно будет стартовать вместе с системой (Deepin)

Теперь на приложении спец. значок — оно будет стартовать вместе с системой (Deepin)

Читайте также: