Brincando com Mouse (Configure seu mouse de 99999 botões)

Iniciado por RickMura, 04 de Agosto de 2007, 23:46

tópico anterior - próximo tópico

RickMura

Retirei este texto de uma publicação da SlackZine, não alterei nada nele, só Ctrl-C / Ctrl=V, testei no meu pc e funcionou para um mouse comum 5 botões, ja para meu scrollball "Logitech" nem pensar, os botões não tem as funções que preciso.
Peço perdão ao Peter por não postar o link.



Brincando com Ratos
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, o que é bem útil para usuários
de notebooks.
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
(slackwarezine - 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.
• Seriais: entradas seriais: /dev/ttyS*
• PS/2: entrada PS2: /dev/psaux
• 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 um
utilitário como o mouseconfig, o que acaba facilitando
bastante a vida de quem está começando.
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 se
lembre-que o gpm ignora solenemente a rodinha do
mouse, apesar de suportar o protocolo utilizado por elas.
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", se estiver no X e não
souber o protocolo do seu mouse, utilize o protocolo
"Auto".
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
ATENÇÃO:
o mouseconfig não configura o mouse no X.
Repetindo, o mouseconfig NÃO configura o
mouse no X. Espalhem essa informação para
seus amigos e parentes.

Existem várias outras opções, mas a maior parte delas
não costuma ser utilizada. Se quiser conhecer quais as
outras opções do gpm, lembre de acessar a página de
manual desse comando. Ela é bem completa e
explicativa.
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, é
ummouse 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. Se fosse um
mouse com dois botões apenas, é interessante colocar a
opção para emular três botões:
Option "Emulate3Buttons" "On"
Com isso, é possível simular um terceiro botão
apertando simultaneamente os botões da direita e da
esquerda. Muito útil, já que a função de "colar" no X é
feita através do botão do meio (sim, o terceiro botão é o
do meio)
Voltando ao exemplo, mesmo o mouse tendo 3 botões,
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 -:)
Brincando com Ratos
DICA:
Se o seu mouse aparece no X e vai correndo para
o canto da tela, sozinho, isso significa que o
protocolo está errado, edite o xorg.conf e
troque-o para "MicroSoft"

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). Então preferi deixar
configurado com 5 botões mesmo.
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.
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.
Piter PUNK <piterpk@terra.com.br>
DICA:
Para inverter o mouse de um canhoto é só fazer
a mesma coisa, ao invés da ordem "normal" 1 2
3, coloque 3 2 1.
xmodmap -e "pointer = 3 2 1"
Brincando com Ratos
slackware
read the docs
and be happy.