编辑:

编辑:

我有一个带有背光的键盘,当我使用 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 ""仍然存​​在。

为什么该命令可以在我的终端中正常运行(打开键盘灯),但当我启动它时却无法在我的服务文件中正确运行?

相关内容