Как автоматически запустить сервис в Linux?
У меня есть программа под названиемredshift
что я хотел бы автозапуск, когда я вхожу в систему. Если я бегу "redshift
"в терминале (или redshift &
) или через Alt+F2, это запустит его. Я не думаю, что он имеет сценарий инициализации, поэтому будет добавление "redshift
"к моему .profile
загрузить файл при запуске? Я полагаю, cronjob установлен в @reboot
также может работать?
Я думаю, что некоторые программы должны выполняться из определенной пользовательской среды, особенно те, которые влияют на графические элементы? Например, если я подключусь к удаленному компьютеру по SSH и попытаюсь открыть программу с графическим интерфейсом, очевидно, что это будет невозможно, поэтому произойдет сбой. Вот чего я стараюсь избегать в отношении того, откуда я запускаю эту программу.
1 ответ
Красное смещение не является системным сервисом; он работает во время сеанса входа в систему, поскольку ему необходим доступ к серверу X11. Так что, в основном, он должен запускаться автоматически так же, как и большинство графических программ:
Способ 1
Добавить файл redshift.desktop
в каталог автозапуска XDG, ~/.config/autostart/
:
[Desktop Entry]
Type=Application
Name=Redshift
Exec=/usr/bin/redshift
Это работает со средами рабочего стола, которые следуют спецификации XDG Autostart; это включает в себя GNOME, KDE, Xfce и многие другие. В некоторых это редактируется через графические интерфейсы (например, gnome-session-properties
в GNOME).
Способ 2
Добавьте следующую строку...
redshift &
...на ваш ~/.xprofile
, Это работает с большинством дисплеев дисплеев (однако, gdm, kdm, lightdm, lxdm, sddm - не тонкие).
Если вы используете инструмент startx, ~/.xprofile
по умолчанию не используется, поэтому вам придется обновить ~/.xinitrc
вместо сценария - добавьте ту же строку где-нибудь перед запуском менеджера сеансов.
Способ 3
Если вы используете диспетчер отображения, такой как GDM, вы можете запустить программу перед входом в систему, чтобы она также применялась к экрану входа в систему. Как это сделать, зависит от дисплеев, но в GDM это можно сделать, отредактировав /etc/gdm/Init/Default
, (Отказ от ответственности: я не пробовал, и это может быть не тот файл.)
Вещи, которые не будут работать
Сценарий инициализации системы не будет работать, поскольку он работает независимо от графических сеансов - он не будет иметь права
$DISPLAY
ни право$XAUTHORITY
задавать; если вы жестко закодируете их, это может привести к попытке подключиться к неправильному дисплею (например, вы жестко закодировалиDISPLAY=":0"
но ваша сессия начинается в:1
); и если вы попробуете все дисплеи, сценарий все еще может запуститься до того, как будет запущен любой дисплей X11.@reboot
cronjob будет работать как правильный пользователь (вместо того, чтобыsu
/sudo
), но в остальном у него те же проблемы, что и у сценариев инициализации системы.