É possível remapear todo o sistema de teclas CapsLock, de modo que, quando o botão CapsLock é pressionado por si só, ele atua como tecla de escape e, quando pressionado com outra tecla, atua como tecla de controle?
É possível remapear todo o sistema de teclas CapsLock, de modo que, quando o botão CapsLock é pressionado por si só, ele atua como tecla de escape e, quando pressionado com outra tecla, atua como tecla de controle?
Respostas:
Eu encontrei uma solução muito boa chamada xcape . No README:
O xcape é executado como um daemon e intercepta a tecla Control. Se a tecla Control for pressionada e liberada sozinha, ela gerará um evento da tecla Escape.
Isso faz mais sentido se você tiver remapeado sua tecla Caps Lock para Control. Versões futuras deste programa podem fazer esse mapeamento para você, mas, por enquanto, isso é algo que você deve fazer sozinho.
Mapeei Caps para Escape para me sentir mais confortável digitando no Vim. Eu usei xmodmap
e coloquei isso ~/.Xmodmap
.
clear Lock
keycode 0x42 = Escape
Para aplicar: xmodmap ~/.Xmodmap
. Você pode colocar isso em um arquivo como ~ / .bash_profile (eu coloquei em ~ / .xinitrc, porque não uso um gerenciador de login.
Para mapear CapsLock + [outra tecla], considere usar xbindkeys
.
Uma solução apenas para Linux para remapear as chaves em todo o sistema é escrever uma regra simples do udev. Não dependerá do X, funcionará em qualquer terminal ou aplicativo e é portátil entre qualquer instalação recente do Linux, basta copiar dois arquivos.
Você precisa escrever 2 arquivos: um contendo a regra udev, que informa ao kernel para remapear as chaves, e outro contendo os mapeamentos reais necessários.
Usando esse método, eu remapeei todo o teclado, talvez o código seja útil como inspiração http://git.adirat.com/carpalx-keyboard
Criei uma ferramenta em C especialmente para esse fim, que supera muitos dos problemas da solução xcape / xmodmap :
Encontrei uma pergunta com uma palavra diferente no AskUbuntu que tinha uma boa resposta , mas tive que modificá-la um pouco para funcionar nos meus sistemas.
Pelos comentários de Louis e Sergiy por lá, eu vim com essa solução que está funcionando para mim no Ubuntu 16.04 (Xenial) e vou trazê-la comigo para os outros sistemas Linux que eu uso.
Instalei o xcape e coloquei as seguintes linhas de código no meu .profile
arquivo no meu diretório pessoal.
Por causa dos vários gerenciadores de exibição (gdm / kdm / sddm / etc) se comportando de maneiras estranhas e redefinindo o setxbmap
após suspender / retomar ou bloquear / desbloquear, descobri como definir as opções da maneira que elas herdam e não ' t reinicia o tempo todo. Como eu suspendo e continuo muito, eu precisava me certificar de que não recebi muitas cópias da xcape
execução, o que é resolvido no novo script abaixo.
Primeiro modifique a configuração do teclado com sudo gedit /etc/default/keyboard
e defina XKBOPTIONS="ctrl:nocaps"
e, em seguida, ~/.xprofile
coloque sua única linha abaixo.
ps aux | grep -i '[x]cape' && killall -9 xcape; hash xcape 2>&1 >/dev/null && xcape -e 'Control_L=Escape' -t 100 &
Esperamos que as várias seções do script economizem algum tempo / problemas e evitem logins bloqueados. Primeiro, ele verifica se já existe uma instância em execução e a mata, já que a única coisa que xcape
faz é mapear Ctrl para Esc, isso é seguro; a hash
parte garante que você tenha xcape
instalado, caso contrário, seu sistema poderá travar quando você tentar fazer o login, porque todas as inicialização foram iniciadas. os scripts devem sair corretamente.
setxkbmap -option 'caps:ctrl_modifier'; xcape -e '#66=Escape'
Sergiy:
Eu usei o gnome-tweak-tool para mapear Caps Lock para Ctrl, pois não há layout de teclado nas Configurações do sistema no Ubuntu 14.04. O xcape -e 'Control_L = Escape' não funcionou, mas depois de usar o xcape -d, descobri que o Caps Lock gera o código de chave 66 e o remapeou, respectivamente: xcape -e '# 66 = Escape'. - Sergiy Byelozyorov 4 / set / 14 às 10:08
Louis:
De acordo com este post do blog, é possível fazer isso apenas com o xcape: setxkbmap -option 'caps: ctrl_modifier'; xcape -e 'Caps_Lock = Escape' setxkbmap -option 'caps: ctrl_modifier'; xcape -e 'Caps_Lock = Escape; Control_L = Escape; Control_R = Escape' - Louis Simoneau 4/15 '15 às 10:06