2つのシステム起動スクリプトを作成しました。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
手動で実行すると、スクリプトは期待どおりに機能します。
上のスクリプトはタッチパッドの左下隅にあるRMBジェスチャーを無効にし、下のスクリプトは私が入力したときにLEDをオン/オフする必要があります(https://www.reddit.com/r/thinkpad/comments/7n8eyu/thinkpad_led_control_under_gnulinux/)、サービスの状態を確認して実行しているかどうかを確認しましたが、起動時に自動的に実行された場合はどちらも影響しません。
systemctl status servicename.service コマンドを使用しましたが、明らかなエラーは発生しませんでした。修正提案は理想的ですが、起動時にこれらのスクリプトを実行するための代替案も歓迎します。私はinit.dメソッドとUbuntuの起動スクリプトを設定しようとしましたが、残念ながら両方の方法は機能しません。
答え1
ジョブはデスクトップと同じランタイム環境では実行されず、実行または起動cron
スクリプトとして実行されます。でスクリプトを起動します。変更やその他の環境変数の設定は、ジョブに自動的に伝播されません。たとえば、noなので、GUIプログラムには特別な処理(読み取り)が必要です。systemd
systemd
root
PATH
cron
$DISPLAY
man xhost
echo "=== id ===";id;echo "=== set ===";set;echo "=== env ===";env | sort;echo "=== alias ===";alias
各環境の結果を確認してください。