Atalhos de teclado no terminal virtual

6

Existe alguma maneira de configurar atalhos de teclado no console virtual do Linux?

Por exemplo, se eu for para tty1, pressione a combinação de teclas Ctrl + Alt + H , gostaria que o script /usr/bin/hello.sh a ser executado.

Idealmente, o atalho estaria disponível mesmo antes de efetuar login (nesse caso, ele seria executado com os privilégios de um usuário que eu especificasse). Eu não me importo de modificar o kernel, se essa é a única maneira de realizar isso. Além disso, ele não precisa ser um script de shell, ele também pode ser um binário ELF normal ou até mesmo um módulo de kernel que faz chamadas ao sistema.

Exemplo de casos de uso

  1. Estou no console e navego na web com algo parecido com links e desejo diminuir o brilho da tela. Eu pressiono Fn + End , que é a tecla de brilho para baixo e produz um único código de tecla e um programa que reduz o brilho escrevendo algo em /sys arquivo.
  2. Estou em um editor de texto do console e ouço algumas músicas em segundo plano que estão sendo reproduzidas por mpd . Eu pressiono a tecla (play / pause), que novamente produz um único código de tecla, e isso tem o efeito de executar um programa que envia um sinal para mpd para pausar a música atual.

Solução

Seguindo a ideia de dirkt de usar /dev/input , criei evd (daemon de evento) para este propósito. O aplicativo pode ser iniciado em segundo plano e assumirá o teclado onde quer que você esteja, inclusive antes do login e dentro do X.

    
por rid 11.07.2018 / 10:47

1 resposta

2

Resposta parcial (porque é apenas um esboço e não foi testado):

Escreva um demônio que ouça o que /dev/input device corresponde ao seu teclado principal (existem links simbólicos, olhe para eles). Comece aquele demônio como o usuário que você especificar, usando qualquer sistema init que você tenha (systemd, sysv, o que for).

O demônio processa os principais eventos, conforme definido em eventos de entrada -codes.h (ou observe o código-fonte de evtest ). Ele tem uma máquina de estados que reconhece as sequências de teclas desejadas e gera o processo que você especificar quando essa sequência estiver completa.

Isso deve estar disponível antes do login e será sempre executado como o mesmo usuário, não importa em qual usuário você esteja logado no console virtual. Ele também será executado sob o X, novamente como o mesmo usuário.

Alternativamente, se você deseja executar algo em um shell: Use tmux ou um programa semelhante que possa liga seqüências de chaves a ações. Eu suponho que também deve ser possível iniciar automaticamente tmux e anexar a uma nova sessão sempre que você fizer login em um console virtual, mas eu não olhei para isso.

Isso não funcionará antes do login, mas também funcionará em emuladores de terminal gráficos com foco no teclado e executará o script como o usuário que está conectado.

    
por 14.07.2018 / 09:49