Три механизма автозапуска и чем они различаются
На настольной Linux нет единого переключателя автозапуска, как в некоторых других системах: приложения стартуют разными путями. Для домашнего компьютера на Ubuntu или Debian полезно различать три механизма, потому что у каждого свои возможности и свои места, где его искать.
| Механизм | Когда срабатывает | Где настраивается |
|---|---|---|
| автозапуск сеанса | при входе пользователя в графическую среду | настройки окружения или файлы .desktop |
| пользовательская служба systemd | при входе пользователя, иногда и раньше | systemctl --user |
| системная служба | при старте компьютера, до входа | systemctl без --user, права администратора |
Графические программы вроде мессенджеров, облачных клиентов и менеджеров буфера обмена обычно запускают через первый механизм. Службы без окон, например синхронизация, часто оформляют как пользовательские. Системный автозапуск подходит серверным задачам и описан на странице про systemctl; для программ с окнами он, как правило, не нужен.
Графический способ: настройки окружения
Простой путь для новичка — стандартный инструмент среды. Названия пунктов зависят от окружения рабочего стола и версии, поэтому ориентируйтесь на смысл, а не на дословный заголовок.
- GNOME (в том числе стандартная Ubuntu): отдельная программа настройки автоматически запускаемых приложений; в некоторых системах она входит в состав «Дополнительных настроек» (GNOME Tweaks) на вкладке автозапуска;
- KDE Plasma: раздел автозапуска в системных настройках, в блоке про запуск и завершение;
- Xfce: настройки сеанса и запуска, вкладка автозапуска приложений;
- другие окружения обычно предлагают что-то похожее в настройках сеанса.
В таком окне вы нажимаете «Добавить», указываете имя и команду запуска, и программа сохраняет запись. Если нужной программы нет в списке, команду можно взять из её файла .desktop или проверить в терминале: если приложение открывается после ввода команды, её же можно использовать в автозапуске. Отключение работает так же: убираете галочку или удаляете запись. Сама программа при этом не удаляется, и запускать её вручную по-прежнему можно.
Прежде чем добавлять запись, убедитесь, что программа действительно нужна при каждом входе. Чем больше приложений стартует одновременно, тем дольше загрузка рабочего стола на слабом компьютере. Хорошая практика — оставить в автозапуске только то, что вы открываете сразу после входа, а остальное запускать вручную.
Файл .desktop в ~/.config/autostart
Под графическими настройками лежит простой механизм: каталог ~/.config/autostart с файлами .desktop. Любой файл оттуда окружение запускает при входе. Такой способ работает в большинстве популярных окружений и не зависит от их интерфейса, поэтому удобен, если вы настраиваете несколько компьютеров одинаково.
Минимальное содержимое файла, например ~/.config/autostart/моя-программа.desktop:
- [Desktop Entry] — заголовок раздела;
- Type=Application — тип записи;
- Name=Моя программа — отображаемое имя;
- Exec=/полный/путь/к/программе — команда запуска, лучше с полным путём.
Перезапуск не нужен: запись сработает при следующем входе. Каталог может не существовать, тогда создайте его командой mkdir -p ~/.config/autostart. Для системных программ примеры записей лежат в /etc/xdg/autostart; именно оттуда окружение берёт общесистемные автозапуски.
Чтобы отключить системную запись только для себя, скопируйте файл с тем же именем в ~/.config/autostart и добавьте строку Hidden=true. У GNOME есть также параметр X-GNOME-Autostart-enabled=false. Так вы не трогаете системный файл, а ваш вариант имеет приоритет.
Задержка запуска и проблемы с порядком
Иногда программа запускается слишком рано: сеть ещё не поднялась, панель не готова, значок в трее не появился. Обычно это решают небольшой задержкой.
Способов несколько. В некоторых версиях GNOME учитывается параметр X-GNOME-Autostart-Delay=секунды в файле .desktop. Это специфичный параметр: другие окружения (и новые версии GNOME) могут его игнорировать. Универсальный приём — обернуть команду в оболочку: Exec=sh -c "sleep 10 && /полный/путь/к/программе". Здесь число секунд подбирается опытным путём; единого значения нет, оно зависит от компьютера.
Если приложение не запускается вообще, пройдите по шагам:
- Скопируйте команду из Exec и выполните её в терминале — увидите ошибку, если путь неверный или нужны переменные окружения.
- Проверьте, что файл имеет расширение .desktop и корректный заголовок.
- Убедитесь, что запись не отключена строкой Hidden=true.
- Посмотрите журнал текущего сеанса командой journalctl --user -b, если он ведётся в вашей системе.
Программы, которые требуют графической среды, как правило, нельзя запускать как системные службы до входа пользователя: у них нет доступа к экрану.
Пользовательские службы systemd для фоновых задач
Если программа не имеет окна и должна работать в фоне, удобнее оформить её как пользовательскую службу. Файл-описание кладут в каталог ~/.config/systemd/user, например в файл имя.service. Внутри указывают раздел [Service] с параметром ExecStart= и раздел [Install] с WantedBy=default.target.
Дальше команды без sudo: systemctl --user daemon-reload заставляет systemd перечитать описания, systemctl --user enable --now имя включает службу и запускает её сразу, а systemctl --user status имя показывает состояние. Выключение — systemctl --user disable имя.
По умолчанию пользовательские службы работают, пока пользователь вошёл в систему. Чтобы они стартовали при загрузке и без входа, существует режим linger, включаемый командой loginctl enable-linger имя, но для домашнего компьютера это нужно редко.
Программы с окнами лучше оставить в автозапуске сеанса. Если вы ищете, почему лишние службы замедляют вход, вклад служб в загрузку системы показывает systemd-analyze blame (для пользовательских служб — с ключом --user), а общие принципы управления службами описаны в словаре и на странице про systemctl.
Если вы ведёте несколько компьютеров, удобно хранить файлы .desktop в одном месте, например в личной папке с заметками, и копировать их в ~/.config/autostart на каждой машине. Так набор программ при входе одинаков везде, а изменения делаются один раз. Перед копированием проверьте пути в Exec: на разных системах программа может лежать в разных каталогах, а в случае snap и Flatpak команда запуска выглядит иначе, чем у обычного пакета.