我有一个 systemd 计时器服务,它每 5 分钟运行一次脚本来检查显示器是否已关闭。如果已关闭,它会锁定屏幕。
但是我在用户和权限方面遇到了一些问题。似乎必须以 sudo 身份运行脚本才能查询显示器的电源状态,但这会导致 xsecurelock 需要 root 密码才能解锁屏幕。我该如何解决这个问题?
我应该说:我想保留这种方法并使用 xsecurelock,因为这在我的其他电脑上有效。需要 sudo 来查询电源状态似乎是这台电脑所特有的。
- 系统服务
Description=Check if Monitor is switched off and run xsecurelock
After=network.target
[Service]
User=dave
Environment=XAUTHORITY=/home/dave/.Xauthority
Environment=DISPLAY=:0
Type=simple
ExecStart=/home/dave/monitor_check.sh --debug
StandardOutput=journal
StandardError=journal
Restart=no
[Install]
WantedBy=multi-user.target
- 脚本
XSECURELOCK_SAVER=saver_xscreensaver
export XSECURELOCK_SAVER
echo "The value of XSECURELOCK_SAVER is: $XSECURELOCK_SAVER"
state=$(ddcutil getvcp D6 2>&1)
echo "$state"
sleep 2
if [[ "$state" == *"Display not found"* ]]; then
echo "Monitor is off, executing command..."
exec xsecurelock
break
else
echo "Display is found, nothing to do."
fi