Um problema um pouco estranho para você. Eu tenho um antigo tablet 2 em 1 que funciona bem, exceto que o driver da tela sensível ao toque trava ocasionalmente, deixando-o inutilizável. Tenho um script simples para reiniciá-lo, mas quando ele não está conectado ao teclado, isso pode ser um problema. Minha solução proposta é executar o script quando eu pressionar as duas teclas de volume físicas simultaneamente (sendo esses botões o único outro dispositivo de entrada que terei conectado de forma confiável). Estou usando o Fedora Wayland. Isso parece viável e, em caso afirmativo, como poderia ser feito?
relate perguntas
-
Verifique o histórico de login do usuário root
-
Uma maneira rápida de duplicar um site (Wordpress) no meu ambiente de servidor Nginx?
-
problema ao iniciar aplicativos: linha de comando vs. gui
-
Shell Script para encontrar string no arquivo de log
-
Renomeie (acrescentar) arquivos CSV em massa com base em um valor dentro
Sim, você pode ler a entrada bruta da interface "evdev" em
/dev/input/event*
, usando libevdev ou diretamente dos nós do dispositivo, ou usando a biblioteca libinput de nível superior (que é mais útil para o pré-processamento de mouse/touchpad, mas não muito útil para botões).O programa pode ser escrito usando python-evdev (ou python-libevdev, ligeiramente diferente):
As ferramentas CLI para determinar qual evento você precisa são
evtest
ouevemu-record
(oulibinput debug-events
como mencionado na outra resposta).Você também pode tentar um dos programas existentes de "remapeamento de teclas" baseados em evdev, caso alguns deles consigam mapear o pressionamento de tecla para a execução de um comando:
Teclas de volume também podem aparecer como eventos ACPI, que podem ser manipulados usando
acpid
(uma lógica semelhante pode ser escrita como parte de /etc/acpi/handler.sh). Verifique seacpi_listen
os relata.Dê uma olhada no libinput (você deve instalar o libinput-tools
Com
libinput
você você pode detectar um evento e executar uma ação quando esse evento for detectadoPor exemplo, aqui está a saída quando toco no meu touchpad:
Se você executar grep na saída do
stdbuf
comando e iniciar um script quando detectar alguns eventos específicos, você poderá fazer o que quiserNB: você pode redirecionar a saída para um descritor de arquivo que você pode ler mais tarde no bash (com
read -u
)Por exemplo:
A solução completa para meus problemas específicos acaba sendo um par de scripts conectados entre si. O principal lida com o
libinput
log de eventos (que é canalizado para ele) e executa o comando final:Um segundo script supervisiona o primeiro:
O segundo script é objeto de um
systemd
serviço que o executa comoroot
. Lembre-se de garantir que usuários não root não possam modificá-lo.