Nada sei de programação. Assim, o que escrevo é baseado exclusivamente no que leio nos arquivos prontos e concluo por analogia.
O meu, e sobre o qual foi escrito este artigo, é um teclado PS/2 internacional acrescido das teclas Wake, Sleep e Power --- um Pc104 + acpi. Layout formado pelos arquivos: pc + us(intl) + inet(acpi) + Compose. As regras para se modificar o mapa de teclado são as mesmas sejam quais forem os layouts.
Sistema Slackware 12.0 com X11 7.1, KDE 3.5.7, XFCE 4.4.1.
Como programas de teste usei os editores do KDE e o Seamonkey-Composer 1.1.2, por serem uns escritos em Qt e o último em Gtk. Essas duas bibliotecas podem comportar-se diferentemente no que respeita ao teclado.
A digitação é feita em níveis. Nível 1 é o pressionamento simples; nível 2 é com uso do Shift; nível 3 usa Altgr (ISO_Level3_Shift , Alt direita) + tecla; e nível 4 Altgr + Shift + tecla. Para descobrir os principais sinais e o layout de teclado que está configurado podem ser usados os comandos:
xkbprint -ll 1 :0.0 -o shift_level_1.ps && xkbprint -ll 3 :0.0 -o shift_level_3.ps
Serão criados dois arquivos .ps, que são imagens dos níveis do layout determinado em /etc/X11/xorg.conf.
Quando os comandos xkbprint não mostrarem todas as teclas, para descobrir os keycodes o modo mais fácil é usar.
xev
Para cada tecla pressionada é informado o keycode, keysym e qual o sinal mostrado na tela (se houver) ou nome. Minhas Wake, Sleep e Power, que não apareceram pelo xkbprint, foram descobertas por ele.
Para saber os nomes dados pela Xorg às teclas referentes aos keycodes (número fornecido pelo xkbprint ou xev) e o que elas fazem, ver /etc/X11/xkb/keycodes/xfree86 e /etc/X11/xkb/symbols/pc. O keysym e nome das teclas especiais mapeadas estão em /usr/share/X11/XkeysymDB (o local pode variar nas distribuições), sabendo um pode-se encontrar o outro.
Se nem xev fornecer os keycodes, o que pode acontecer em teclados cheios de novidades, os métodos mais complexos descritos em
HOWTO_Use_Multimedia_Keys e por "Piter Punk" (Mapeando teclas "inexistentes". Slackwarezine 14.5, nov./2006) poderão ser usados.
Trecho do meu
/etc/X11/xorg.conf:
Section "InputDevice"
...
Option "XkbModel" "acpi"
Option "XkbLayout" "us"
Option "XkbVariant" "intl"
Option "XkbOptions" "compose:lwin " # compose (Multi_key) na
Winkey esquerda para aliviar a mão direita.
Configuração do meu /etc/profile.d/lang.sh:
export LANG=pt_BR
Se mudar para LANG=en_US.ISO8859-1 o Seamonkey-Composer (UTF-8) não pega mais travessão, apesar dele constar em /usr/share/X11/locale/en_US.UTF-8/Compose e ... /pt_BR.UTF-8/Compose. Por isso não sei qual o Compose usado pelo Seamonkey.
As configurações acima determinam o que o sistema responderá a cada tecla pressionada, de acordo com
/etc/X11/xbb/symbols/us e
/usr/share/X11/locale/iso8859-1/Compose. Estes serão modificados para atender o objetivo do autor.