Systemd 运行 唤醒后的脚本:"Can't open display"

Systemd run script after wakeup: "Can't open display"

我有一个脚本可以处理屏幕亮度,工作正常,很酷,现在我想在从挂起唤醒后 运行。

所以我尝试使用systemd,我在/etc/systemd/system/myscript.service下有一个文件如下:

[Unit]
Description=Run myscript after wakeup
After=suspend.target hibernate.target hybrid-sleep.target suspend-then-hibernate.target


[Service]
Type=oneshot
ExecStart=/usr/local/bin/myscript
User=me
#Environment=DISPLAY=:0

[Install]
WantedBy=suspend.target hibernate.target hybrid-sleep.target suspend-then-hibernate.target

注意:设置 User是因为myscript需要HOME变量。

在我 运行 sudo systemctl enable myscript 并尝试 suspend/wakeup 之后,myscript 不是 运行 并且 journalctl -u myscript.service 输出以下消息:

Jan 25 13:42:53 mymachine myscript[24489]: Can't open display
Jan 25 13:42:53 mymachine systemd[1]: myscript.service: Succeeded.
Jan 25 13:42:53 mymachine systemd[1]: Finished Run myscript after wakeup.

如果我取消注释 myscript.service 中的 #Environment=DISPLAY=:0 行,错误是“无法打开显示:0”

任何帮助都会很棒:^)

这适用于我的 Arch 系统。我在那个位置测试了一个脚本,在从休眠或挂起(systemctl hibernate / suspend)恢复后,xbacklight 上升和下降了 75% 几次。

我只能认为您的环境中没有 DISPLAY=:0(使用 env 验证),因为您是 运行 作为脚本的用户。

我遇到了类似的问题。通过将以下内容添加到我的 systemd 服务来修复它:

Environment="DISPLAY=<DISP>"
Environment="XAUTHORITY=/path/to/xauthority"

用您的 $DISPLAY 变量的值替换 <DISP>,这通常是 :0