Как запустить скрипт после возобновления и после разблокировки экрана

В Ubuntu 12.04 LTS я хотел бы запускать скрипты после возобновления с suspend и после разблокировки моего рабочего стола. Они должны работать как мой пользователь и с доступом к моему $DISPLAY.

В частности, я хотел бы

перезапустить nm-applet для обхода ошибки 985028 показать пользовательский уведомление, используя notify-send, возможно, другие вещи, когда я получаю эти рабочие

Когда я возобновляю, запускаются скрипты в /etc/pm/sleep.d/, но они выполняются как root, без знания моего экрана и имени пользователя. Это может сработать, если я жестко запрограммировал свое имя пользователя и export значение по умолчанию DISPLAY :0 в этих сценариях, но это кажется очень уродливым взломом.

Скрипты в ~/.config/autostart/xyz.desktop запускаются после входа в систему, но они не запускать после просто отпирания экрана после возобновления.

Есть ли способ запуска скриптов после разблокировки экрана после возобновления?

1
задан 8 January 2018 в 00:42

3 ответа

Похоже, вам все равно нужно жестко закодировать имя пользователя в предыдущем ответе, так что вот простой скрипт для /etc/pm/sleep.d, если кто-то ищет быстрое исправление:

#!/bin/bash 
case "$1" in
    hibernate|suspend)
        sudo -u USERNAME env DISPLAY=:0 zenity --info --text "do stuff on suspend"
        ;;
    thaw|resume)
        sudo -u USERNAME env DISPLAY=:0 zenity --info --text "do stuff on resume"
        ;;
esac
8
ответ дан 25 May 2018 в 05:17

Этот вопрос в Unix & amp; Документ Linux использует альтернативный подход с использованием сообщений dbus:

dbus-monitor --session "type='signal',interface='org.gnome.ScreenSaver'" | ( while true; do read X; if echo $X | grep "boolean true" &> /dev/null; then SCREEN_LOCKED; elif echo $X | grep "boolean false" &> /dev/null; then SCREEN_UNLOCKED; fi done )

(Замените SCREEN_LOCKED и SCREEN_UNLOCKED действия, которые вы хотите выполнить.)

Используя xrandr 1>/dev/null 2>1 как действие при разблокировке исправлена ​​моя проблема, что разрешения / позиции монитора не были правильно восстановлены при разблокировке экрана (xrandr, похоже, вызывает повторное считывание настроек экрана). Я добавил эту строку в качестве фоновой задачи в моем .bash_profile (строго это может быть лучше, как файл рабочего стола в ~ / .config / autostart, поскольку это работает только при запуске gnome):

dbus-monitor --session "type='signal',interface='org.gnome.ScreenSaver'" | ( while true; do read X; if echo $X | grep "boolean false" &> /dev/null; then xrandr 1>/dev/null 2>1; fi done ) &

Дополнительную информацию о API-интерфейсе gnome-screensaver можно найти в . Этот вопрос в Unix & amp; Сайт Linux и на мониторе dbus здесь.

4
ответ дан 25 May 2018 в 05:17

Вы можете запустить скрипт, используя start-stop-daemon. start-stop-daemon может разветвлять поток, выполняемый как разные uid и gid, следовательно, решая вашу проблему.

Что вам нужно сделать, так это написать скрипт задания, размещенный в системе PATH, например /usr/bin, и создайте дополнительный сценарий демона в /etc/pm/sleep.d. Соответствующее действие pm-suspend, например resume или thaw, сценарий демона выполняет скрипт задания через

start-stop-daemon --start $ARGs --name nm-rtvt--exec /usr/bin/job_script

, где ARGs может быть --chuid 1001:1001 или просто --user your_username.

И для обеспечения целостности вы можете также попытаться, чтобы сценарий демона остановил дамона с именем nm-rtvt перед тем, как приостановить с помощью

start-stop-daemon --stop <...>

соответствующие pm-suspend действия, такие как suspend или hibernate.

Подробнее см. man start-stop-daemon. И есть много других примеров из /etc/init.d сценариев демона.

0
ответ дан 25 May 2018 в 05:17

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

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