在 systemd 中添加 redshift - 与 xhost + 配合使用

在 systemd 中添加 redshift - 与 xhost + 配合使用

我可以从命令行运行 redshift,但无法在 systemd 中运行。类似问题对我没什么用。

Ubuntu 16.04。

我的redshift.service:

$ cat /etc/systemd/system/redshift.service 
[Unit]
Description=restrict blue light
After=graphical.target

[Service]
ExecStart=/usr/bin/redshift -v 
Environment=DISPLAY=:0

[Install]
WantedBy=graphical.target

如果我/usr/bin/redshift从命令行运行,它会开始重新着色我的屏幕。如果我尝试启动服务,它会转储:

$ sudo systemctl status redshift
● redshift.service - restrict blue light
   Loaded: loaded (/etc/systemd/system/redshift.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Sun 2018-09-16 21:23:51 PDT; 4s ago
  Process: 4676 ExecStart=/usr/bin/redshift -v -l 37.35:121.99 (code=exited, status=1/FAILURE)
 Main PID: 4676 (code=exited, status=1/FAILURE)

Sep 16 21:23:51 cyberpower-linux redshift[4676]: Initialization of randr failed.
Sep 16 21:23:51 cyberpower-linux redshift[4676]: Trying next method...
Sep 16 21:23:51 cyberpower-linux redshift[4676]: No protocol specified
Sep 16 21:23:51 cyberpower-linux redshift[4676]: X request failed: XOpenDisplay
Sep 16 21:23:51 cyberpower-linux redshift[4676]: Initialization of vidmode failed.
Sep 16 21:23:51 cyberpower-linux redshift[4676]: Trying next method...
Sep 16 21:23:51 cyberpower-linux redshift[4676]: No more methods to try.
Sep 16 21:23:51 cyberpower-linux systemd[1]: redshift.service: Main process exited, code=exited, status=1/FAILURE
Sep 16 21:23:51 cyberpower-linux systemd[1]: redshift.service: Unit entered failed state.
Sep 16 21:23:51 cyberpower-linux systemd[1]: redshift.service: Failed with result 'exit-code'.

如果我运行xhost +并尝试再次启动,它确实会开始为屏幕着色。如何让我的 systemd 脚本访问我的窗口服务器,而不让所有内容访问我的窗口服务器?

提前感谢任何线索...

答案1

更新:将服务从 移至 后/etc/systemd/system/redshift.service~/.config/systemd/user/redshift.servce它开始运行。

请注意,这/etc/systemd/user/redshift.service不起作用!

我仍然欢迎一个答案向我展示如何为该主机的所有用户安装它。

答案2

继续重启,最后它就能正常工作了,哈哈。问题可能是,在登录之前,gdm 还没有启动 Xorg,因此没有显示,但我不确定。我会尝试先启动 gdm,看看会发生什么。

[Unit]

After=multi-user.target 

StartLimitIntervalSec=0

[Service]

Type=simple

ExecStart=/usr/bin/redshift -O 3000

Environment=DISPLAY=:0

Restart=always

RuntimeMaxSec=60

[Install]

WantedBy=graphical.target

相关内容