为什么我的 systemd 启动脚本无法正常运行? (Ubuntu 20.04)

为什么我的 systemd 启动脚本无法正常运行? (Ubuntu 20.04)

我创建了两个 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查看每个环境中的结果 。

相关内容