Você terá que fazer isso separadamente para X e para todo tipo de console de texto que você se importa.
Se você quiser alternar entre mapas de teclado arbitrários, será necessário manter o estado, pois normalmente o console não o fará por você. Isso é o que os comutadores de layout, como o Gnome e o KDE, fazem. Mas se você quiser apenas alternar entre alguns mapas de teclado conhecidos, poderá consultar o console (supondo que esse recurso esteja disponível em seu tipo de console), obter o código atual enviado por uma chave e decidir com o que mudar com base nisso. Aqui estão algumas possibilidades:
- Se o código de acesso 24 (o número variará entre os tipos de console) envia atualmente
q
, o mapa de teclado atual se parece com qwerty, então mude para dvorak, caso contrário mude para qwerty. - Se Q e W tiverem códigos de teclas adjacentes, provavelmente é um layout qwerty.
- Adicione uma chave falsa nos mapas de teclado e procure sua ligação.
Aqui está uma implementação para X e Linux, usando o teste de W = Q +1. Cuidado, eu não testei isso. Observe que o script geralmente não pode ser usado por meio de logins remotos no modo de texto.
if [ -n "$DISPLAY" ]; then
if xmodmap -pke | awk '$3=="=" && $4=="q" {q=$2}
$3=="=" && $4=="w" {w=$2}
END {exit w-q==1}'; then
setxkbmap us
else
setxkbmap dvorak
fi
elif [ "$TERM" = "linux" ]; then
if dumpkeys | awk '$3=="=" && $4=="q" {q=$2}
$3=="=" && $4=="w" {w=$2}
END {exit w-q==1}'; then
loadkeys us
else
loadkeys dvorak
fi
fi
No X Window, o melhor lugar para vincular isso a uma chave é usar o ambiente de área de trabalho ou o recurso de ligação de teclas do gerenciador de janelas. Você pode fazer a chave executar apenas a parte específica do X. É claro que, se o seu DE / WM tiver um recurso de mudança de layout, você também pode usá-lo.
No console do Linux, as possibilidades de associações de teclas são muito limitadas. Você pode vincular uma chave ao símbolo KeyboardSignal
. Se você estiver usando o SysVinit, coloque kb::kbrequest:/path/to/script
em /etc/inittab
para executar seu script (como root!) Quando o sinal for pressionado. Eu não sei como configurar a ação desta chave com o Upstart.