Как разрешить ключевые функции, когда рабочий стол заблокирован

20

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

Cerin
источник
+1! Могу поспорить, что побочный эффект этого (если это возможно) состоит в том, чтобы не пробуждать спящий дисплей, о чем я удивлялся раньше.
Дэвид Онеилл
1
Я хотел бы иметь эту функциональность тоже. Не только для громкости, но и для клавиш управления музыкой (воспроизведение, пауза; следующая; предыдущая).
jPlatte
Кроме того, когда я обновлялся, я опустил экран до минимального значения. На полпути после установки я не смог включить его обратно. Сделано для интересного опыта ..
Уилл Ричардсон
Интересно, можно ли превратить медиа-ключи в какое-то поддельное устройство LIRC, притворяясь дистанционным управлением ... По крайней мере, концептуально это имеет смысл, верно?
Танели

Ответы:

9

В некотором роде позорный плагин, но поскольку, похоже, не было никакого существующего решения, и поскольку задача казалась относительно простой, я написал простой демон Python, чтобы решить эту проблему. Он использует API-интерфейс python-xlib для захвата нажатий клавиш в масштабе всей системы, а затем запускает пользовательские команды оболочки. Он предполагает базовую настройку Debian / Ubuntu, но, вероятно, будет работать на большинстве систем Linux с несколькими настройками.

В моем случае клавиши увеличения / уменьшения громкости соответствуют коду 122/123, поэтому соответствующие команды для уменьшения или увеличения громкости только при заблокированном рабочем столе :

gnome-screensaver-command -q | grep "is active" && bash -c '/usr/bin/pactl -- set-sink-volume `pacmd list-sinks | grep -P -o "(?<=\* index: )[0-9]+"` -10%'
gnome-screensaver-command -q | grep "is active" && bash -c '/usr/bin/pactl -- set-sink-volume `pacmd list-sinks | grep -P -o "(?<=\* index: )[0-9]+"` +10%'

По общему признанию, это немного многословно. Второй grep - найти активный звуковой интерфейс в системах, которые могут иметь несколько (например, мой ноутбук имеет интерфейс Master и Headphone, позволяющий этим командам управлять либо).

Редактировать: Это больше не работает с Ubuntu 16. Все функции X, кажется, становятся отключенными, даже из терминала, как только экран блокируется.

Cerin
источник
1
Я только что получил эту работу на Ubuntu 18.04. Мне пришлось заменить «тест заблокирован» gdbus call -e -d com.canonical.Unity -o /com/canonical/Unity/Session -m com.canonical.Unity.Session.IsLocked | grep -ioP "true"на « askubuntu.com/a/890802/627247», потому что я не использую gnome-screesaver, но после этого никаких проблем нет.
Фабиан Н.
Я могу подтвердить, что он работает и в Ubuntu 16.04. Чтобы избежать путаницы, «тест заблокирован», упомянутый Фабианом Н., означает замену gnome-screensaver-command -q | grep "is active"в строках 160–165 файла freekey.py или непосредственно в файле конфигурации на то, что он предлагает.
Пьер Талами
на моей системе 171 gdbus call -e -d com.canonical.Unity -o /com/canonical/Unity/Session -m com.canonical.Unity.Session.IsLocked | grep -ioP "true" && bash -c 'rhythmbox-client --next'отлично работает для следующей песни на Rhythmbox. Я все еще работаю над предыдущими и другими элементами управления, но это будет сделано.
Джон Гамильтон