Как я называю код 'dbus', который контролирует, когда экран блокируется/разблокируется?

У меня есть фрагмент кода от (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, и т.д. После вызова я полагаю, что он работает до следующей перезагрузки.

Это будет работать навсегда, даже если это только использовало каждую ночь Прачечной в среду так идеально, это не было должно пожиратель ресурсов слишком много циклов ЦП.

5
задан 13 April 2017 в 05:37

2 ответа

Сценарий

, Как упомянуто в комментариях, немного улучшенная версия отправляется здесь (с помощью @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"

Примечание

, которое делает Весь сценарий, является ожиданием состояния для изменения, слушая коммуникацию между процессами в системе. Это не добавляет никакой значимая нагрузка для Вашей системы.

3
ответ дан 23 November 2019 в 09:12

Это работало на меня для 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 с "булевой истинной" и "булевой ложью" соответственно.

Добавляют этот сценарий к приложениям запуска, и он начнет работать, после того как Вы входите в систему впервые.

3
ответ дан 23 November 2019 в 09:12

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

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