Systemd 唤醒后运行脚本:“无法打开显示”

时间:2021-01-25 12:54:35

标签: systemd

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

所以我尝试使用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 并尝试挂起/唤醒后,myscript 没有运行并且 journalctl -u myscript.service 输出以下消息:

<块引用>

1 月 25 日 13:42:53 mymachine myscript[24489]:无法打开显示
1 月 25 日 13:42:53 mymachine systemd[1]:myscript.service:成功。
Jan 25 13:42:53 mymachine systemd[1]:完成唤醒后运行 myscript。

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

任何帮助都会很棒:^)

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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

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

<DISP> 替换为 $DISPLAY 变量的值,通常为 :0