
Como utilizar seu Joystick como Mouse!
Março 2, 2008Há um tempo eu comprei um joystick para aproveitar melhor minhas horas de diversão em frente ao computador.
Sei que um video-game normalmente seria uma melhor opção nestes casos, mas como gosto muito de jogos antigos, como os de Super Nintendo, percebi que seria melhor investir num bom joystick de computador mais um bom emulador.
Depois de achar “uma penca” de ROMS na Internet – oops – e passar horas e horas tentando passar mundo aquático do Donkey Kong 3 e o oitavo e último mundo do Super Mario 3 sem usar os poderzinhos, percebi que poderia dar uma utilidade melhor ao meu novo brinquedo.
Como o cabo do dispositivo é bem grande – somado à uma extensão USB – eu poderia muito bem utilizá-lo como mouse, e operar o computador no conforto da minha cama, além de não prejudicar tanto o meu pulso pelo uso constante do mouse.
A pergunta que me veio à cabeça era: “Como fazer isto?”
Depois de muito pesquisar no Gúgou e em manuais online, posto aqui um breve tutorial de como fazer a coisa funcionar.
Deixo claro já de início que você deverá ter algum conhecimento sobre configuração no Linux para realizar o tutorial, e que muitos vão odiar a solução e querer voltar para os braços do Windows.
Há pelo menos três métodos de realizar o processo:
- Se você for o Macgyver, basta um clip de papel, um cliclete de tuti-fruti mastigado por cinco minutos e um alicate de cuticulas. Com estas ferramentas, desmonte o joystick e, com as peças, construa um mouse. Com as que sobrarem, construa um tanque blindado.
- Se você for Chuck Norris, basta olhar feio para o joystick e dizer que ele é um mouse. Tiro e queda.
- O terceiro método – que utilizarei aqui, já que não sou nenhum dos dois caras acima – baseia-se na edição do arquivo /etc/X11/xorg.conf, para configurarmos o comportamento do joystick, através de um driver chamado “joystick”.
Vamos começar?
Primeiramente, devemos verificar qual é o dispositivo físico do seu joystick. No Linux, normalmente é o /dev/input/js0. No FreeBSD, NetBSD e OpenBSD provavelmente será /dev/uhid0.
O Joystick que eu tenho é um Foston parecido com um de Playstation, com um direcional, dois analógicos, quatro botões de ação, dois no meio (start e select?) e quatro na parte superior do dispositivo. Ele é conectado na entrada USB e é reconhecido pelo sistema pelo nome “DragonRise Inc. Generic USB Joystick”.
Segundo o manual do driver, qualquer joystick reconhecido pelo sistema operacional poderá ser utilizado como mouse.
Depois, temos que saber que protocolo utilizar na emulação do mouse, e quais botões serão ativados. Eu utilizei o ImPS/2, que é o mesmo que utilizo para meu mouse real.
Devemos saber também quais são os códigos dos botões do mouse. No protocolo ImPS/2, são eles:
1 – para o botão direito
2 – para o botão do meio
3 – para o botão esquerdo
4 – para a rodinha do mouse para abaixo
5 – para a rodinha do mouse para cima
Sabendo de tudo isso, abra, como root, o arquivo /etc/X11/xorg.conf, utilizando seu editor favorito.
Insira no final do arquivo o seguinte conteúdo:
Section "InputDevice"
Identifier "Meu Joystick USB"
Driver "joystick"
Option "Device" "/dev/input/js0"
Option "Buttons" "9"
Option "Protocol" "ImPS/2"
Option "SendCoreEvents" "true"
EndSection
Vamos analisar o que cada linha significa:
- Section “InputDevice” indica que iniciamos a sessão de configuração de um dispositivo de entrada.
- Identifier “Meu Joystick USB” indica como será identificado o dispositivo em questão.
- Driver indica que driver será utilizado para manipular o dispositivo
- Option “Device” “/dev/input/js0″ Indica qual é o dispositivo físico do joystick.
- Option “Buttons” “9″ Indica quantos botões de ação o seu joystick tem
- Option “Protocol” “ImPS/2″ indica o protocolo utilizado pelo joystick para emular o mouse.
- Option “SendCoreEvents” para definir o dispositivo como um gerador de eventos.
- EndSection finaliza a sessão de configuração do joystick.
Em seguida, adicione o dispositivo do seu Joystick na sessão ‘Section “ServerLayout”‘:
Section "ServerLayout"
(...) # Tente não mexer no que estava aqui
InputDevice "Meu Joystick USB"
EndSection
Feito isto, salve o arquivo e reinicie o servidor gráfico ou reinicie o computador.
Você já terá seu joystick funcionando como mouse. O direcional ou analógico 1 controlará a direção do ponteiro, e os outros botões utilizarão a configuração default.
Mas você vai ver que ele não está como você quer.
É possível configurar o comportamento de cada botão do joystick, de forma que, quando pressionado, eles possam ativar um botão do mouse ou mesmo um evento do teclado.
Para isso, insira a seguinte linha na mesma sessão de configuração do Joystick:
Option "MapButton1" "button=2"
Isto significa que o botão 1 do joystick disparará um evento equivalente ao botão 2 (botãodo meio) do mouse.
Insira uma linha para cada botão que quiser definir. O número máximo de botões do joystick é aquele definido na opção “Buttons”.
Com este comando também é possível atribuir eventos como os comandos do teclado às ações do joystick. Para isso, identifique qual evento do teclado você quer.
Por exemplo, se eu quiser o evento Alt-Esquerdo+F1 (normalmente o diálogo “Executar” do KDE), eu executo:
$ xmodmap -pk | grep -i ‘(Alt_L)’ ## para achar o código da tecla Alt da Esquerda (Left)
64 0xffe9 (Alt_L) 0xffe7 (Meta_L)
125 0×0000 (NoSymbol) 0xffe9 (Alt_L)
$ xmodmap -pk | grep -i ‘(F1)’ ## Para o código da tecla F1
67 0xffbe (F1) 0×1008fe01 (XF86_Switch_VT_1)
Tendo em mãos estas informações, insira na sessão de configuração do joystick o seguinte texto:
Option "MapButton2" "key=64,67"
Isto fará o botão de número 2 do joystick disparar as teclas Alt-Esquerdo+F1. Os números 64 e 67 são, respectivamente, os códigos das teclas Alt-Esquerdo e F1, obtidas pelo primeiro campo dos comandos executados acima.
Faça isto para quais botões quiser, a seqüencia de teclas que quiser.
Mais informações sobre estas configurações, consulte o manual do joystick:
No Slackware 12:
$ man 4x joystick
Se não funcionar, tente:
$ man 4 joystick
Para saber qual número corresponde cada botão do joystick, acesse a sessão de configuração do dispositivo no Centro de Controle do KDE:
$ kcmshell joystick
Ou, dentro do Centro de Controle (kcontrol), acesse Periféricos >> Joystick.
Tá legal. Eu já consigo disparar eventos do mouse e teclado com o meu controle de video-game. Mas ainda tenho que ficar preso ao computador, justamente por precisar do teclado para digitar. Sou pobre; não tenho um teclado sem fio ;-)
Para resolver tal problema, que tal um teclado virtual, que pudesse ser utilizado pelo joystick/mouse?
Um programa do tipo que eu achei muito interessante foi o Kvkbd, um teclado virtual para o KDE. Ele pode ser obtido no site KDE-Apps:
A instalação dele é padrão, com os habituais “./configure && make && make install”, mas é bem possível que você ache o programa nos repositórios da sua distribuição. Quem quiser um pacote para o Slackware 12, pode me pedir que eu mando por e-mail ;-)
Para não ter que iniciar manualmente o programa com o teclado, mapeei um botão do joystick para ativá-lo:
# Teclado Virtual (Alt+Super+K)
Option "MapButton11" "key=64,115,45"
Em seguida, configuro o KDE para lançar o programa kvkbd com a seqüencia de teclas Alt+Super+K. Para isso, acesse o Centro de Controle, “Regional & Acessibilidade” >> “Atalhos de Teclado”. Na aba “Atalhos de Comando”, localize a entrada “Utilitários” >> “Kvkbd”. Em seguida, pressione o botão “Nenhum”. Na janela que abrir, pressione juntas as teclas Windows (conhecido como – bleh – tecla Windows), Alt e K. Clique em aplicar e feche o Centro de Controle.
Também é possível fazer isto acessando o menu principal, localizando a entrada do comando, clicando com o botão direito nele e escolhendo “Editar Item”.
Agora, sempre que aperto o botão 11 (o centro do primeiro analógico) do joystick, é ativado o teclado virtual!
Mas é claro que nem tudo na vida são flores. Infelizmente este método traz alguns problemas. O principal deles é quando você tenta utilizar algum programa que utiliza o mouse e o joystick (jogos?), os comandos dos dois dispositivos são misturados, já que o programa não saberá de onde veio o sinal.
Atualizado: Existe um modo de fazer o o joystick parar de enviar tanto sinais do teclado quanto do mouse dinamicamente. Para isso, defina um botão (aquele que programa algum usa) como chave liga/desliga. No caso, utilizarei o 9.
Option "MapButton9" "disable-mouse"
Assim, toda vez que apertar o botão 9 do joystick, este parará ou começará, conforma o caso, a enviar os sinais de mouse. As possíveis opções são:
- disable-mouse para desabilitar as ações como mouse;
- disable-keys para desabilitar os sinais de teclado;
- disable-all para desabilitar tanto os sinais de teclado quanto de mouse.
Se você ficou com alguma dúvida, pegue como referência o arquivo xorg.conf que eu utilizo. A falta de identação é culpa do editor do WordPress, que “come” os primeiros caracteres vazios de cada linha ;-(
## Arquivo de configuração do Xorg
#
# O básico foi criado pelo dpkg-configure, da época que utilizei
# o Kubuntu
# Mas não funciona muito bem no Slackware, tanto que estou o modificando-o
#
## Aqui vão os locais onde guardo as fontes
Section "Files"
Fontpath "/usr/share/fonts/misc"
Fontpath "/usr/share/fonts/cyrillic"
Fontpath "/usr/share/fonts/100dpi/:unscaled"
Fontpath "/usr/share/fonts/100dpi"
Fontpath "/usr/share/fonts/75dpi"
# path to defoma fonts
#Fontpath "/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType"
#
#
RgbPath "/usr/share/X11/rgb"
ModulePath "/usr/lib/xorg/modules"
FontPath "/usr/share/fonts/TTF"
FontPath "/usr/share/fonts/OTF"
FontPath "/usr/share/fonts/Type1"
FontPath "/usr/share/fonts/misc"
FontPath "/usr/share/fonts/75dpi/:unscaled"
EndSection
#
# Módulos carregados na inicialização do servidor X
Section "Module"
Load "i2c"
Load "bitmap"
Load "ddc"
Load "extmod"
Load "freetype"
Load "glx"
Load "int10"
Load "vbe"
EndSection
#
## Dispositivos de entrada
#
## Um teste com o Joystick
Section "InputDevice"
#
# Nome interno do Joystick
Identifier "Joystick Foston"
#
# Driver utilizado para o joystick
Driver "joystick"
#
# Onde está o Joystick?
Option "Device" "/dev/input/js0"
#
# Configuração dos analógicos...
#
# Direita-esquerda
Option "MapAxis1" "mode=accelerated axis=+2.5x"
#
# e Cima-Baixo
Option "MapAxis2" "mode=accelerated axis=+2.5y"
#
#
#
#
# Número de botões que o joystick tem
Option "Buttons" "12"
#
# Protocolo utilizado para o mouse de mentira
Option "Protocol" "ImPS/2"
#
# Sabe que não sei pra que serve esta opção?! ;-)
Option "SendCoreEvents" "true"
#
#
#
#### Configuração dos Botões do Joystick
#
## Botão Direito do Mouse
Option "MapButton3" "button=1"
#
# Botão do meio
Option "MapButton1" "button=2"
#
# Botão Esquerdo
Option "MapButton4" "button=3"
#
# Rodinha do mouse para baixo
Option "MapButton6" "button=4"
#
# Rodinha do mouse para baixo
Option "MapButton5" "button=5"
#
# Alt+Tab
Option "MapButton7" "key=64,23"
#
# Alt+Shift+Tab
Option "MapButton8" "key=64,50,23"
#
# Teclado Virtual (Alt+Super+K)
Option "MapButton11" "key=64,115,45"
#
# Chamar o Yakuake (Super+K)
Option "MapButton12" "key=115,45"
#
# Tecla Enter
Option "MapButton10" "key=36"
#
# Tecla Esc
Option "MapButton2" "key=9"
#
#
EndSection
#
# Teclado
Section "InputDevice"
Identifier "Teclado ABNT2"
Driver "kbd"
Option "CoreKeyboard"
Option "XkbRules" "xorg"
Option "XkbModel" "abnt2"
Option "XkbLayout" "br"
EndSection
#
# Mouse PS/2
Section "InputDevice"
Identifier "Mouse Dr Hank"
Driver "mouse"
Option "CorePointer"
Option "Device" "/dev/input/mice"
Option "Protocol" "ImPS/2"
Option "ZAxisMapping" "4 5"
Option "Emulate3Buttons" "true"
EndSection
#
# Placa de vídeo nVidia
Section "Device"
Identifier "nVidia Corporation NV18 [GeForce4 MX 4000]"
Driver "nvidia"
## Adicionado para o compiz
Option "RenderAccel" "true"
Option "AllowGLXWithComposite" "true"
## FIM ##
Busid "PCI:1:0:0"
Option "AddARGBVisuals" "True"
Option "AddARGBGLXVisuals" "True"
Option "NoLogo" "True"
EndSection
#
# Monitor LCD
Section "Monitor"
Identifier "LG L192WS"
Option "DPMS"
EndSection
#
# Tela principal (monitor+placa de vídeo)
Section "Screen"
Identifier "Tela Principal"
Device "nVidia Corporation NV18 [GeForce4 MX 4000]"
Monitor "LG L192WS"
Defaultdepth 24
#
#Adicionado pelo nvidia-config
Option "metamodes" "1440x900_75 +0+0; 1440x900 +0+0"
#
SubSection "Display"
Depth 24
Modes "1440x900"
EndSubSection
#
#
Option "AddARGBGLXVisuals" "true"
Option "DisableGLXRootClipping" "true"
EndSection
#
# Sistema principal (Tela+Monitor+Teclado+Mouse)
Section "ServerLayout"
Identifier "Layout Principal"
screen "Tela Principal"
InputDevice "Joystick Foston"
Inputdevice "Teclado ABNT2"
Inputdevice "Mouse Dr Hank"
EndSection
#
Section "DRI"
Mode 0666
EndSection
#
Section "Extensions"
Option "Composite" "Enable"
EndSection
Section "ServerFlags"
Option "DontZap"
#Option "DontVTSwitch"
Option "DontZoom"
EndSection
Referência:
- Manual do driver joystick: $ man 4x joystick
- Manual do arquivo xorg.conf: $ man xorg.conf
- Tópico sobre o assunto no fórum do Ubuntu.
E se você ainda tiver o alicate de cuticulas, aproveite para fazer as unhas… hauahauhaua






[...] por Leandro Santiago (leandrosansilvaΘgmail·com) – referência [...]
Nossa cara…muito bom o tutorial, eu nem tinha pensado em fazer isso ainda….depois vou testar com o meu volante xD
haha boa cara… bom humor tmb ^^
paranbes pelo tuto =D
[...] Vi este artigo no BR-Linux: Como utilizar seu Joystick como Mouse! [...]
A solução do meus problemas estou montando um media center la em casa e estava com problemas para controlar a distancia a maquina. Esse tutorial vai me ajudar muito. Soh queria saber se irá funcionar com esse controle:
http://produto.mercadolivre.com.br/MLB-70022828-controle-joypad-vibration-sem-fio-leadership-usb-pc-ps2-_JM
ow boa essa idéi
mas hum….
da pra rezumi tudo issu ?
to com preguisa de ler
me add no msn eric_pandinha@hotmail.com
AMIGO COMO POSSO UTILIZAR O JOYSTICK EM JOGOS NINTENDO Ñ ESTOU CONSEGUINDO UTILIZAR POIS O MANUAL DIZ QUE ELE SO SE UTILIZA NA OPÇAO JOYPAD ; NEM SEI OQ É ISSO; SE A UMA MANEIRA DE FAZER ELE FUNCIO NAR NESSES JOGOS ANTIGOS OBRIGADO
KRA SERA QUE DA PRA ME AJUDAR ESTOU LOCO P/ UTILIZAR O JOYSTICK NO PC P/ JOGOS DO SUPER NINTENDO MAS PARECE QUE Ñ TEM JEITO ME AJUUUUUUDE AXE UMA SOLUÇAO VALEU
pôh, num tem geito de fazer isso no windows não???
“Poizé” Luiz, não faço a mínima idéia de como proceder no Windows :-(
Daí kra. Vc teria como conseguir para mim os drivers prá esse joystick?
No Linux funfa blz, mas no Ruindow$$$ fica sem o force feedback.
Um abraço!!
Amigo! é possível usar o joystick tambem no windows, isso seria a solução definitiva pra minha ler pois não consigo usar o dedo indicador nemomédio da mão direita mais é só do agora.