Я хотел бы запустить экран, если сеанс Gnome заблокирован и разблокирован. Есть ли способ, которым я могу перехватить это и выполнить определенные действия, когда рабочий стол заблокирован или разблокирован?
54
Gnome-заставка генерирует некоторые сигналы на dbus, когда что-то происходит.
Здесь документация (с некоторыми примерами).
Вы могли бы написать сценарии, которые выполняются:
dbus-monitor --session "type='signal',interface='org.gnome.ScreenSaver'"
и это делает то, что вам нужно, в любое время dbus-monitor
печатает строку о заблокированном / разблокированном экране.
Вот команда bash, чтобы сделать то, что вам нужно:
dbus-monitor --session "type='signal',interface='org.gnome.ScreenSaver'" |
while read x; do
case "$x" in
*"boolean true"*) echo SCREEN_LOCKED;;
*"boolean false"*) echo SCREEN_UNLOCKED;;
esac
done
Просто замените echo SCREEN_LOCKED
и echo SCREEN_UNLOCKED
тем, что вам нужно.
gnome-screensaver-command
уже есть. Переходя-a
кgnome-screensaver-command
блокировке экрана, вы разблокируете его с помощью-d
. В любом случае, большинство приложений для гномов широко используют dbus, поэтому вы сможете делать с ним много удивительных вещей.В Ubuntu 14.04 изменилось событие DBus для разблокировки экрана, и новый скрипт для привязки к событиям блокировки экрана и разблокировки выглядит следующим образом
источник
В настоящее время я думаю, что лучше слушать сообщения
LockedHint
, чем заставки. Таким образом, вы не привязаны к реализации заставки.Вот простой скрипт для этого:
Дает это:
источник
Ubuntu 16.04: решение ozma у меня не сработало, но вот это:
источник
Расширение на уже предоставленный ответ.
Если вы попытаетесь запустить сценарий из сеанса
screen
илиtmux
, вам нужно$DBUS_SESSION_BUS_ADDRESS
сначала найти правильный и передать его в качестве аргументаdbus-monitor
вместо--session
. Также, если вы запускаете его как демон, вы должны убедиться, что одновременно запускается только один экземпляр (например, с файлом блокировки), и что сценарий очищается после себяtrap
. Следующий пример будет работать как демон в большинстве современных сред Gnome (протестировано в Ubuntu GNOME 16.04):Если это не работает для вас, это, вероятно, потому что:
источник
Если вы используете Kubuntu или используете KDE / Plasma в качестве среды рабочего стола, вы должны прослушивать интерфейс
org.freedesktop.ScreenSaver
, поэтому сценарий прослушивания этого события будет выглядеть следующим образом:источник
Personalization>Notifications>Notifications>Screensaver
.upstart
сессионный Иов Поддержитdesktop-lock
иdesktop-unlock
событие вstart on
строфе. Просто создать работу .conf для вашего пользователя с соответствующими триггерами и командами вызова в соответствии$XDG_CONFIG_HOME/upstart/
или$HOME/.config/upstart
как пример ниже:источник
это может быть не самое чистое решение, но оно работает для меня, когда
dbus-monitor ...
нет:Должен возвращать поток строк со строками 'true' или 'false'
Использование: Fedora релиз 30 (тридцать)
источник
это то, что у меня сработало в Ubuntu 16.04
источник