Posso remapear a tecla Caps Lock para reproduzir áudio?

15

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

setxkbmap -option ctrl:nocaps

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

    
por 2BFrank 29.05.2018 / 20:25

6 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 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 em input , 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.

    
por Sebastian Stark 16.06.2018 / 02:43
8

No Ubuntu 16.04 depois de passar horas pesquisando & brincando com dconf-editor e xbindkeys , 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
  • O bloqueio de cadeado ainda é reconhecido, mas não alterna entre maiúsculas e minúsculas
  • Funciona com configurações padrão de atalho do teclado do Ubuntu

Se você precisar do Gnome XF86AudioPlay support, precisará de xdotool (não necessário para VLC conforme o OP estipular):

sudo apt install xdotool

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

Use este método para desativar a alternância do Caps Lock mantendo a tecla ativa:

setxkbmap -option caps:none

Music players que aderem ao Gnome

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

  • DefinaonomecomoAudioPlay
  • DefinaocomandocomoxdotoolkeyXF86AudioPlay
  • Emseguida,cliquenobotãoAplicar

Depoisdeadicionaranovaopção,atecladeatalhoatribuídairálerDisabled.CliqueemDisablede,quandosolicitado,digiteateclaCapsLocK.

MusicplayerscomooVLC

SigaasetapasparaoGnomenaseçãoanterior,masparaocomandouse:

qdbusorg.mpris.MediaPlayer2.vlc/org/mpris/MediaPlayer2org.mpris.MediaPlayer2.Player.PlayPause

VLCnãoreconheceaschavesdemídia: Como tornar as teclas de mídia do teclado para trabalhar com o VLC globalmente? mesmo quando incorporado ao teclado. Portanto, o atalho de teclado personalizado para o XF86AudioPlay é inútil com xdotool .

Definindo atalhos de teclado personalizados na linha de comando

Este Q & A discute como definir atalhos de teclado personalizados a partir da linha de comando: Como definir atalhos de teclado personalizados a partir do terminal?

Desativando caps lock permanentemente

A próxima etapa é tornar esse setxkbmap -option caps:none persistente nas reinicializações. Googling resulta nesta resposta de Terdon: Salve as configurações do setxkbdmap :

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

setxkbmap -option caps:none

Isso deve ser executado toda vez que você fizer login.

Observação de que você deve usar $HOME/.profile em vez de $HOME/.bash_profile , $HOME/.bashrc ou algum outro arquivo semelhante. Isso ocorre porque essa configuração deve ser lida pelo seu gerenciador de login.

    
por WinEunuuchs2Unix 17.06.2018 / 01:09
3

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

Remapear Caps Lock

  1. Edite o arquivo /usr/share/X11/xkb/symbols/pc como root. Tenha cuidado para não cometer um erro aqui (como esquecer a vírgula), porque você pode não ser capaz de usar o teclado mais se você fizer isso. (Adivinha o que aprendi da maneira mais difícil?)

  2. Comente a linha

        key <CAPS> {    [ Caps_Lock     ]   };
    

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

  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: (crédito para danzel por apontar isto) Atualizações no pacote xkb-data podem sobrescrever este arquivo. Um método razoavelmente seguro para evitar isso é desviar o caminho usando dpkg-divert . (Eu digo "razoavelmente seguro" porque a fonte do upstream para este 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 em esta resposta para adicionar seus próprios mapeamentos de chave.

Problemas?

Sua tecla caps lock não bloqueia mais as capas e foi remapeada para Reproduzir / Pausar neste momento. Você deve ser capaz de reproduzir e pausar músicas no VLC agora. Se funcionar neste momento, você pode pular o restante destas instruções.

No entanto, quando tentei, o VLC não respondeu à tecla Play / Pause.

Verifique se o atalho do teclado está definido corretamente

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

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

  3. Se não estiver, clique na seção "Atalho" e pressione sua nova tecla Reproduzir / Pausar para definir o atalho.

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

por Nonny Moose 17.06.2018 / 21:36
1

Instale xbindkeys , xcape e playerctl . Certifique-se de que xcape (mapeamento CapsLock para uma chave sobressalente como Alt+F12 por xcape -e 'Caps_Lock=Alt_L|F12 ) e playerctl sejam iniciados automaticamente no login, e inclua no arquivo ~/.xbindkeysrc as duas linhas

"playerctl play-pause"
  Alt + F12
    
por Enno 25.06.2018 / 22:41
0

Faça da sua tecla capslock uma tecla de reprodução / pausa

Esta solução irá remapear o scancode do seu capslock para um keycode diferente no driver de entrada do kernel, neste caso play / pause.

Vantagens

  • Não há necessidade de modificar arquivos de sistema existentes (apenas um novo arquivo deve ser criado)
  • As aplicações não sabem que na verdade é uma chave de capslock, mas acha que uma tecla de reprodução / pausa real foi pressionada
  • Não é necessário desabilitar o capslock, não há possibilidade de bagunçar o xkb configuration

Desvantagens

  • Tem que ser feito individualmente para cada teclado (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 evtest e selecione o seu teclado. Se não houver saída quando você pressionar uma tecla, pressione Ctrl + C e tente um dispositivo diferente. Lembre-se do número do evento do dispositivo que você selecionou, nós precisaremos dele 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 linha MSC_SCAN que precede a linha KEY_CAPSLOCK . 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 de evento do dispositivo usado para o comando evtest :

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

... isso produzirá bustype , product , vendor e version do teclado.

Crie um arquivo chamado 65-keyboard-custom.hwdb in /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

  • [bus], [vendor], [product] e [version] têm exatamente 4 caracteres e as letras precisam ser maiúsculas
  • [scancode] tem que ser minúsculo
  • a linha evdev:... tem sem espaço anterior
  • a linha KEYBOARD_KEY... tem exatamente um espaço anterior

Por exemplo:

evdev:input:b0003v046DpC228e0110*
 KEYBOARD_KEY_70039=playpause

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

sudo systemd-hwdb update

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

sudo udevadm trigger

Se você quiser reverter as alterações, basta remover o arquivo criado e reinicializar.

Você pode encontrar informações mais detalhadas na minha resposta original sobre esse assunto.

    
por danzel 19.06.2018 / 14:17
0

Talvez você use xbindkeys ou XTE para fazer isso. Mas primeiro tenha certeza de quais são os códigos de tecla, você pode ver o código para a tecla capslock usando o comando xev no terminal e pressioná-lo (você pode ver o código de qualquer botão keu ou mouse, incluindo mouses de jogos). Com capslock e botões de reprodução 'keycode na mão, você pode editar xbindkeys confi arquivo e colocar lá suas alterações. use touch ~/.xbindkeysrc para criar o arquivo de configuração (se o sistema não o criar automaticamente) e nano ~/.xbindkeysrc para editá-lo. Eu usei no mês passado e aqui é um examble. dê uma olhada nesses links que podem ser muito úteis para você.

link

link

Remapear um botão do meu mouse de jogo para uma tecla do teclado

link

    
por Edmilson Gonçalves 21.06.2018 / 20:27