У меня есть фрагмент кода от (unix.stackexchange.com - Запущенный скрипт на экранной блокировке / разблокировал), который я планирую изменить, потому что PulseAudio "недокументированная функциональность" переключает звук с ТВ на ноутбук, когда экран заблокирован.
Код является довольно прямым:
dbus-monitor --session "type='signal',interface='com.ubuntu.Upstart0_6'" | \
(
while true; do
read X
if echo $X | grep "desktop-lock" &> /dev/null; then
SCREEN_LOCKED;
elif echo $X | grep "desktop-unlock" &> /dev/null; then
SCREEN_UNLOCKED;
fi
done
)
Я не могу действительно сказать, что понимаю программу / подпрограмма сверху вниз течет или цикличное выполнение, но кто-то отсюда прокомментировал там, что это работает, и я доверяю его решению.
Вопрос - то, что соглашения о присвоении имен для моего сценария? Что каталог промышленного стандарта должен вставить сценарий? Как я вызываю его? т.е. приложения Запуска, rc.local, крон @reboot, и т.д. После вызова я полагаю, что он работает до следующей перезагрузки.
Это будет работать навсегда, даже если это только использовало каждую ночь Прачечной в среду так идеально, это не было должно пожиратель ресурсов слишком много циклов ЦП.
, Как упомянуто в комментариях, немного улучшенная версия отправляется здесь (с помощью @Serg и @muru):
dbus-monitor --session "type='signal',interface='com.ubuntu.Upstart0_6'" | \
(
while read X; do
if [[ "$X" =~ desktop-lock ]]; then
SCREEN_LOCKED;
elif [[ "$X" =~ desktop-unlock ]]; then
SCREEN_UNLOCKED;
fi
done
)
можно сохранить его где угодно, Вам нравится в Вашем $HOME
каталог, если это для Вашего пользователя только, или в /usr/local/bin, если Вы хотите, чтобы это было доступно другим пользователям.
dbus-монитор работает локально. Я поэтому просто добавил бы сценарий для Запущения Приложений: Тире> Приложения Запуска> Добавляет. Добавьте команду, чтобы запустить скрипт, лучше всего сделать это исполняемым файлом и впоследствии просто добавить команду:
/path/to/script
Возможно , так как сценарий включает GUI, необходимо ожидать, пока UI полностью не загружается. В этом случае используйте:
/bin/bash -c "sleep 10 && /path/to/script"
, которое делает Весь сценарий, является ожиданием состояния для изменения, слушая коммуникацию между процессами в системе. Это не добавляет никакой значимая нагрузка для Вашей системы.
Это работало на меня для Ubuntu 18.04 с Единицей
#!/bin/bash
dbus-monitor --session "type='signal',interface='com.canonical.Unity.Session'" | \
(
# optional: prevent consecutive unlocks/locks
locked=0
while true; do
read X
echo "$X"
if echo "$X" | grep "member=Locked" &> /dev/null; then
if [ $locked -eq 0 ]; then
echo "Screen locked"
locked=1
fi
elif echo "$X" | grep "member=Unlocked" &> /dev/null; then
if [ $locked -eq 1 ]; then
echo "Screen unlocked"
locked=0
fi
fi
done
)
При использовании Gnome, вторая строка должна быть заменена
dbus-monitor --session "type='signal',interface='org.gnome.ScreenSaver'" | \
и содержание между кавычками после grep с "булевой истинной" и "булевой ложью" соответственно.
Добавляют этот сценарий к приложениям запуска, и он начнет работать, после того как Вы входите в систему впервые.