evtest e dbus
Aqui está uma versão que envolve um pequeno script sendo executado em segundo plano. Algumas etapas fáceis precisam ser tomadas:
-
Instale o programa evtest : %código%. Este programa é capaz de decodificar e imprimir eventos brutos da hierarquia de dispositivos
sudo apt install evtest
. -
Adicione sua conta de usuário ao grupo
/dev/input/
. Faça o logout e faça o login novamente. (Isso é necessário porque vamos ler de algum dispositivo eminput
, que normalmente só pode ser feito por root ou usuários no grupo/dev/input/
. Poderíamos executar o script como root, mas então teríamos que encontrar um maneira de dizer com qual instância dbus do usuário ele precisa falar.) -
Desative a tecla capslock como você fez ou use a preferência de posicionamento correspondente. Também funcionaria se você mapeasse a tecla capslock para ctrl, como muitas pessoas fazem.
-
Armazene o seguinte script em algum lugar, e. g.
input
e torná-lo executável:#!/bin/bash KEYBOARD=/dev/input/by-path/platform-i8042-serio-0-event-kbd EVENT="type 1 (EV_KEY), code 58 (KEY_CAPSLOCK), value 1" toggleVLC () { dbus-send \ --type=method_call \ --dest=org.mpris.MediaPlayer2.vlc \ /org/mpris/MediaPlayer2 \ org.mpris.MediaPlayer2.Player.PlayPause } evtest "$KEYBOARD" | \ while read line do if [[ "$line" == *"$EVENT" ]] then toggleVLC fi done
O script acima irá escutar seus eventos de teclado e executar um comando quando a tecla capslock for pressionada. O comando que está sendo executado está usando o dbus para enviar um evento de reprodução / pausa para uma instância do VLC em execução. Talvez seja necessário ajustar a variável $HOME/bin/capshack
para apontar para o teclado real, mas é provável que o valor acima funcione.
Se você preferir que a função toggleVLC () seja chamada quando liberar a tecla capslock, você pode alterar a variável KEYBOARD
no script de forma que ela termine com EVENT
em vez de value 0
.
Além disso, é possível que para você o código de tecla da tecla capslock seja diferente de 58. Você pode verificar isso executando value 1
, observe a saída ao pressionar o capslock e ajuste a variável EVENT de acordo. Você não precisa nem combinar com o código de acesso e definir EVENTO simplesmente como evtest
.
Em vez de usar o script evtest e acima, você pode usar thd no pacote triggerhappy (algo como (KEY_CAPSLOCK), value 1
daria resultados semelhantes), mas achei um pouco menos educativo.
Agora, criamos uma unidade systemd do usuário para iniciar o script automaticamente em segundo plano:
-
Crie a hierarquia systemd do usuário:
thd --dump /dev/input/*
-
Adicione o seguinte texto ao arquivo
mkdir -p $HOME/.config/systemd/user
[Unit] Description=Abuse capslock key [Service] ExecStart=%h/bin/capshack [Install] WantedBy=default.target
-
Ative a unidade de serviço que você acabou de criar:
$HOME/.config/systemd/user/capshack.service
-
Iniciar o serviço:
systemctl --user enable capshack
De agora em diante, você deve poder alternar entre reproduzir / pausar no VLC usando a tecla capslock. O script de plano de fundo deve ser iniciado automaticamente quando você fizer login.
triggerhappy
Como já mencionado, você também pode usar o pacote triggerhappy para fazer isso. Este é o método preferido para pessoas que querem mexer menos com o sistema e sim como uma solução mais sólida.
-
Adicione o usuário ao grupo
systemctl --user start capshack
como acima -
Instale o pacote:
input
-
Adicione uma configuração para triggerhappy a
sudo apt install triggerhappy
:KEY_CAPSLOCK 1 dbus-send --type=method_call --dest=org.mpris.MediaPlayer2.vlc /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.PlayPause
-
Execute thd assim:
~/.config/thd/capslock.conf
-
Faça a corrida para o seu usuário de uma maneira semelhante à descrita para o capshack já.
-
Certifique-se de ter apenas um dos métodos mencionados (capshack ou thd) em execução, para não duplicar o botão de pressionamento de cada tecla.
Eu testei tudo isso em 18.04 sob a sessão padrão e 16.04 mate. Mas, teoricamente, também deve funcionar sob a terra ou com outros ambientes de trabalho.