banner

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 problema: o XWiimote é um driver puro. Ele não se importa em como você vai usar o wiimote. Em outras palavras: se você quiser usar o wiimote como um gamepad clássico, não vai funcionar.

Para esse propósito vamos usar o xf86-input-xwiimote, que é um driver X.Org para o wiimote que usa o XWiimote como base.

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 xwiimote xserver-xorg-input-xwiimote

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.