Script de suspensão do sistema não executado

4

Eu tenho um script simples /lib/systemd/system-sleep/start_my_lock e ele não seria executado quando o sistema estivesse suspenso, estou tentando tornar o i3lock meu bloqueio padrão

#!/bin/bash
case  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
    
por Jay Patel 23.04.2017 / 16:38

2 respostas

2

Solução, eu tive que executar o script no meu usuário local em vez de root

su jappatel -c <command>

e também executar e também especificar a exibição usando

DISPLAY=:0

meu script final

#!/bin/bash
case  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
    
por Jay Patel 26.04.2017 / 15:23
0

As ferramentas que dependem de um servidor de exibição ou de uma sessão de usuário como scrot ou i3lock não funcionam em scripts do sistema em segundo plano porque não conseguem encontrar o servidor de exibição e / ou a sessão do usuário.

Solução

Você precisa definir a variável de ambiente DISPLAY antes de invocar essas ferramentas com

export DISPLAY=:0

ou

DISPLAY=:0 <COMMAND>

Se, por alguma razão, DISPLAY tiver um valor diferente, ajuste-o como adequado. Você pode verificar o valor atual dentro de uma sessão gráfica com echo "$DISPLAY" .

Para mais informações sobre um problema muito semelhante, consulte Como iniciar um aplicativo GUI a partir do cron?

Teste

Você pode testar seus scripts para serem executados sem variáveis de ambiente relacionadas à sessão, se você prefixar sua invocação com env -i , e. g.

env -i /lib/systemd/system-sleep/start_my_lock

que esvazia a lista de variáveis de ambiente.

    
por David Foerster 25.04.2017 / 10:24