我创建了两个 systemd 启动脚本https://www.howtogeek.com/687970/how-to-run-a-linux-program-at-startup-with-systemd/,包含以下内容:
#1
#!/bin/bash
synclient RightButtonAreaLeft=0
synclient RightButtonAreaTop=0
#2
#!/bin/bash
modprobe -r ec_sys
modprobe ec_sys write_support=1
echo -n -e "\x0a" | sudo dd of="/sys/kernel/debug/ec/ec0/io" bs=1 seek=12 count=1 conv=notrunc 2> /dev/null
while true; do
read -rsn1 input
if [[ size=${#input}!=0 ]]; then
echo -n -e "\x8a" | sudo dd of="/sys/kernel/debug/ec/ec0/io" bs=1 seek=12 count=1 conv=notrunc 2> /dev/null
fi
echo -n -e "\x0a" | sudo dd of="/sys/kernel/debug/ec/ec0/io" bs=1 seek=12 count=1 conv=notrunc 2> /dev/null
done
手动运行时,脚本按预期工作。
顶部脚本禁用触摸板上左下角的人民币手势,底部脚本应在我键入时打开和关闭 LED (https://www.reddit.com/r/thinkpad/comments/7n8eyu/thinkpad_led_control_under_gnulinux/),这两个在启动时自动运行时都没有任何效果,即使我检查了服务状态以验证是否已运行/正在运行。
我使用了 systemctl status servicename.service 命令,它不会引发任何明显的错误。虽然修复建议是理想的,但也欢迎在启动时运行这些脚本的任何替代方法。我已经尝试过 init.d 方法,以及 ubuntu 中的启动脚本设置,不幸的是这两种方法都不起作用。
答案1
作业通过 运行cron
,或者作为systemd
启动脚本不在桌面上运行的同一运行时环境中运行。systemd
启动脚本作为root
.您的任何PATH
更改或其他环境变量设置都不会自动传播到您的cron
作业。例如,没有$DISPLAY
,因此 GUI 程序需要特殊处理(读取man xhost
)。
echo "=== id ===";id;echo "=== set ===";set;echo "=== env ===";env | sort;echo "=== alias ===";alias
查看每个环境中的结果 。