Como utilizar seu Joystick como Mouse!

Há 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 0x0000 (NoSymbol) 0xffe9 (Alt_L)

$ xmodmap -pk | grep -i ‘(F1)’ ## Para o código da tecla F1
67 0xffbe (F1) 0x1008fe01 (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.

Atalho

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!

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

Anúncios

18 Comments

  1. Posted março 3, 2008 at 17:52 | Permalink

    Nossa cara…muito bom o tutorial, eu nem tinha pensado em fazer isso ainda….depois vou testar com o meu volante xD

  2. Rafael Lorena
    Posted março 3, 2008 at 23:00 | Permalink

    haha boa cara… bom humor tmb ^^
    paranbes pelo tuto =D

  3. Tony
    Posted março 4, 2008 at 16:38 | Permalink

    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

  4. Erick
    Posted outubro 5, 2008 at 3:33 | Permalink

    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

  5. Posted dezembro 15, 2008 at 11:29 | Permalink

    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

  6. Posted dezembro 15, 2008 at 11:31 | Permalink

    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

  7. Posted dezembro 15, 2008 at 18:03 | Permalink

    pôh, num tem geito de fazer isso no windows não???

  8. Posted dezembro 15, 2008 at 20:40 | Permalink

    “Poizé” Luiz, não faço a mínima idéia de como proceder no Windows :-(

  9. Fisher
    Posted abril 29, 2009 at 19:48 | Permalink

    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!!

  10. Jorge Santos
    Posted junho 15, 2009 at 16:12 | Permalink

    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.

  11. tio sam
    Posted dezembro 24, 2009 at 0:57 | Permalink

    Pra que essa treta , tem programa pra isso xP

  12. Chuck norris
    Posted julho 7, 2010 at 15:21 | Permalink

    eu sou o chuck norris e não precisei nem olhar para o joystick eu virei e falei : vou contar até 3 e se vc n virar 1 mouse não vai existir e pronto…

    xD: eu não sou o chuck norris(é claro) add no msn / orkut: marceloalvesdelima@hotmail.com

    Ok????

  13. Posted outubro 16, 2010 at 15:50 | Permalink

    Amigo, eu queria usar o direcional como se fossem as setas do teclado e deixar o mouse só com analógicos, mas não tô conseguindo, tem ideia de como fazer?

  14. Posted outubro 16, 2010 at 15:58 | Permalink

    Moleza, já descobri no manual do joystik
    segue as opções:

    #### Setas
    #### Direita-esquerda Cima-Baixo
    Option “MapAxis5” “mode=accelerated keylow=113 keyhigh=114”
    Option “MapAxis6” “mode=accelerated keylow=111 keyhigh=116”

  15. suzy
    Posted janeiro 7, 2011 at 21:49 | Permalink

    vou escolher a opção do MACGYVER , por que as outras estão muito mais dificeis……

  16. Marcos
    Posted abril 11, 2011 at 4:32 | Permalink

    Não entendi NADA!

  17. Ricassio Sartes
    Posted janeiro 23, 2013 at 14:26 | Permalink

    de breve esse tutorial não tem nada

  18. Johnb4
    Posted maio 26, 2014 at 23:42 | Permalink

    I have not checked in here for a while since I thought it was getting boring, but the last few posts are good quality so I guess I’ll add you back to my daily bloglist. You deserve it my friend dkdecdfdkcca

2 Trackbacks

  1. […] por Leandro Santiago (leandrosansilvaΘgmail·com) – referência […]

  2. […] Vi este artigo no BR-Linux: Como utilizar seu Joystick como Mouse! […]

Comente

Required fields are marked *

*
*

%d blogueiros gostam disto: