Я хочу позволить пользователям моего приложения контролировать, должно ли приложение запускаться при каждом входе пользователя в систему, скажем, путем активации / деактивации флажка внутри приложения. (Dropbox делает это, например.)
Каков наилучший способ реализовать это? Я бы предпочел, чтобы реализация функционировала в большинстве сред Linux (т.е. была максимально кроссплатформенной). Также было бы неплохо, если бы пользователю не нужно было получать права root, чтобы изменить этот параметр.
Распределения, придерживающиеся спецификаций X-Desktop, будут автоматически запускать приложения из общесистемного каталога XDG_CONFIG_DIRS/autostart
и из каталога автозапуска в доме пользователя. Только последние будут доступны без прав root.
Сначала нам нужно узнать, где находится каталог автозапуска. В соответствии с спецификациями X-Desktop расположение должно быть следующим:
Если одно и то же имя файла находится в нескольких каталогах автозапуска, следует использовать только файл в самом важном каталоге ,
blockquote> [ 1125] В стандартной установке Ubuntu
- Пример: если $ XDG_CONFIG_HOME не задан, каталогом автозапуска в домашнем каталоге пользователя является ~ / .config / autostart /
- Пример: если $ XDG_CONFIG_DIRS не установлен для всей системы Каталог автозапуска: / etc / xdg / autostart /
- Пример: если не установлены $ XDG_CONFIG_HOME и $ XDG_CONFIG_DIRS, а два файла /etc/xdg/autostart/foo.desktop и ~ / .config / autostart / foo .desktop существует, тогда будет использоваться только файл ~ / .config / autostart / foo.desktop, потому что ~ / .config / autostart / важнее, чем / etc / xdg / autostart /
$XDG_CONFIG_HOME
не определено. Поэтому каталог автозапуска находится в~/.config/autostart
. Любой файл.desktop
, расположенный в этом каталоге, запустит соответствующее приложение при входе в систему.
2. Создайте каталог автозапуска, если его нет
Прежде чем мы сможем заполнить каталог автозапуска, нам нужно проверить его наличие и в конечном итоге создать его.
3. Определите файл
.dektop
Для Unity и GNOME минимальный файл
.desktop
будет иметь следующее содержимое для автоматического запуска приложения:[Desktop Entry] Type=Application Exec=</path/to/application> Hidden=false NoDisplay=false X-GNOME-Autostart-enabled=true Name=<name of application>
Мы можем распространять файл шаблона
.desktop
с нашим приложением, чтобы скопировать или удалить его из каталога автозапуска в зависимости от установленных пользовательских настроек.Определите общесистемное приложение автозапуска
Чтобы включить автозапуск приложения для всех пользователей, нам нужно заполнить общесистемный каталог автозапуска (например,
/etc/xdg/autostart
) нашим файлом.desktop
.Чтобы сделать это из пользовательских настроек, нам нужно временно разрешить права root. Это может, например, сделать это, вызвав подпроцесс с
pkexec
из нашего диалога настроек.
См. также этот связанный вопрос: