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

Pet*_*ter 5 autostart

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

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

use*_*686 7

redshift 不是系统服务;它在您的登录会话中工作,因为它需要访问 X11 服务器。所以基本上它应该像大多数图形程序一样自动启动:

方法一

将文件添加redshift.desktop到 XDG Autostart 目录,~/.config/autostart/

[Desktop Entry]
Type=Application
Name=Redshift
Exec=/usr/bin/redshift
Run Code Online (Sandbox Code Playgroud)

这适用于遵循 XDG Autostart 规范的桌面环境;这包括 GNOME、KDE、Xfce 等。在某些情况下,它可以通过图形界面进行编辑(例如gnome-session-properties在 GNOME 中)。

方法二

添加以下行...

redshift &
Run Code Online (Sandbox Code Playgroud)

...到你的~/.xprofile. 这适用于大多数显示管理器(gdm、kdm、lightdm、lxdm、sddm - 然而不是超薄)。

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

方法三

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

行不通的事情

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

  • 一个@reboot的cronjob将运行在正确的用户(而不需要到su/ sudo),但除此之外,它具有所有的相同的问题,系统初始化脚本。