Как автоматически запустить сервис в 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), но в остальном у него те же проблемы, что и у сценариев инициализации системы.

Другие вопросы по тегам