В Ubuntu 12.04 LTS я хотел бы запускать сценарии после выхода из режима ожидания и после разблокировки рабочего стола. Эти должны работать как мой пользователь, и с доступом к моему $DISPLAY
.
В частности, я бы хотел
- перезапустите,
nm-applet
чтобы обойти ошибку 985028 - показать пользовательское уведомление, используя
notify-send
- возможно, другие вещи, когда я работаю
Когда я возобновляю работу, /etc/pm/sleep.d/
запускаются сценарии , но они запускаются с правами суперпользователя без знания моего экрана и имени пользователя. Это может сработать, если я жестко закодирую свое имя пользователя и имя export
по умолчанию DISPLAY :0
в этих скриптах, но это выглядит как очень уродливый хак.
Скрипты ~/.config/autostart/xyz.desktop
запускаются после входа в систему, но они не запускаются после простой разблокировки экрана после возобновления работы.
Есть ли способ запустить скрипты после разблокировки экрана после возобновления?
users
, предполагая, что никто не вошел в систему. (Или это не имеет значения)Ответы:
Похоже, что вы все равно должны жестко кодировать имя пользователя в предыдущем ответе, поэтому вот простой скрипт для /etc/pm/sleep.d, если кто-то ищет быстрое решение:
источник
Этот вопрос на сайте Unix & Linux описывает альтернативный подход с использованием сообщений dbus:
(Замените SCREEN_LOCKED и SCREEN_UNLOCKED на действия, которые вы хотите выполнить.)
Использование
xrandr 1>/dev/null 2>1
в качестве действия по разблокировке устранило мою проблему, заключающуюся в том, что разрешения / позиции монитора не были правильно восстановлены при разблокировке экрана (xrandr, кажется, вызывает перечитывание настроек экрана). Я добавил эту строку в качестве фоновой задачи в мой файл .bash_profile (строго, он может быть лучше в качестве файла рабочего стола в ~ / .config / autostart, поскольку он запускается только при запуске gnome):Дополнительную информацию об API gnome-screensaver можно найти на этом сайте , а также на мониторе dbus здесь .
источник
Одним из решений является сценарий, который запускается при входе на рабочий стол и перехватывает сообщения dbus. После возобновления из режима ожидания экран блокируется, и после ввода пароля на dbus происходит событие разблокировки.
(Спасибо Kim SJ за то, что поставили меня на правильный путь. У меня нет сигналов ScreenSaver, но я нашел другой интерфейс для использования).
У
~/.config/autostart/
меня есть файл .desktop, который запускает скрипт bash:unlock_monitor
Сценарий монитор читает Dbus сообщения отcom.canonical.Unity.Session
и делает вещи наUnlocked
сигналы:При входе в систему отсутствует сигнал «Unlocked», но при
dbus-monitor
запуске появляется сигнал «NameAcquired» .источник
Вы можете запустить скрипт, используя start-stop-daemon. start-stop-daemon может разветвлять поток, работающий под разными uid и gid, что решает вашу проблему
Что вам нужно сделать, это написать сценарий задания, размещенный в системном PATH
/usr/bin
, и создать дополнительный сценарий демона в/etc/pm/sleep.d
. Соответствиеpm-suspend
действия, какresume
илиthaw
сценарий демона фиксирует сценарий задания с помощьюгде
ARGs
может быть--chuid 1001:1001
или просто--user your_username
.И для целостности, вы также можете захотеть, чтобы скрипт демона остановил имя, названное
nm-rtvt
до приостановки черезсоответствующие
pm-suspend
действия, такие какsuspend
илиhibernate
.Для деталей
man start-stop-daemon
. И есть много других примеров в/etc/init.d
скриптах демонов.источник