J'ai un simple script /lib/systemd/system-sleep/start_my_lock
et il ne s'exécute pas lorsque le système est suspendu. J'essaie de faire de i3lock mon verrou par défaut.
#!/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
Solution, Je devais exécuter le script sur mon utilisateur local au lieu de root
su jappatel -c <command>
et aussi exécuter et également spécifier l'affichage à l'aide
DISPLAY=:0
mon dernier script
#!/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
Les outils qui reposent sur un serveur d'affichage ou une session utilisateur telle que scrot
ou i3lock
ne fonctionnent pas à partir de scripts système en arrière-plan car ils ne trouvent pas le serveur d'affichage et/ou la session utilisateur.
Vous devez définir la variable d’environnement DISPLAY
avant d’appeler ces outils avec
export DISPLAY=:0
ou
DISPLAY=:0 <COMMAND>
Si, pour une raison quelconque, DISPLAY
devrait avoir une valeur différente, ajustez-la comme il convient. Vous pouvez vérifier la valeur actuelle depuis une session graphique avec echo "$DISPLAY"
.
Pour plus d'informations sur un problème très similaire, voir Comment démarrer une application graphique à partir de cron?
Vous pouvez tester l'exécution de vos scripts sans les variables d'environnement liées à la session si vous préfixez leur appel par env -i
, e. g.
env -i /lib/systemd/system-sleep/start_my_lock
qui vide la liste des variables d'environnement.