如何在 Linux 中自动启动服务?

如何在 Linux 中自动启动服务?

我有一个名为的程序redshift我希望在登录时自动启动。如果我redshift在终端(或redshift &)或通过alt+运行“ ” f2,这将启动它。我认为它没有初始化脚本,那么将“ redshift”添加到我的.profile文件是否会使其在启动时加载?我想将 cronjob 设置为@reboot也可以工作?

我认为有些程序需要从特定的用户环境执行,尤其是那些影响图形元素的程序?例如,如果我通过 SSH 连接到远程计算机并尝试打开 GUI 程序,显然这是不可能的,所以它会失败。这就是我试图避免的在哪里我从执行该程序。

答案1

redshift 不是系统服务;它在您的登录会话中工作,因为它需要访问 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 - 但不包括 slim)。

如果你使用启动工具,~/.xprofile默认情况下不使用,因此您必须更新~/.xinitrc脚本 - 在启动会话管理器之前在某处添加相同的行。

方法 3

如果您使用 GDM 之类的显示管理器,您可能希望在登录之前运行该程序,以便它也适用于登录屏幕。如何执行此操作因显示管理器而异,但在 GDM 中,可以通过编辑来完成/etc/gdm/Init/Default。(免责声明:我还没有尝试过,这可能是错误的文件。)

行不通的事情

  • 系统初始化脚本将无法工作,因为它独立于图形会话运行——它没有权限$DISPLAY也没有正确的$XAUTHORITY设置;如果你硬编码这些,它最终可能会尝试连接到错误的显示器(例如,你硬编码,DISPLAY=":0"但你的会话恰好从 开始:1);如果你让它尝试所有显示器,脚本仍然很可能在 之前启动任何X11显示已启动。

  • cronjob@reboot将以正确的用户身份运行(而不需要su/ sudo),但除此之外,它还具有与系统启动脚本相同的问题。

相关内容