Posso remapear a tecla Caps Lock para reproduzir áudio?


16

Estou tentando reutilizar a tecla Caps Lock inútil para algo útil no 16.04 MATE. Me deparei

setxkbmap -option ctrl:nocaps

desativá-lo, mas poderia ser remapeado para reproduzir / pausar o VLC, por exemplo? Obrigado por suas respostas!


Eu não acho que isso funcionará .... por várias razões ... por exemplo, acho que o linux trata o capslock como um modificador e não como uma chave separada. Essa provavelmente será a razão pela qual você não pode vinculá-lo no VLC. Além disso, se você desativá-lo, ele será desativado. Mas você pode brincar na linha de comando e tentar vinculá-lo com vlc --key-play-pause <key-string>, mas eu não encontrei uma cadeia que VLC aceita como capslock ...
Robert Riedl

11
Eu instalei dconf-editortentei algumas coisas, instalei xdotooltentei algumas coisas e, finalmente, xbindkeystentei algumas coisas. No final deste exercício infrutífero, meu botão de pausa / reprodução do teclado estava quebrado E meu próprio botão de reprodução / pausa na tela estava acinzentado e a música não tocava. Eu fiz isso no 16.04, então reiniciei no 18.04 para confirmar que tudo ainda funciona e foram os hacks de software que o fizeram. A única graça salvadora é que eu só toco música no telefone Android e não no PC. Apenas um aviso para que os outros tenham cuidado e documentem o que você faz na sua máquina melhor do que eu.
WinEunuuchs2Unix

11
@pbhj Obrigado pela dica. De alguma forma, consegui colocar o play / pause funcionando novamente com o botão na tela e o botão de pausa / play do teclado no Ubuntu 16.04. Eu só queria avisar as pessoas sobre possíveis armadilhas que experimentam esses utilitários de teclado de baixo nível.
WinEunuuchs2Unix

11
2BFrank: Certifique-se de aceitar uma das respostas se resolver o seu problema. Como existe uma recompensa nessa questão, deixar uma resposta inaceitável (e não conceder a recompensa manualmente) concederá apenas metade da recompensa a @Sebastian Stark, já que sua resposta é a mais votada.
criar o seu

11
@NonnyMoose Obrigado por esse comentário. Eu deixaria que ela apenas atendesse automaticamente à resposta aceita ou ao maior número de votos, mas não sabia que ele dividiu o prêmio pela metade, então eu o atribuirei manualmente ao maior número de votos em aproximadamente duas horas se nenhuma resposta é aceita.
Chai T. Rex

Respostas:


11

evtest e dbus

Aqui está uma versão que envolve um pequeno script sendo executado em segundo plano. Algumas etapas fáceis precisam ser seguidas:

  • Instale o evtest programa: sudo apt install evtest. Este programa é capaz de decodificar e imprimir eventos brutos a partir da /dev/input/hierarquia de dispositivos.

  • Adicione sua conta de usuário ao grupo input. Saia e faça login novamente. (Isso é necessário porque vamos ler a partir de algum dispositivo abaixo /dev/input/, o que normalmente só pode ser feito por raiz ou usuários em grupo input. Poderíamos executar o script como raiz, mas teríamos que encontrar uma maneira de informar qual usuário instância dbus com a qual precisa conversar.)

  • Desative a tecla capslock como você fez ou use a preferência de posicionamento correspondente. Também funcionaria se você mapear a tecla capslock para ctrl, como muitas pessoas fazem.

  • Armazene o seguinte script em algum lugar, por exemplo, $HOME/bin/capshacke torne-o 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 ouvirá os eventos do 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. Você pode precisar ajustar oKEYBOARD variável para apontar para o teclado atual, mas é provável que o valor acima funcione.

Se você preferir que a função toggleVLC () seja chamada quando você soltar a tecla capslock, poderá alterar a EVENTvariável no script para que ela termine com em value 0vez de value 1.

Além disso, é possível que o código da tecla capslock seja diferente de 58. Você pode verificar isso executando evtest , observe a saída ao pressionar Capslock e ajuste a variável EVENT de acordo. Você nem precisa corresponder pelo código da chave e definir EVENT simplesmente como (KEY_CAPSLOCK), value 1.

Em vez de usar o script evtest e acima, você pode usar thd do pacote triggerhappy (algo comothd --dump /dev/input/* daria saída semelhante), mas eu achei isso um pouco menos educacional.

Agora criamos uma unidade systemd do usuário para iniciar o script automaticamente em segundo plano:

  • Crie a hierarquia do sistema do usuário: mkdir -p $HOME/.config/systemd/user

  • Adicione o seguinte texto ao arquivo $HOME/.config/systemd/user/capshack.service

    [Unit]
    Description=Abuse capslock key
    
    [Service]
    ExecStart=%h/bin/capshack
    
    [Install]
    WantedBy=default.target
    
  • Habilite a unidade de serviço que você acabou de criar: systemctl --user enable capshack

  • Inicie o serviço: systemctl --user start capshack

A partir de agora, você poderá alternar entre reproduzir / pausar no VLC usando a tecla capslock. O script em segundo plano deve ser iniciado automaticamente quando você efetuar login.

gatilho

Como já mencionado, você também pode usar o pacote triggerhappy para fazer isso. Este é o método preferido para pessoas que desejam mexer menos com o sistema e preferem uma solução mais sólida.

  • Adicione usuário ao inputgrupo como acima

  • Instale o pacote: sudo apt install triggerhappy

  • Adicione uma configuração para triggerhappy em ~/.config/thd/capslock.conf:

    KEY_CAPSLOCK    1   dbus-send --type=method_call --dest=org.mpris.MediaPlayer2.vlc /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.PlayPause
    
  • Execute thd assim: thd --triggers ~/.config/thd/capslock.conf /dev/input/event*

  • Faça com que o thd execute para o usuário de maneira semelhante à descrita para capshack já.

  • Verifique se você possui apenas um dos métodos mencionados (capshack ou thd) em execução, para não alternar duas vezes para cada tecla pressionada.

Eu testei tudo isso em 18.04 sob a sessão padrão e 16.04 mate. Mas, teoricamente, também deve funcionar em terras distantes ou com outros ambientes de desktop.


@ WinEunuuchs2Unix obrigado por mencionar. Pessoalmente, prefiro o estilo mais detalhado da cláusula if / then / else completa: é mais explícito, é mais fácil de estender e não tende a fazer linhas muito longas. Embora, neste caso, realmente não importasse muito.
Sebastian Stark

Eu concordo com as falas por muito tempo. Recentemente, adaptei o estilo de codificação a duas linhas com a primeira linha [[ test ]] && \ e a segunda linha recuou quatro espaços <command>para executar no teste positivo. Eu concordo plenamente com a legibilidade, porque minha recomendação é estranha à maioria das linguagens de programação.
WinEunuuchs2Unix

isso é ótimo ! Embora eu acho que parece triggerhappydeve ser o caminho a percorrer, uma vez que evtesté na verdade um programa de depuração :)
Robert Riedl

sim, evtest para a aprendizagem, o para fazer :)
Sebastian Stark

... Para mim, o código-chave 58 é m, para que o script não funcione. Eu recomendo verificar xmodmap -pke | grep Caps_Lockantes de usar este script para garantir que o código-chave esteja correto.
criar o seu

9

No Ubuntu 16.04, depois de passar horas pesquisando e mexer com dconf-editore xbindkeyseu encontrei uma solução extremamente fácil:

  • Configuração muito rápida em 2 minutos
  • Apenas o xdotool precisa ser instalado
  • Nenhum script necessário
  • Caps lock ainda é reconhecido, mas não alterna entre maiúsculas e minúsculas
  • Funciona com configurações de atalho personalizadas do teclado Ubuntu padrão

Se você precisar do XF86AudioPlaysuporte ao Gnome, precisará xdotool(não é necessário para o VLC, conforme o OP estipula):

sudo apt install xdotool

Agora, aqui está a parte complicada. Sempre que você pressionar a Caps LocKtecla para alternar a música entre Reproduzir e Pausar, as letras maiúsculas também serão ativadas.

Use este método para desativar a alternância de Caps Lock enquanto mantém a tecla ativa:

setxkbmap -option caps:none

Leitores de música que aderem ao Gnome

Em seguida, no Ubuntu 16.04, vá para Configurações >> Teclado >> Atalhos >> Atalhos Personalizados :

audio pause-play shortcut.png

  • Defina o nome paraAudio Play
  • Defina o comando comoxdotool key XF86AudioPlay
  • Depois clique no Applybotão

Após adicionar a nova opção, a tecla de atalho atribuída exibirá Desativado . Clique em Desativado e, quando solicitado, pressione a Caps LocKtecla.


Leitores de música como o VLC

Siga as etapas para o Gnome na seção anterior, mas para o comando use isso:

qdbus org.mpris.MediaPlayer2.vlc /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.PlayPause

O VLC não reconhece as teclas de mídia: Como fazer com que as teclas de mídia do teclado funcionem com o VLC globalmente? mesmo quando embutido no teclado. Portanto, o atalho de teclado personalizado para o XF86AudioPlay é inútil xdotool.


Definindo atalhos de teclado personalizados na linha de comando

Esta seção de perguntas e respostas discute como definir atalhos de teclado personalizados na linha de comando: Como definir atalhos de teclado personalizados no terminal?


Desativar o bloqueio das tampas permanentemente

O próximo passo é tornar isso setxkbmap -option caps:nonepersistente nas reinicializações. Os resultados do Google nesta resposta de Terdon: Salve as configurações do setxkbdmap :

Uma maneira fácil seria adicionar o comando ao seu $HOME/.profilearquivo (você pode criá-lo se ele não existir):

setxkbmap -option caps:none

Isso deve fazer com que seja executado sempre que você efetuar login.

Observe que você deve usar, em $HOME/.profilevez de $HOME/.bash_profile, $HOME/.bashrcou algum outro arquivo semelhante. Isso ocorre porque essa configuração deve ser lida pelo seu gerenciador de login.


Simples, elegante, faz o trabalho: A resposta perfeita para mim!
quer

@ Fabby Bem, devo admitir que é fácil de configurar e testar e não requer escaneamento de baixo nível sobre ou scripts em execução constante. Passei por quatro tentativas diferentes antes de me deparar com esse método. Ainda não o chamaria perfeito, mas OBRIGADO! . Se me deixarem voltar para a Europa, comprarei uma caneca para você.
WinEunuuchs2Unix

Funciona com Wayland?
precisa saber é o seguinte

Dabzel @ Receio que Wayland não trabalhe setxkbmap -option caps:none. O programa utilitário é instalado, mas o Wayland continua alternando entre maiúsculas e minúsculas. Você pode postar uma pergunta separada sobre como fazer com que Wayland respeite setxkbmap.
WinEunuuchs2Unix

3

Esta resposta foi testada no Ubuntu MATE 16.04.4 LTS em uma VM (mas o teclado era um teclado USB na passagem, portanto, isso não deve fazer diferença). Também não requer software extra, e pode ser feito em uma instalação sem baunilha, sem instalar nenhum pacote, e é persistente entre as inicializações.

Remapear Caps Lock

  1. Edite o arquivo /usr/share/X11/xkb/symbols/pccomo raiz. Cuidado para não cometer um erro aqui (como esquecer a vírgula), pois talvez você não consiga mais usar o teclado. (Adivinha o que eu aprendi da maneira mais difícil?;)

  2. Comente a linha

        key <CAPS> {    [ Caps_Lock     ]   };
    

    colocando duas barras ( //) no início.

  3. Adicione abaixo a seguinte linha:

        key <CAPS> {    [ XF86AudioPlay, XF86AudioPause ]   };
    
  4. Comente a linha

        modifier_map Lock   { Caps_Lock };
    

    da mesma maneira que acima.

  5. Reinicie.

Nota: ( agradecemos a danzel por apontar isso) As atualizações no pacote xkb-datapodem substituir esse arquivo. Um método razoavelmente seguro para evitar isso é desviar o caminho usando dpkg-divert. (Digo "razoavelmente seguro" porque a fonte upstream para esse arquivo não foi modificada em três anos.)

Método alternativo

Desative manualmente a tecla Caps Lock nas configurações de layout do teclado e use a abordagem nesta resposta para adicionar seus próprios mapeamentos de teclas.

Problemas?

Sua tecla de bloqueio de maiúsculas não bloqueia mais maiúsculas e foi remapeada para Reproduzir / Pausar neste momento. Agora você deve poder reproduzir e pausar músicas no VLC. Se funcionar neste momento, você pode pular o restante destas instruções.

No entanto, quando tentei, o VLC não respondeu à tecla Reproduzir / Pausar.

Verifique se o atalho do teclado está definido corretamente

  1. Abrir atalhos de teclado (Sistema → Preferências → Hardware → Atalhos de teclado)

  2. Verifique se "Reproduzir (ou Reproduzir / Pausar)" está definido como "XF86AudioPlay"

  3. Caso contrário, clique na seção "Atalho" e pressione sua nova tecla Reproduzir / Pausar para definir o atalho. captura de tela útil

  4. Se ainda assim não funcionar, reinicie algumas vezes para uma boa medida. (Isso é realmente o que foi corrigido para mim.)


Isso pode interferir nas xkbopções, especialmente nas opções caps:.... Além disso, ele pode ser substituído por atualizações do sistema.
Daniel 19/06

De fato, poderia. Bom ponto sobre as atualizações do sistema, no entanto. Vou adicionar uma nota sobre isso na minha resposta. Obrigado pelo feedback!
precisa

Queridos Todos, uau !! Desculpe, fiquei afk por um tempo :-) e agora estou descobrindo todo o esforço que todos vocês colocaram na solução !! Tentará a resposta do @ WinEunuuchs2Unix e manterá você informado. Obrigado, LLAP !!
precisa saber é o seguinte

@ 2BFrank Por curiosidade, você encontrou uma resposta que funcionou?
criar o seu

1

Instale xbindkeys, xcape e playerctl . Certifique-se de que xcape(mapeando CapsLockpara uma chave sobressalente como Alt+F12por xcape -e 'Caps_Lock=Alt_L|F12) e playerctlseja iniciado automaticamente no logon e adicione ao arquivo ~/.xbindkeysrcas duas linhas

"playerctl play-pause"
  Alt + F12

0

Faça da sua tecla capslock uma tecla de play / pause

Esta solução remapeará o scancode da sua tecla capslock para um código de chave diferente no driver de entrada do kernel, nesse caso, play / pause.

Vantagens

  • Não há necessidade de modificar os arquivos do sistema existentes (apenas um novo arquivo deve ser criado)
  • Os aplicativos não sabem que na verdade é uma tecla de capslock, mas pensam que uma tecla de reprodução / pausa real foi pressionada
  • Não há necessidade de desativar o capslock, não há possibilidade de estragar a xkbconfiguração

Desvantagens

  • Tem que ser feito para cada teclado individualmente (o que, dependendo da situação, também pode ser uma vantagem)

Pré-requisitos

  • evtest (pode ser instalado via sudo apt-get install evtest)

Procedimento

Em um terminal, execute sudo evteste selecione seu teclado. Se não houver saída ao pressionar uma tecla, pressione Ctrl+ Ce tente um dispositivo diferente. Lembre-se do número do evento do dispositivo que você selecionou, precisaremos depois. Pressione a tecla Capslock. Algumas linhas como as seguintes aparecerão:

Event: time 1529406021.187148, -------------- SYN_REPORT ------------
Event: time 1529406021.218427, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70039
Event: time 1529406021.218427, type 1 (EV_KEY), code 58 (KEY_CAPSLOCK), value 0

Precisamos do valor da MSC_SCANlinha que precede a KEY_CAPSLOCKlinha. No exemplo acima, isso seria 70039, mas o scancode no seu teclado provavelmente é diferente.

Agora execute o seguinte comando, mas substitua o X pelo número do evento do dispositivo que você usou para o evtestcomando:

grep "" /sys/class/input/eventX/device/id/*

... esta saída vontade bustype, product, vendore versiondo teclado.

Crie um arquivo nomeado 65-keyboard-custom.hwdbem /etc/udev/hwdb.d/(permissões de root necessárias) com o seguinte conteúdo:

evdev:input:b[bustype]v[vendor]p[product]e[version]*
 KEYBOARD_KEY_[scancode]=playpause

...Onde

  • [barramento], [fornecedor], [produto] e [versão] têm exatamente 4 caracteres e as letras precisam ser maiúsculas
  • [scancode] tem que estar em minúsculas
  • a evdev:...linha não tem espaço anterior
  • a KEYBOARD_KEY...linha tem exatamente um espaço anterior

Por exemplo:

evdev:input:b0003v046DpC228e0110*
 KEYBOARD_KEY_70039=playpause

Por fim, compile a nova configuração no banco de dados de hardware:

sudo systemd-hwdb update

Se você deseja aplicar as alterações imediatamente, informe o udev:

sudo udevadm trigger

Se você deseja reverter as alterações, basta remover o arquivo que você criou e reiniciar.

Você pode encontrar informações mais detalhadas na minha resposta original sobre este tópico.


@Nonny Moose, por isso escrevi "Tem que ser feito para cada teclado individualmente". Além disso, você pode especificar quantos teclados desejar, para fazer isso apenas para cada novo teclado que comprar. Por outro lado, você pode omitir um teclado, se quiser, por exemplo, porque ele já possui uma tecla de reprodução / pausa física.
22418 danzel

... Bem, eu não estava prestando atenção. Eu estou corrigido.
precisa

0

Talvez usando xbindkeysou XTEvocê possa fazer isso. Mas primeiro certifique-se de quais são os códigos de chave, você pode ver o código da tecla capslock usando o comando xevno terminal e pressionando-o (você pode ver o código de tecla de qualquer botão keu ou mouse, incluindo mouse mouses). Com o código-chave dos botões capslock e play na mão, você pode editar o arquivo xbindkeys confi e colocar suas alterações. use touch ~/.xbindkeysrcpara criar o arquivo de configuração (se o sistema não o criar automaticamente) e nano ~/.xbindkeysrceditá-lo. Eu usei no mês passado e aqui é um exemplo. dê uma olhada nesses links que podem ser muito úteis para você.

https://help.ubuntu.com/community/MultimediaKeys

https://gist.github.com/jbonney/5743509

Remapear um botão do mouse para uma tecla do teclado

https://matmunn.me/post/binding-volume-control-mouse-buttons-ubuntu/

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.