web-dev-qa-db-fra.com

Le script de sommeil système n'est pas exécuté

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
4
Jay Patel

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
2
Jay Patel

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.

Solution

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?

Essai

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.

1
David Foerster