Entendendo os Mouses
Piter PUNK
1. Introdução
Este é um artigo simples, mostrando os tipos de mouses, protocolos e como
configurá-los. Aproveitamos para mostrar como mapear botões e como
configurar dois mouses ao mesmo tempo.
2. Tipos de Mouse
A primeira coisa a fazer é como se comunicar com o seu mouse, obviamente
não estamos falando em usá-lo como microfone como o Scotty no Jornada nas
Estrelas 4 (slackware - to the REAL nerds), mas queremos saber qual
o protocolo devemos usar.
Além do protocolo, os mouses ainda variam quanto à forma de conexão. Ou
seja, os conectores dos mouses são diferentes fisicamente entre si. Nesse
quesito, existem basicamente quatro tipos de mouse:
- Mouses Seriais - com um conector igual ao de joystick
de atari, conhecido como DB9. Se você tem um
mouse serial realmente antigo, pode ser que
ele tenha um conector DB25 do tamanho de um
conector de impressora!!!
- Mouses PS/2 - com um conector redondo, conhecido como PS/2 ou
miniDIN.
- Mouses USB - com um conector retangular na ponta, muito do sem
graça.
- Mouses de Bus - Ah... a diversidade e o caos...
No mundo real, existem só os três primeiros tipos. Mouses de bus são raros,
e mais raros ainda os que funcionam. Os mouses seriais caminham a passos
largos para o desaparecimento, mas ainda existe uma base instalada razoável
deles.
A nossa comunicação com algum hardware se dá através de arquivos localizados
dentro do /dev. Assim, o /dev/hda é o seu disco rígido, o /dev/rtc é o chip
de relógio e por aí vai... nessa linha, temos as entradas em que os mouses são
ligados.
- Mouses Seriais -> entradas seriais: /dev/ttyS*
- Mouses PS/2 -> entrada PS2: /dev/psaux
- Mouses USB -> entrada USB: /dev/input/mice
No /dev/ttyS* o * pode ser 0, 1, 2 ou 3. Normalmente é o 0. Existe um link
no /dev, chamado /dev/mouse que aponta qual o dispositivo está sendo utilizado
para a sua comunicação com o mouse. É possível saber essa configuração com um
simples ls:
punk@rachael:~$ ls -l /dev/mouse
lrwxrwxrwx 1 root root 10 2004-07-30 02:03 /dev/mouse -> input/mice
Ou seja, o meu mouse padrão é um mouse USB. Nessa máquina tenho conectado
também um mouse PS2 (é, só para escrever este artigo), mas o principal é
o USB. Para mudar o link de um mouse para outro, é possível fazer isso "na
mão" com o comando ln ou utilizar o mouseconfig. Ao usar o mouseconfig,
lembre-se de que ele configura o mouse apenas no modo texto, não tendo
efeito sobre o X.
Agora podemos pensar no segundo passo, o protocolo. Por incrível que pareça,
dois mouses com o mesmo conector podem não falar a mesma língua. Principalmente
se o seu mouse for um mouse de "rodinha". Ah! Para ajudar, os nomes dos
protocolos são diferentes no X e no gpm (console).
Seriais:
gpm: bare, ms, pnp e ms3*
X: Microsoft, IntelliMouse*
PS/2:
gpm: ps2, imps2*, exps2*, netmouse
X: PS/2, IMPS/2*, ExplorerPS/2*, NetScrollPS/2*, NetMousePS/2
USB:
Praticamente os mesmos do PS/2. Nunca vi um que não seja
IMPS/2 no X e imps2 no gpm, mas devem existir.
Todos os protocolos que eu listei com um * do lado são protocolos para
mouses com "rodinha". Apenas lembre-se que o gpm ignora solenemente a rodinha
do mouse, apesar de suportar o protocolo utilizado por eles. Os protocolos
mais comuns são os primeiros das listas, ficando para o fim os protocolos
mais exóticos. Existem uma série de outros protocolos, mas coloquei na lista
apenas os mais "encontráveis".
3. Configuração do GPM
Sem maiores segredos, praticamente é só rodar o mouseconfig e fazer:
/etc/rc.d/rc.gpm restart
Para quem quiser fazer "na mão" a configuração, vale a pena uma olhadinha
no próprio /etc/rc.d/rc.gpm. Costuma ser suficiente, para os preguiçosos,
a sintaxe de uma linha de comando para chamar o gpm seria algo assim:
gpm -t protocolo -m dispositivo
No caso de um mouse USB por exemplo:
gpm -t imps2 -m /dev/input/mice
Existem várias outras opções, mas a maior parte delas não costuma ser
utilizada.
4. Configuração do X
Aqui a coisa é mais interessante, principalmente porque neste caso a temível
"rodinha" do mouse está presente. Para quem não sabe, o padrão PS2 original
previa apenas 3 botões. Nada de rodinhas e de 5, 6 ou 7 botões em um mouse.
E isso causou um verdadeiro samba do crioulo doido, já que cada fabricante
fez um "puxadinho" no protocolo para suportar a rodinha e os botões extras.
O mais comum desses "puxadinhos" é o IMPS/2, o segundo mais comum é o
ExplorerPS/2. Geralmente os mouses com muitos botões obedecem ao segundo
protocolo, mas isso não é uma regra.
Uma entrada de mouse dentro do /etc/X11/xorg.conf se parece com isso:
Section "InputDevice"
Identifier "Mouse0"
Driver "mouse"
Option "Device" "/dev/psaux"
Option "Protocol" "IMPS/2"
Option "Buttons" "5"
Option "ZAxisMapping" "4 5"
EndSection
Cada uma das linhas aí dentro tem uma utilidade:
- Identifier -> O nome pelo qual esse mouse será identificado
- Driver -> O que é esse dispositivo, no caso de mouses,
sempre será "mouse"
- Device -> O dispositivo utilizado, nesse caso, é um
mouse conectado à porta PS/2
- Protocolo -> O protocolo do mouse
- Buttons -> Quantidade de botões
- ZAxisMapping -> Quais botões são utilizados para a rodinha.
Deu para ver que essa sintaxe é referente a um mouse que possui a
rodinha. Ele é um mouse com três botões, o da esquerda, a rodinha e o
da direita. Nós colocamos "Buttons" "5", para avisar que existem dois
botões "virtuais", o movimento da rodinha para cima e o movimento da
rodinha para baixo.
Se o seu mouse possuir 5 botões: o esquerdo, a rodinha, o direito e mais
dois laterais (por exemplo), você deve colocar "Buttons 7" se quiser usar
os dois botões laterais e mapear a rodinha para os botões 6 e 7. Esta é
a configuração que uso para um Dr.Hank nessas condições:
Section "InputDevice"
Identifier "Mouse1"
Driver "mouse"
Option "Device" "/dev/psaux"
Option "Protocol" "ExplorerPS/2"
Option "Buttons" "7"
Option "ZAxisMapping" "6 7"
EndSection
Vemos aí o protocolo diferente (ExplorerPS/2) e a mudança na quantidade
de botões e no mapeamento deles. Mas surge agora um novo problema, muitos
gerenciadores de janelas e programas por aí só mapeiam o movimento da
rodinha nos botões 5 e 6, o q fazer?
Uma solução seria simplesmente ignorar os últimos botões e colocar
"Buttons" "5" e "ZAxisMapping" "4 5". Mas, e se quisermos usar todos os
botões?
Simples, vamos "trocar" os botões do mouse de lugar! Vamos primeiro imprimir
como esses botões estão mapeados:
punk@rachael:~$ xmodmap -pp
There are 7 pointer buttons defined.
Physical Button
Button Code
1 1
2 2
3 3
4 4
5 5
6 6
7 7
Esse monte de coisas estranhas está dizendo: Olha, o botão 1 do mouse manda
o código do botão 1, o botão 2 manda o do 2 e por aí vai... Vamos mudar
essa tabela para que ele diga algo assim: O botão 1 manda o código 1, o 2
manda o 2, mas o 4 manda o código 6, o 5 manda o 7 e vice-versa. Confuso?
Não se preocupe, isso piora.
punk@rachael:~$ xmodmap -e "pointer = 1 2 3 6 7 4 5"
Pronto! Com isso trocamos os botões de lugar, perceba que ao invés do típico:
1 2 3 4 5 6 7, invertemos as posições do 6 com o 4 e do 5 com o 7. Essa nova
disposição faz com que quando usemos a rodinha (botões 6 e 7) o X entenda que
estamos usando os botões 4 e 5. E todos os programas que usam a rodinha do
mouse funcionam felizes -:)
Se mesmo assim a rodinha não funcionou, você pode trocar o protocolo que
está no xorg.conf por outro (ou até mesmo pelo "Auto" para poder descobrir
que raios de mouse é esse seu). Ah! Se a rodinha funcionou (e você precisou
do xmodmap) crie um arquivo .Xmodmap na sua área e coloque dentro dele o
comando que você enviou para o xmodmap. O meu está assim:
punk@rachael:~$ more .Xmodmap
keycode 113 = Mode_switch
keycode 47 = semicolon colon ccedilla Ccedilla
pointer = 1 2 3 6 7 4 5
Esse arquivo será lido sempre que você entrar no X. As configurações aqui
foram testadas em mouses da A4Tech (USB), MTek (USB e PS2), DrHank (PS2) e
Compaq (PS2) e Troni (PS2). Todos, menos o da Compaq, com rodinha. O da Troni,
mesmo tendo 5 botões e insistindo que é ExplorerPS2 não aceita a
configuração que indiquei, dois botões dele se comportam sempre como sendo
o botão 2 (botão do meio).
4.1. Dois mouses
Quem tem um notebook sabe o quanto aquela superfície que faz as vezes de
mouse enche o saco. Quem tem o mouse estilo "clitóris" entre o J e o K padece
mais ainda. É muito comum a pessoa ter um segundo mouse, externo, para passar
um pouco menos de raiva.
O que nem todo mundo sabe, é que dá para configurar dois mouses de modo
simultâneo. Assim, você pode continuar usando o mouse do seu notebook e um
mouse externo sem precisar ficar editando arquivos de configuração toda vez
que troca de mouse.
Antes de começar, os dois mouses devem acessar dispositivos diferentes, um
pode ser USB e outro PS/2, um Serial e um USB, um Serial e um PS/2 ou, até
mesmo, dois mouses USB.
A maior parte dos mouses embutidos em notebooks são PS2, então irei
considerar que o mouse "padrão" é um PS2 e o externo é um USB. Caso este não
seja o seu caso, basta usar um pouco a cabeça e adaptar as configurações.
Section "InputDevice"
Identifier "MousePadrao"
Driver "mouse"
Option "Device" "/dev/psaux"
Option "Protocol" "PS/2"
EndSection
Section "InputDevice"
Identifier "MouseExterno"
Driver "mouse"
Option "Device" "/dev/input/mice"
Option "Protocol" "IMPS/2"
Option "Buttons" "5"
Option "ZAxisMapping" "4 5"
Option "Resolution" "256"
EndSection
Estas são as entradas para os dois mouses. Nas entradas em si, não
existe nada que indique qual mouse é qual e o que eles estão fazendo,
isso é feito por outra seção no xorg.conf:
Section "ServerLayout"
Identifier "Simple Layout"
Screen "Screen 1"
InputDevice "MousePadrao" "CorePointer"
InputDevice "Keyboard1" "CoreKeyboard"
InputDevice "MouseExterno" "AlwaysCore"
EndSection
Pronto! As duas linhas que falam dos mouses fazem com que os dois sejam
"obedecidos". O MousePadrao é o "CorePointer" e o segundo Mouse envia dados
para ele. Agora você pode inclusive fazer uma "guerra" de mouses com cada um
puxando o mouse para um lado.
No segundo mouse (MouseExterno) existe uma opção "Resolution", ela informa
qual a resolução do mouse. Quanto maior a resolução, mais preciso o seu mouse.
Mexer nesse parâmetro altera a velocidade do mouse na tela, se você está
irritado com isso, esse é o bom lugar para mudar.
5. Conclusões
São algumas configurações simples para o mouse, mas que fazem toda a
diferença. Ainda existe muito o que falar sobre esse assunto, inclusive pela
quantidade de modelos e tipos de mouses que existem no mercado. Mas, este
artigo, já dá uma boa "introdução" ao assunto.
Ah! Eu sei que o plural de mouse é "mice", mas no documento preferi utilizar
mouses por que eu quis e pronto. Quaisquer outras dúvidas ou sugestões, o
e-mail é aquele de sempre:
piterpk@terra.com.br.
|