我有一个带有背光的键盘,当我使用 ubuntu 时,默认情况下它不会启动,因此每次启动后我都必须手动执行脚本来启用背光。
我想自动化这个以便脚本可以自动运行,所以我创建了一个 systemd 服务单元来处理它。
问题是,即使从终端启动,服务单元也不会运行
systemctl daemon-reload
systemctl start keyboard-lights.service
我已经.service
在里面创建了一个文件/etc/systemd/system/
[Unit]
Description=Startup script for keyboard backlights
[Service]
ExecStart=/usr/local/bin/keyboard-lights.sh
[Install]
WantedBy=multi-user.target
启用键盘灯的脚本位于/usr/local/bin/keyboard-lights.sh
我已经使用以下方法使脚本可执行
chmod 744 /usr/local/bin/keyboard-lights.sh
我的文件中缺少什么.service
导致脚本无法运行?
运行日志journalctl -xe
Oct 23 22:09:13 user keyboard-lights.sh[3479]: running keyboard-lights script
Oct 23 22:09:13 user keyboard-lights.sh[3479]: xset: unable to open display ""
Oct 23 22:09:13 user systemd[1]: keyboard-lights.service: Main process exited, code=exite
Oct 23 22:09:13 user systemd[1]: keyboard-lights.service: Unit entered failed state.
Oct 23 22:09:13 user systemd[1]: keyboard-lights.service: Failed with result 'exit-code'.
运行日志ls -lZ
-rw-rw-r-- 1 root root ? 199 Oct 23 22:00 /etc/systemd/system/keyboard-lights.service
附加編輯:
这是keyboard-lights.sh
脚本,当我单独运行它时它可以工作。
#!/bin/bash
echo "running keyboard-lights script"
if [ -f /tmp/keyboard_light ]; then
xset -led 3 && rm /tmp/keyboard_light
else
xset led 3 && touch /tmp/keyboard_light
fi
编辑:
我更改了帖子的标题以反映我认为导致问题的原因。
我尝试过搜索网络,但还没有找到解决方案xset: unable to open display ""
我确实尝试将其添加export DISPLAY=:0
到我的 shell 脚本中,但这并不能解决问题。
我修改了我的服务文件,只需运行打开键盘灯的命令,方法是将ExecStart
行更改为
ExecStart=/bin/sh -c "xset led 3"
但错误xset: unable to open display ""
仍然存在。
为什么该命令可以在我的终端中正常运行(打开键盘灯),但当我启动它时却无法在我的服务文件中正确运行?