Piter Punk's HomePage - Artigos
 
English version
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:

	[email protected]:~$ 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:

	[email protected]:~$ 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.

	[email protected]:~$ 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:

	[email protected]:~$ 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: [email protected].


Links Principal Artigos Piter Punk Dicas Programas
 
Powered by Slackware Linux - Written in VIm (the best one!) Last Update: 30 Oct 2004