Configurando o Wiimote como um Gamepad clássico
O Nintendo Wii Remote (vulgo wiimote) é um dos meus gamepads preferidos para jogar emuladores de videogames antigos.
Por quê? Bom, ele usa bluetooth, provavelmente você tem um sobrando (se você teve um Wii), e se você segurá-lo na posição horizontal, ele imita um joystick 8-bit. E além dos botões 1
e 2
, ele tem outros botões, como A
, B
, Home
, +
and -
. Perfeito para jogar NES, Sega Master System, Sega Genesis, NeoGeo e outros que não precisem de mais botões.
XWiimote
Antigamente tínhamos vários programinhas oferecendo suporte ao wiimote no Linux (principalmente no Ubuntu), todos manipulando os eventos ao seu modo: CWiiD, Wiiuse, WiiCan e outros.
Alguns deles um tanto quanto abandonados, e nenhum usando a infra estrutura do Linux.
É onde o XWiimote se encaixa. De acordo com a página oficial:
XWiimote é um driver Linux de código aberto para o Nintendo Wii / Wii U Remote … que tenta substituir o cwiid, wiiuse e outros, integrando-se a infra estrutura existente do Linux.
xf86-input-xwiimote
O XWiimote é um driver puro: ele apenas lê os dados enviados pelo wiimote. Ou seja, ele não dá opções de configuração
Felizmente os mesmos autores criaram o xf86-input-xwiimote
, que é um driver X.Org sobre o xwiimote
, que permite várias configurações adicionais.
Instalação
Ambos os programas estão disponíveis na instalação padrão do Ubuntu 16.04 (Xenial).
Infelizmente, no 14.04 (Trusty), o pacote xwiimote
é uma versão velha e o xf86-input-xwiimote
não está disponível (porque usa o xwiimote
na versão 2). Eu tentei compilar o xwiimote
na versão 2 e o xf86-input-xwiimote
, mas este último não funcionou.
Então, se você está usando o Ubuntu 16.04 (Xenial) instale ambos:
sudo apt-get install xserver-xorg-input-xwiimote
Se você está no Ubuntu 16.04.1 ou superior e estiver tendo problemas com dependências quebradas, confira este post de como instalar corretamente.
Configuração
Agora vamos configurar o wiimote para agir como teclas do teclado quando os botões forem pressionados. Isso vai fazer com que ele funcione como qualquer programa que use o teclado como alternative de controle.
Usando sudo
(ou root
) edite o arquivo /usr/share/X11/xorg.conf.d/60-xorg-xwiimote.conf
, adicionando as linhas abaixo na seção Identifier "Nintendo Wii Remote"
:
Option "MapLeft" "KEY_DOWN"
Option "MapRight" "KEY_UP"
Option "MapUp" "KEY_LEFT"
Option "MapDown" "KEY_RIGHT"
Option "MapA" "KEY_A"
Option "MapB" "KEY_B"
Option "MapPlus" "KEY_EQUAL"
Option "MapMinus" "KEY_MINUS"
Option "MapHome" "KEY_ESC"
Salve as mudanças.
Seu arquivo 60-xorg-xwiimote.conf
agora vai ficar parecido com isso:
# X11 xorg xf86-input-xwiimote config
# Load correct xwiimote driver for all connected Nintendo Wii Remotes.
# Overwrite previous blacklist.
# We do not load the driver on unsupported extensions. This currently includes
# independent extension like classic-controller and pro-controller. Instead, the
# evdev driver is loaded (there is no way to negate InputClass Match* rules..)
Section "InputClass"
Identifier "Nintendo Wii Remote"
MatchProduct "Nintendo Wii Remote"
MatchDevicePath "/dev/input/event*"
Option "Ignore" "off"
Driver "xwiimote"
Option "MapLeft" "KEY_DOWN"
Option "MapRight" "KEY_UP"
Option "MapUp" "KEY_LEFT"
Option "MapDown" "KEY_RIGHT"
Option "MapA" "KEY_A"
Option "MapB" "KEY_B"
Option "MapPlus" "KEY_EQUAL"
Option "MapMinus" "KEY_MINUS"
Option "MapHome" "KEY_ESC"
EndSection
Section "InputClass"
Identifier "Nintendo Wii Remote Classic Controller Whitelist"
MatchProduct "Nintendo Wii Remote Classic Controller"
MatchDevicePath "/dev/input/event*"
Option "Ignore" "off"
Driver "evdev"
EndSection
Section "InputClass"
Identifier "Nintendo Wii Remote Pro Controller Whitelist"
MatchProduct "Nintendo Wii Remote Pro Controller"
MatchDevicePath "/dev/input/event*"
Option "Ignore" "off"
Driver "evdev"
EndSection
Reinicie o X.org
Você precisa reiniciar o X.org para que todas as configurações tenham efeito. Geralmente, no Ubuntu, reiniciar a sessão (fazer logout e login novamente) resolve.