Muito bem, você já viu que seu
Xorg está querendo fazer as coisas de um jeito diferente, olhando para o futuro, mas o teclado continua errado, não é? No momento, é o
HAL que está dizendo a ele que o teclado padrão é do tipo "us", como podemos verificar utilizando o seguinte comando:
# lshal | grep xkb
input.xkb.layout = 'us' (string)
input.xkb.model = 'evdev' (string)
input.xkb.options = 'terminate:ctrl_alt_bksp' (string)
input.xkb.rules = 'base' (string)
input.xkb.variant = '' (string)
input.xkb.layout = 'us' (string)
input.xkb.model = 'evdev' (string)
input.xkb.options = 'terminate:ctrl_alt_bksp' (string)
input.xkb.rules = 'base' (string)
input.xkb.variant = '' (string)
Quem determina essa configuração específica para o teclado é o arquivo
/usr/share/hal/fdi/policy/10osvendor/10-keymap.fdi:
<?xml version="1.0" encoding="ISO-8859-1"?> <!-- -*- SGML -*- -->
<deviceinfo version="0.2">
<device>
<match key="info.capabilities" contains="input.keymap">
<append key="info.callouts.add" type="strlist">hal-setup-keymap</append>
</match>
<match key="info.capabilities" contains="input.keys">
<merge key="input.xkb.rules" type="string">base</merge>
<!-- If we're using
Linux, we use evdev by default (falling back to
keyboard otherwise). -->
<merge key="input.xkb.model" type="string">keyboard</merge>
<match key="/org/freedesktop/Hal/devices/computer:system.kernel.name"
string="Linux">
<merge key="input.xkb.model" type="string">evdev</merge>
</match>
<!-- Restore Ctrl-Alt-Bksp Xserver Zapping -->
<merge key="input.xkb.options" type="string">terminate:ctrl_alt_bksp</merge>
<merge key="input.xkb.layout" type="string">us</merge>
<merge key="input.xkb.variant" type="string" />
</match>
</device>
</deviceinfo>
Não devemos, porém, alterar este arquivo, pois no caso de um upgrade do HAL ele será novamente sobrescrito com o padrão. A melhor solução é criar uma cópia do mesmo em
/etc/hal/fdi/policy, cujas configurações prevalecerão sobre a versão em /usr/share (lembre-se que você precisará estar como root para fazer isso):
# cp /usr/share/hal/fdi/policy/10osvendor/10-keymap.fdi /etc/hal/fdi/policy
Agora sim, edite o arquivo
/etc/hal/fdi/policy/10-keymap.fdi alterando o layout do teclado para *br* e o modelo para *abnt2*:
<?xml version="1.0" encoding="ISO-8859-1"?> <!-- -*- SGML -*- -->
<deviceinfo version="0.2">
<device>
<match key="info.capabilities" contains="input.keymap">
<append key="info.callouts.add" type="strlist">hal-setup-keymap</append>
</match>
<match key="info.capabilities" contains="input.keys">
<merge key="input.xkb.rules" type="string">base</merge>
<!-- If we're using Linux, we use evdev by default (falling back to
keyboard otherwise). -->
<merge key="input.xkb.model" type="string">keyboard</merge>
<match key="/org/freedesktop/Hal/devices/computer:system.kernel.name"
string="Linux">
<merge key="input.xkb.model" type="string">abnt2</merge>
</match>
<!-- Restore Ctrl-Alt-Bksp Xserver Zapping -->
<merge key="input.xkb.options" type="string">terminate:ctrl_alt_bksp</merge>
<merge key="input.xkb.layout" type="string">br</merge>
<merge key="input.xkb.variant" type="string" />
</match>
</device>
</deviceinfo>
Lembre-se de reiniciar o daemon do HAL. No Slackware isto pode ser feito com o seguinte comando:
# /etc/rc.d/rc.hald restart
Após esta ação você poderá verificar a mudança do teclado reportado pelo HAL repetindo o comando *lshal*:
# lshal | grep xkb
input.xkb.layout = 'br' (string)
input.xkb.model = 'abnt2' (string)
input.xkb.options = 'terminate:ctrl_alt_bksp' (string)
input.xkb.rules = 'base' (string)
input.xkb.variant = '' (string)
input.xkb.layout = 'br' (string)
input.xkb.model = 'abnt2' (string)
input.xkb.options = 'terminate:ctrl_alt_bksp' (string)
input.xkb.rules = 'base' (string)
input.xkb.variant = '' (string)
Em seguida reinicie o servidor X. Você pode verificar que ele está usando a nova interface com o teclado correto olhando novamente seu arquivo de log:
(II) LoadModule: "evdev"
(II) Loading /usr/lib/xorg/modules/input//evdev_drv.so
(II) Module evdev: vendor="X.Org Foundation"
compiled for 1.6.1, module version = 2.2.2
Module class: X.Org XInput Driver
ABI class: X.Org XInput driver, version 4.0
(II) LoadModule: "evdev"
(II) Loading /usr/lib/xorg/modules/input//evdev_drv.so
(II) Module evdev: vendor="X.Org Foundation"
compiled for 1.6.1, module version = 2.2.2
Module class: X.Org XInput Driver
ABI class: X.Org XInput driver, version 4.0
(II) config/hal: Adding input device AT Translated Set 2 keyboard
(**) AT Translated Set 2 keyboard: always reports core events
(**) AT Translated Set 2 keyboard: Device: "/dev/input/event2"
(II) AT Translated Set 2 keyboard: Found keys
(II) AT Translated Set 2 keyboard: Configuring as keyboard
(II) XINPUT: Adding extended input device "AT Translated Set 2 keyboard" (type: KEYBOARD)
(**) Option "xkb_rules" "evdev"
(**) Option "xkb_model" "abnt2"
(**) Option "xkb_layout" "br"
(**) Option "xkb_options" "terminate:ctrl_alt_bksp"
De quebra pode acontecer de vários outros dispositivos que você talvez nem soubesse que pudessem ser configurados como entrada também o serão, como o controle remoto da minha placa de captura de vídeo, por exemplo:
(**) cx88 IR (Prolink Pixelview MPEG: always reports core events
(**) cx88 IR (Prolink Pixelview MPEG: Device: "/dev/input/event6"
(II) cx88 IR (Prolink Pixelview MPEG: Found keys
(II) cx88 IR (Prolink Pixelview MPEG: Configuring as keyboard
(II) XINPUT: Adding extended input device "cx88 IR (Prolink Pixelview MPEG" (type: KEYBOARD)
(**) Option "xkb_rules" "evdev"
(**) Option "xkb_model" "abnt2"
(**) Option "xkb_layout" "br"
(**) Option "xkb_options" "terminate:ctrl_alt_bksp"
Pronto! Entre em sua sessão do X e ateste que o teclado está funcionando com todos os acentos e caracteres em seus devidos lugares.