Configuração de teclado e dispositivos de entrada em geral a partir do HAL no Xorg 1.5 e superiores

A partir do Xorg 1.5, a configuração "default" dos dispositivos de entrada (teclado, mouse etc) passa a ser feita pelo HAL ao invés dos drivers que acompanham o Xorg. Este artigo pretende mostrar o porquê dessa mudança e como resolver o problema se seu sistema simplesmente parou de funcionar como deveria após o upgrade do Xorg.

[ Hits: 35.997 ]

Por: Cláudio Henrique Fortes Félix em 17/06/2009 | Blog: http://www.helpo.com.br


Resolvendo o problema de forma "evolutiva"



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.

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Identificando o problema
   3. Resolvendo o problema de forma "evolutiva"
   4. Resolvendo o problema de forma "reacionária"
Outros artigos deste autor

Acessando computadores remotos protegidos por NAT ou firewall com túnel SSH reverso direcionado por DNS dinâmico

Importando extratos do Banco do Brasil para o Kmymoney (gerenciador de finanças pessoais)

Configuração do OpenOffice para o português do Brasil (pt-BR) a partir de uma instalação do BrOffice

Leitura recomendada

Bind9 slave em chroot no Debian Lenny

Encapsulamento de Apache com chroot

LTSP no Slackware

Configurando internet banda larga no Linux (Slackware 10.1)

Impressoras no Linux - Instalando mais de 2000 modelos

  
Comentários
[1] Comentário enviado por fco em 17/06/2009 - 15:02h

Muito bom o artigo! Belamente escrito!

Passei pelo tormento de atualizar o xorg no Slackware current.

As coisas ficaram doidonas. :)

O mesmo problema do teclado, perda de performance da placa de vídeo, travadas legais no KDE4.

O artigo é uma luz para começar a por as coisas no eixo.

Mas, confesso que prefiro a simplicidade das coisas antigas... :)

Abraço,
Xico.

[2] Comentário enviado por xerxeslins em 17/06/2009 - 16:07h

Senti essa mudança há alguns meses ao atualizar o Arch Linux, antes que essa modificação fosse feita na maioria das distros... já que Arch sempre se mantém moderna, embora não tão estável.

Tomara que essa configuração seja logo implantada no processo de instalação das distros de agora em diante, enquanto isso seu excelente artigo será imprescindível. Artigo realmente é muito esclarecedor =D

Outra opção é usar o comando:

setxkbmap -model abnt2 br

no /etc/rc.d/rc.local

Para ser executado automaticamente ao inicializar o sistema. Provisoriamente é assim que faço aqui.

Valeu!


[3] Comentário enviado por aaron.binner em 17/06/2009 - 17:01h

Também percebi esta mudança na minha ultima atualização, mas resolvi da forma "reacionária" apenas avaliando o arquivo de log do xorg, e, à primeira impressão repreendi a mudança, mais acredito que os desenvolvedores estão pensando somente na melhora do desempenho e na diminiução de trabalho para nós usuários. Ótimo artigo, muito bem explicado, e agora sei como resolver o problema da maneira 'correta'. VALEU!!!

[4] Comentário enviado por pablover em 18/06/2009 - 08:57h

Gostei demais do seu artigo. Ajudou a esclarecer várias coisas. Porém após eu configurar o "br" e "abnt2", a tecla de interrogação para de funcionar. Você sabe por que isso acontece?

[5] Comentário enviado por dfsantos em 19/06/2009 - 11:59h

Amigo parabens pelo belo artigo. otima qualidade.

[6] Comentário enviado por chffelix em 22/06/2009 - 22:24h

Obrigado pessoal! É sempre um prazer poder participar e trocar novas idéias com vocês. Em breve devo postar alguns updates, pois tive problemas no acesso via NX usando o novo método - talvez seja uma questão de tempo para que o nxclient seja adaptado, mas o teclado fica totalmente louco dentro dele:( . Sobre a questão da interrogação pablover, não tive problemas. Como foi que você fez a configuração? Editou quais arquivos?

Abraços!

[7] Comentário enviado por elton.linux em 08/07/2009 - 18:20h

Parabéns!!!

Uso archlinux + LXDE e estava com esse problema. Antes configurava no XORG, mas agora o HAL toma conta o que creio ter ficado melhor.

Só um detalho, como diria o REI ROBERTO CARLOS, no ARCHLINUX para reiniciar o HAL faça:

#/etc/rc.d/hal restart

Valeu
Abraço

[8] Comentário enviado por zereis em 02/09/2009 - 10:48h

Caros colegas,
Tive problemas ao atualizar o xorg. O teclado continua com o layout abnt2, mas perdi as teclas Page Down, End, seta para baixo (virou /) e o ponto do teclado numérico virou vírgula. Para resolver, tem alguns truques, mas só funcionam naquela Sessão. Se reiniciar o X, perde-se a solução e tem-se que refazer o comando. Uma da soluções é usar o comando setxkbmap -model abnt2 br; Outro é remapeando a tecla, especificando a ação específica dela; uma terceiro solução é fazendo Ctrl+Alt+F1 e voltando com Ctrl+Alt+F7. Só que, repito, ao reiniciar o X, o problema volta.
Tentei automatizar as soluções, tanto colocando o comando setxkbmap -model abnt2 br no arquivo /etc/rc.d/rc.local, ou fazendo um script e colocando em Autostart. Não funcionaram.
No arquivo /etc/hal/fdi/policy/10-keymap.fdi está informando abnt2 e br nos locais específicos.
De tanto tentar resolver o problema, acabei criando outro que não consigo resolver: perdi o console pelas teclas Ctrl+Alt+Fn. Parece que chama-se o console mas a resolução da tela não permite-se que as letras sejam visualizadas. A tela preta fica até tipo no quarto superior da tela. Abaixo vê-se o X mas sem ação nenhuma sobre a tela. A digitar Ctrl+Alt+F7 volta-se ao X, normalmente.
Ao tentar Option "AutoAddDevices" "off" no xorg.conf, o mouse simplesmente fica congelado no centro da tela.
Att.
José Reis

[9] Comentário enviado por yermandu em 15/02/2010 - 16:14h

Cara

Valeu !!!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts