我有一个名为的程序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
),但除此之外,它还具有与系统启动脚本相同的问题。