単純なスクリプト/lib/systemd/system-sleep/start_my_lock
があり、システムがサスペンドされたときに実行されません。i3lockをデフォルトのロックにしようとしています。
#!/bin/bash
case $1 in
pre)
scrot /home/jappatel/tmp/screen.png
convert /home/jappatel/tmp/screen.png -scale 10% -scale 1000% /home/jappatel/tmp/screen.png
convert /home/jappatel/tmp/screen.png /home/jappatel/Pictures/Icons/lock.png -gravity center -composite -Matte /home/jappatel/tmp/screen.png
i3lock -i /home/jappatel/tmp/screen.png
rm /home/jappatel/tmp/screen.png
;;
esac
解決策 rootではなくローカルユーザーでスクリプトを実行する必要がありました
su jappatel -c <command>
また、実行して、表示も指定します
DISPLAY=:0
私の最終的なスクリプト
#!/bin/bash
case $1 in
pre)
su jappatel -c "
DISPLAY=:0 scrot /home/jappatel/tmp/screen.png;
convert /home/jappatel/tmp/screen.png -scale 10% -scale 1000% /home/jappatel/tmp/screen.png;
convert /home/jappatel/tmp/screen.png /home/jappatel/Pictures/Icons/lock.png -gravity center -composite -Matte /home/jappatel/tmp/screen.png;
DISPLAY=:0 i3lock -i /home/jappatel/tmp/screen.png;
rm /home/jappatel/tmp/screen.png"
;;
esac
ディスプレイサーバーまたはscrot
やi3lock
などのユーザーセッションに依存するツールは、ディスプレイサーバーやユーザーセッションを見つけることができないため、バックグラウンドシステムスクリプトでは機能しません。
これらのツールを次のいずれかで呼び出す前に、DISPLAY
環境変数を設定する必要があります
export DISPLAY=:0
または
DISPLAY=:0 <COMMAND>
何らかの理由でDISPLAY
に異なる値が必要な場合は、適切に調整してください。 echo "$DISPLAY"
を使用すると、グラフィカルセッション内からcurrent値を確認できます。
非常によく似た問題の詳細については、 cronからGUIアプリケーションを起動する方法? を参照してください。
呼び出しに接頭辞env -i
を付けると、セッション関連の環境変数なしで実行するスクリプトをテストできます。 g。
env -i /lib/systemd/system-sleep/start_my_lock
環境変数リストを空にします。