No X11 (no console eu não sei) você pode fazer isso redefinindo o comportamento da tecla Escape. Eu olhei para a definição "shift (break_caps)" para ver como ela funciona e a adaptei.
Veja este responda no xkb para mais detalhes sobre como / onde colocar os arquivos modificados localmente e carregá-los.
E para fazer o que você quer, você precisa no arquivo de símbolos local (por exemplo: ~/.xkb/symbols/mysymbols
) uma seção como esta:
partial modifier_keys
xkb_symbols "esc_breaks_caps" {
key <ESC> {
type = "ALPHABETIC",
actions [Group1] = [
SetMods(modifiers=none),
SetMods(modifiers=Lock,clearLocks)
]
};
};
e no arquivo de mapa de teclado local (por exemplo: ~/.xkb/keymap/mykbd
; você pode criá-lo com setxkbmap -print > ~/.xkb/keymap/mykbd
) altere a linha xkb_symbols para adicionar "+ mysymbols (esc_break_caps)"
agora você pode carregá-lo com: xkbcomp -I$HOME/.xkb ~/.xkb/keymap/mykbd $DISPLAY
e pressionando Esc irá remover o estado CapsLock (na verdade, o efeito acontece no release de Esc; eu acho que apenas modificadores modificadores têm efeito imediato outros, o efeito é após o seu lançamento.)
Ah, se você quiser também trocar as teclas Escape e CapsLock; então use este lugar (e você coloca "+ mysymbols (esc_swap_and_breaks_caps)" no seu arquivo mykbd):
partial modifier_keys
xkb_symbols "esc_swap_and_breaks_caps" {
replace key <CAPS> {
type = "ALPHABETIC",
symbols = [ Escape, Escape ],
actions [Group1] = [
SetMods(modifiers=none),
SetMods(modifiers=Lock,clearLocks)
]
};
replace key <ESC> { [ CapsLock, CapsLock ] };
};
observe que as chaves físicas são <CAPS>
e <ESC>
; <CAPS>
(tecla gravada CapsLock no seu teclado) envia Escape e <ESC>
(tecla gravada Esc ) envia CapsLock, com <CAPS>
(enviando Escape) também desativando capslock estado