Remapear o CapsLock para escapar e controlar todo o sistema

18

É 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?

Zameer Manji
fonte
5
Parece que seria muito difícil. Por exemplo, não foi possível gerar eventos de pressionamento de tecla, porque você não sabe qual tecla foi pressionada. Se for liberado sem pressionar outra tecla, será Escape, caso contrário, será Control.
Cjm

Respostas:

16

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.

Zameer Manji
fonte
Fiz um roteiro hacky para fazer isso: github.com/cmatheson/super-caps
cam
6

Mapeei Caps para Escape para me sentir mais confortável digitando no Vim. Eu usei xmodmape 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.

Emil
fonte
4

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

gimmesudo
fonte
o link está morto, você pode atualizá-lo? obrigado!
qed
I atualizado, desculpe pelo atraso
gimmesudo
Bitbucket diz "Você não tem acesso a este repositório". Você pode torná-lo público novamente? Obrigado!
Tianyi Cui
@TianyiCui check the link now
gimmesudo
1
O link está morto ou bloqueado para mim. Alguma chance de você colocar os arquivos reais em sua resposta?
labirinto
1

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 .profilearquivo no meu diretório pessoal.

MÉTODO ATUALIZADO:

Por causa dos vários gerenciadores de exibição (gdm / kdm / sddm / etc) se comportando de maneiras estranhas e redefinindo o setxbmapapó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 xcapeexecução, o que é resolvido no novo script abaixo.

Primeiro modifique a configuração do teclado com sudo gedit /etc/default/keyboarde defina XKBOPTIONS="ctrl:nocaps"e, em seguida, ~/.xprofilecoloque 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 xcapefaz é mapear Ctrl para Esc, isso é seguro; a hashparte 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.

À moda antiga:

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

dragon788
fonte