Como permitir funções importantes enquanto a área de trabalho está bloqueada

20

É possível permitir que as teclas de volume de um teclado continuem funcionando quando a área de trabalho estiver bloqueada? Atualmente, o comportamento padrão desativa todas as teclas de função especial até que a área de trabalho seja desbloqueada. Eu gosto de usar meu PC como tocador de música e deixá-lo bloqueado quando não estou diretamente no console, mas ainda quero permitir que as pessoas controlem o volume se uma música estiver muito alta.

Cerin
fonte
+1! Aposto que um efeito colateral disso (se possível) é não despertar novamente a tela adormecida, algo que já me perguntei antes.
David Davill
11
Eu gostaria de ter essa funcionalidade também. Não apenas para o volume, mas também para as teclas de controle de música (reproduzir, pausar; próximo; anterior).
jPlatte
Como um aparte, enquanto eu estava atualizando, abaixei minha tela para a configuração mais baixa. No meio da instalação, não consegui aumentá-la. Feito para uma experiência interessante ..
Will Richardson
Gostaria de saber se as chaves de mídia poderiam ser transformadas em algum tipo de dispositivo LIRC falso, fingindo ser um controle remoto ... Pelo menos conceitualmente, faz sentido, certo?
Taneli

Respostas:

9

Um pouco vergonhoso, mas como não parecia haver nenhuma solução existente e como a tarefa parecia relativamente direta, escrevi um daemon Python simples para corrigir o problema. Ele usa a API python-xlib para capturar pressionamentos de tecla em todo o sistema e, em seguida, executa comandos shell personalizados. Ele assume uma configuração básica do Debian / Ubuntu, mas provavelmente funcionaria na maioria dos sistemas Linux com alguns ajustes.

No meu caso, as teclas de aumentar / diminuir o volume são mapeadas para o código 122/123; portanto, os comandos correspondentes para diminuir ou aumentar o volume somente quando a área de trabalho está bloqueada são:

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%'

É certo que isso é um pouco detalhado. O segundo grep é encontrar a interface de som ativa em sistemas que possam ter várias (por exemplo, meu laptop possui uma interface Master e Headphone, permitindo que esses comandos controlem).

Editar: isso não funciona mais no Ubuntu 16. Todas as funções do X parecem desabilitadas, mesmo a partir do terminal, quando a tela é bloqueada.

Cerin
fonte
11
Acabei de fazer isso funcionar no Ubuntu 18.04. Eu tive que substituir o "teste está bloqueado" por gdbus call -e -d com.canonical.Unity -o /com/canonical/Unity/Session -m com.canonical.Unity.Session.IsLocked | grep -ioP "true"baseado em askubuntu.com/a/890802/627247 porque não estou usando o gnome-screesaver, mas depois disso, sem problemas.
Fabian N.
Posso confirmar que ele funciona no Ubuntu 16.04 também. Para evitar confusão, o "teste bloqueado" mencionado por Fabian N. significa substituir gnome-screensaver-command -q | grep "is active"nas linhas 160-165 do freekey.py ou diretamente no arquivo de configuração, o que ele sugere.
Pierre Thalamy
no meu sistema 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'funciona perfeitamente para a próxima música no rhythmbox. Ainda estou trabalhando nos controles anteriores e em outros controles, mas ele chegará lá.
John Hamilton