quinta-feira, 16 de julho de 2009

Configurar um teclado multimédia em Debian

Certo dia, depois de já ter instalado Debian e alguns jogos no computador do meu irmão, resolvi tentar configurar o teclado multimédia que tinha este computador.



Este teclado tem umas quantas teclas multimédia que não eram reconhecidas pelo KDE ou mesmo pelo próprio sistema operativo... se fosse ao Centro de Controle do KDE, á parte de configuração do teclado, este não aparecia na lista, e a lista de teclados suportados até é bastante grande... e a marca deste teclado até é estranha, logo haveria que arranjar uma alternativa de configuração manual. No caso do meu computador, tenho um teclado Genius Luxemate Scroll U+P, e este até vinha na lista e nem precisei de o configurar practicamente.
Estes teclados multimédia normalmente são feitos para Windows e vêm com CD's de instalação com os respectivos controladores. Ora isto não quer dizer que em Linux, embora não existam estes controladores, que o teclado não envie informação ao computador quando estas teclas especiais são pressionadas. Em windows ficamos com os controladores ou drivers instalados para que o teclado funcione e mais algum serviço sendo executado para tal efeito, mas em Linux, simplesmente configuramos para que seja detectado (de forma manual ou não ) e ele funciona sem necessidade de ter mais algum serviço ou demónio ( costumam-se chamar demónios aos serviços em Linux).
Esta guia tem como objectivo configurar as teclas através de uma sessão gráfica, para que possam ser configuradas através de qualquer ambiente de trabalho. Neste caso eu uso KDE que é o que mais gosto, mas suponho que seja semelhante nos muitos outros ambientes de trabalhos que existem.

Primeiro passo será determinar os códigos das teclas ou keycodes.

Para saber qual código coorresponde a qual tecla, deveremos usar uma aplicação chamada xev, que se ocupa de informar dos eventos que ocurram em (servidor gráfico).

Lançamos ou executamos xev desde uma linha de comandos ou terminal (estando aberta a sessão gráfica):

$ xev

De seguida aparecerá uma janela chamada "Event Tester" que é a que "sente" tudo o que se faça sobre ela, seja com o rato ou o teclado, enquanto que na janela da linha de comandos desde onde a lançámos é que vão aparecendo os eventos.

Selecionando o "Event Tester" vamos carregando no botões multimédia um a um e vendo o que sai na linha de comandos. Quando carregamos no botão "play" isto é o que aparece:

KeyRelease event, serial 31, synthetic NO,
window 0x2e00001,
root 0x63, subw 0x0, time 1412932703, (92,-
5), root:(163,415),
state 0x10, keycode 162 (keysym 0x0,
NoSymbol), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False


Como se pode ver aparece keycode 162 e também aparece NoSymbol. Isto significa que não foi definina nenhuma acção para o botão ou caracter.

Segundo passo será definir os simbolos para os keycodes usando xmodmap.

xmodmap é uma aplicação de linha de comandos ou terminal que permite modificar o mapa de caracteres do teclado para as X, adicionando, eliminado ou intercambiando simbolos.


Criamos um ficheiro de texto sem formato ( podemos criar este ficheiro com kate por exemplo, ou kwrite ) que contenha os keycodes e seus respectivos simbolos, um por linha, da seguinte maneira:


keycode N = símbolo


onde N é o número do keycode que obtivemos com xev e simbolo é qualquer nome como o qual queiramos identificar ao botão em questão. Quando terminado gravamos o ficheiro com o nome de .xmodmap


... E por via das dúvidas, gravei-o também com o nome de .xmodmaprc na minha pasta home


NOTA: o nome do ficheiro começa por um ponto, o que segnifica que será um ficheiro oculto.


Aqui fica um exemplo do que encontrei e de como ficou o meu ficheiro (neste caso ficaram os dois iguais, tanto .xmodmap como .xmodmaprc)




keycode 144 = XF86AudioPrev
keycode 153 = XF86AudioNext
keycode 160 = XF86AudioMute
keycode 161 = XF86Calculator
keycode 162 = XF86AudioPlay
keycode 164 = XF86AudioStop
keycode 174 = XF86AudioLowerVolume
keycode 176 = XF86AudioRaiseVolume
keycode 178 = XF86HomePage
keycode 222 = XF86PowerDown
keycode 223 = XF86Sleep
keycode 227 = XF86WakeUp
keycode 229 = XF86Search
keycode 230 = XF86Favorites
keycode 231 = XF86Refresh
keycode 232 = XF86Stop
keycode 233 = XF86Forward
keycode 234 = XF86Back
keycode 235 = XF86MyComputer
keycode 236 = XF86Mail
keycode 237 = XF86AudioMedia


Os nomes para os botões estão definidos no ficheiro
/usr/include/X11/XF86keysym.h


Aplicar a configuração 


Executamos na linha de comandos:


$ xmodmap .xmodmaprc


É claro que temos de executar este comando no directório ou pasta em que tenhamos o ficheiro .xmodmaprc


E agora só falta experimentar as teclas de novo com xev, depois de ter aplicado a configuração com xmodmap. Ao carregar em alguma tecla, neste caso a tecla de baixar o volume de som seria:



KeyRelease event, serial 31, synthetic NO,
window 0x2e00001,
root 0x63, subw 0x0, time 1418716437, (102,-
28), root:(106,413),
state 0x0, keycode 17 (keysym 0x1008ff11,
XF86AudioLowerVolume
XF86AudioLowerVolume), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False


Para fazer com que estas mudanças sejam aplicadas ao iniciar a sessão, criamos outro ficheiro  que contenha o comando anterior para aplicar a configuração que fizemos.


O ficheiro a criar deve ser um ficheiro de texto planos sem formato com o seguinte conteúdo:



#!/bin/bash
xmodmap .xmodmaprc
exit


Devemos gravar o ficheiro com a extensão .sh, já que vai ser um script para bash. Devemos também dar permissos de execução a este ficheiro. Depois de o gravar com o nome que quisermos e com a extensão .sh
 

Por exemplo: teclas.sh


Fazemos click direito em cima do ficheiro e escolhemos propriedades, vamos á aba "permissos" e marcamos a casinha que diz " é executável".


Depois metemos este ficheiro teclas.sh , dentro da nossa home, em:


 ~/.kde/Autostart/


ou seja...


/home/nome-de-usuário/.kde/Autostart/


Notar que a pasta /.kde é oculta e devemos habilitar a vista de ficheiros ocultos para que possamos entrar nela e copiar o nosso ficheiro.


Acto seguido só falta configurar os atalhos de teclado para os programas que queiramos, como amarok por exemplo,...para tal vamos ao Centro de Control > Regionalidade e acessibilidade > atalhos de teclado e aí escolhemos a tecla multimedia.

Esta guia foi feita baseada em experimentação (cabeçadas na parede) e através desta guia que me ajudou bastante. Espero que sirva de utilidade a alguém.


5 comentários:

  1. Camarada,
    Estou usando Debian Lenny em um notebook Positivo Mobile Z635. O teclado não é multimídia, mas tem umas funções extras ativadas pela tecla Fn.
    Meu problema é que existem três teclas fora do teclado de toque único, não relacionadas ao Fn, e relativas ao browser, cliente de email e outra para o usuário relacionar a uma aplicação desejada. As duas primeiras foram configuradas automaticamente pelo sistema, mas a última eu não consigo nada porquê ela não é detectada pelo xev.
    Você tem alguma idéia de como posso utilizá-la?

    Lex Aleksandre
    Google profile
    Facebook
    Twitter @aleksandre

    ResponderEliminar
  2. @ Lex:
    Olá companheiro... é esquisito que o xev não detecte essa tecla...
    Você já experimentou ir ao centro de control (suponho que use KDE, se usa Gnome suponho que seja semelhante) e tentar asignar um atalho a essa tecla para um programa que você queira usar ? Pode ser que assim ela seja reconhecida.
    Depois conte como foi, pode ser que tenha mais alguma sugestão...
    Cumprimentos e bem-vindo ao blogue !

    ResponderEliminar
  3. @ Lex:
    Como dizia na mensagem anterior, você pode tentar fazer assim ou tentar atribuir uma combinação de teclas para o programa que quer. Por exemplo: "Control+Teclatecla-que-não-funciona" ou "Shift+Tecla-que-não-funciona" lá na configuração dos atalhos de teclas no ocentro de control do KDE...se usa Gnome deve ser parecido.
    No entanto também pode acontecer que essa tecla seja reconhecida pelo kernel mas não tenha scancode ou keycode.
    Carregue na tecla da mesma maneira que você faz para obter os códigos das outras com o XEV e procure no ficheiro /var/log/messages, por alguma informação que essa tecla possa ter deixado por lá.
    Você pode depois tentar atribuir um scancode para ela, por exemplo: "setkeycodes e029 123".
    Se funciona, o XEV deveria dar outra "saida" e poderia ser capaz de usar o Xmodmap para atribuir-lhe um nome.
    Sinto não poder ajudar em condições neste momento, já que a minha ligação á net é lentissima, estando de férias e o meu computador com Linux ficou em casa a descansar (buáá)
    Qualquer informação que você ver que pode servir de ajuda para ser analisada ponha aqui, pode ser que venha algo mais á mente........

    Cumprimentos

    ResponderEliminar
  4. Muito obrigado por sua resposta e desculpe-me pela demora em replicar!
    Só para constar sou usuário Gnome. Infelizmente nada é registrado no /var/log/messages referente às teclas mencionadas; apenas as que realmente são reconhecidas. Até mesmo a tecla Fn não é captada pelo xev. Deve existir algum módulo no kernel que faça esse serviço.
    Irei adiante à procura dessa informação. Qualquer coisa reportarei aqui.

    ResponderEliminar
  5. Hmmm ok.
    Olhe você já tentou configurar essa tecla Fn com a ajuda de hotkeys ?
    Pode procurar no synaptic por hotkeys, e até vi lá outro pacote que pode ser de ajuda... chama-se fnfx-client
    Digo isto porque vi um caso parecido em que puseram a tecls Fn a funcionar com hotkeys num forum de Ubuntu.
    A página é a seguinte: http://foro.debianchile.cl/topic/479/configurar-la-famosa-tecla-fn-con-hotkeys/
    está em espanhol, se você tiver algum problema em entender algo eu posso ajudar também.

    Cumprimentos e boa sorte ;-)

    ResponderEliminar

É favor manter a boa educação nos comentários. Qualquer comentário ofensivo, racista, desprestigioso, apenas com objectivo de inundar o blogue ou comentários de publicidade não solicitada serão eliminados. Serão aceites comentários em Português, Espanhol e Inglês. Comentarios en Portugues, Español y Ingles seran aceptados. Comments in Portuguese, Spanish and English will be accepted.