Сценарий системного сна не выполнен

У меня есть простой скрипт /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
4
задан 26 April 2017 в 18:04

2 ответа

Решение, я должен был запустить скрипт на своем локальном пользователе вместо корня

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
2
ответ дан 27 April 2017 в 04:04
  • 1
    Этот ответ является неправильным, если раздел Windows смонтирован в Ubuntu! Если, скажем, файловая система Windows смонтирована под /mnt, и Вы работаете rm -rf /*, it' s до свидания файлы Windows... – marcelm 10 April 2019 в 11:41

Инструменты, которые полагаются на сервер дисплея или сеанс пользователя как scrot или i3lock не работайте из фоновых системных сценариев, потому что они не могут найти сервер дисплея и/или сеанс пользователя.

Решение

Необходимо установить DISPLAY переменная среды перед вызовом этих инструментов с также

export DISPLAY=:0

или

DISPLAY=:0 <COMMAND>

Если по любой причине DISPLAY должен иметь другое значение, корректируют его как подходящий. Можно проверить текущее значение из графической сессии с echo "$DISPLAY".

Поскольку больше информации об очень похожей проблеме видит, Как запустить приложение GUI от крона?

Тестирование

Можно протестировать сценарии для выполнения без связанных с сессией переменных среды при добавлении префикса их вызова env -i, например.

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

который освобождает список переменной среды.

1
ответ дан 27 April 2017 в 04:04
  • 1
    @wizzwizz4 " нет, they' ll быть удаленным afterwards". это зависит от как " *" расширяется, обычно в алфавитном порядке, таким образом, "/bin" прежде "/mnt". но на самом деле, порядок не имеет значения, потому что, поскольку Вы уже сказали, " rm" уже находится в памяти, и это - единственная вещь, которая имеет значение. – rexkogitans 10 April 2019 в 13:33

Другие вопросы по тегам:

Похожие вопросы: