Ao tentar jogar no
Xbox Cloud, percebi que meu controle genérico de PS2 não funcionava direito. Vários botões estavam trocados, e era impossível jogar, nem dava para selecionar os menus do jogo.
Para quem quiser testar o Xbox Cloud, pode acessar:
Seu computador pode ser fraco e rodará os jogos mais exigentes. Pois o processamento não ocorre localmente e sim na nuvem. Não precisa instalar nada, tudo roda no navegador. Funciona como "Netflix" de jogos. Você paga um valor mensal e joga por "streaming" os jogos disponíveis.
Um dos meus controles genérico de PS2 é este:
Totalmente funcional. Por exemplo, ao usar ele no emulador PCSX2 (de PS2), não preciso realizar nenhuma configuração ou remapear botões. Funciona automaticamente.
Também experimentei o
GeForce NOW, que é semelhante ao Xbox Cloud, mas vi que tem menos jogos que o Xbox Cloud. A vantagem é que você pode sincronizar sua conta Steam e jogar no GeForce NOW sem ter que recomprar os jogos. Também notei diferença entre os botões no jogo Dead Cells do GeForce NOW, parecia que exigia controle de Xbox.
Botões funcionavam, mas estavam desconfigurados.
O que entendi foi: o Xbox Cloud esperava um controle de Xbox e, por algum motivo, os botões do controle genérico não "batem" com os botões do controle de Xbox. Uma solução simples seria comprar um controle de Xbox One. Mas, eu tenho um controle bom aqui! Só precisaria achar uma maneira de configurar para que o sistema "pensasse" que era um de Xbox, com botões remapeados.
Tentei usando o
AntiMicroX, mas não funcionou. Dá para remapear para teclas do teclado, mas não era o que eu queria.
Por fim, só consegui resolver o problema com o "xboxdrv" e alguns comandos. Esta dica funciona para o Xbox Cloud e para jogos da Steam (como no caso do Dead Cells que citei).
Dica testada no Debian Testing.
Procedimento
Instale o
xboxdrv:
sudo apt install xboxdrv evtest
O
evtest é um programa de linha de comando que pode ser usado para testar e debugar dispositivos de entrada, como teclados, mouses e touchpads. E o xboxdrv é um driver de controle de Xbox para
Linux.
Liste todos os eventos:
sudo ls /dev/input/ | grep event*
O comando "ls" lista os arquivos em um determinado diretório, neste caso o diretório /dev/input. O comando "grep" procura um padrão de texto em um arquivo ou conjunto de arquivos, neste caso a string "event". O sinal de asterisco é um caractere curinga que representa qualquer número de caracteres. Portanto, este comando está procurando por todos os arquivos no diretório /dev/input que comecem com "event".
Verá uma lista parecida com esta:
event0
event1
event10
event11
event12
event13
event14
event15
event16
event17
event18
event19
event2
event20
event3
event4
event5
event6
event7
event8
event9
Um deles é o seu controle de PS2 genérico. Precisa testar um por um até encontrá-lo.
Para realizar o teste use o comando:
sudo evtest /dev/input/event
E pressione algum botão no controle de PS2. Se obter alguma resposta, significa que achou. Se não tiver resposta, pressione Ctrl+C para encerrar e teste o próximo número.
Exemplo de teste para o evento 7:
sudo evtest /dev/input/event7
O comando "evtest" é usado para monitorar os eventos de um dispositivo de entrada. No exemplo acima, "/dev/input/event7" é o caminho para o arquivo de evento do dispositivo de entrada especificado.
O meu PS2 era mesmo o número 7.
Mapeando
Após encontrar o seu controle com o evtest, perceberá que toda vez que pressionar um botão, receberá uma mensagem.
Exemplo ao pressionar o botão 3 (que seria o X no PS e o A no Xbox):
Event: time 1664677651.665845, type 4 (EV_MSC), code 4 (MSC_SCAN), value 90003
Event: time 1664677651.665845, type 1 (EV_KEY), code 290 (BTN_THUMB2), value 1
Event: time 1664677651.665845, -------------- SYN_REPORT ------------
Event: time 1664677651.753844, type 4 (EV_MSC), code 4 (MSC_SCAN), value 90003
Event: time 1664677651.753844, type 1 (EV_KEY), code 290 (BTN_THUMB2), value 0
Event: time 1664677651.753844, -------------- SYN_REPORT ------------
Como poder ver, esse é, na verdade, no botão identificado como "BTN_THUMB2".
Faça isso com TODOS os botões e anote os nomes de cada um. Incluindo os analógicos, e associe cada um deles com os respectivos nomes dos botões do Xbox!
Use a imagem como guia:
E os comandos:
xboxdrv --help-abs
xboxdrv --help-button
xboxdrv --help-axis
Para ver os nomes.
Porém, já deixo aqui o comando com as teclas remapeadas (para o evento 7):
sudo xboxdrv --evdev /dev/input/event7 --evdev-absmap ABS_X=x1,ABS_Y=y1,ABS_RZ=x2,ABS_Z=y2,ABS_HAT0X=dpad_x,ABS_HAT0Y=dpad_y --axismap -Y1=Y1,-Y2=Y2 --evdev-keymap BTN_TOP=x,BTN_TRIGGER=y,BTN_THUMB2=a,BTN_THUMB=b,BTN_BASE3=back,BTN_BASE4=start,BTN_BASE=lt,BTN_BASE2=rt,BTN_TOP2=lb,BTN_PINKIE=rb,BTN_BASE5=tl,BTN_BASE6=tr --mimic-xpad
Mas altere o número 7 (em /dev/input/event7) para o SEU evento, do seu controle.
Após executar, o controle de PS2 já estará remapeado para servir como um de Xbox.
O xboxdrv suporta vários controles, mas eles precisam ser configurados em "/etc/default/xboxdrv". Para cada controlador extra, adicione uma linha "next-controller = true". Por exemplo, ao usar 2 controles, adicione 1 vez:
[xboxdrv]
silent = true
next-controller = true
[xboxdrv-daemon]
dbus = disabled
Script
Tenho DOIS controles agora, um KTS e um Ketchup. Fiz um script que configura ambos automaticamente, mesmo que o número do event mude. Ao usar o script para sua realidade, altere apenas os nomes dos dispositivos. Verifique com:
cat /proc/bus/input/devices
Segue o script:
#!/bin/bash
cat /proc/bus/input/devices > arquivo.txt
# Detect event do Gamepad (KTS)
while read p; do
if [[ $p == *"Gamepad"* ]]; then
echo "Gamepad"
FOUND=1
fi
if [[ $p == H:* && $FOUND -eq 1 ]]; then
EVENT_GAMEPAD=$(echo $p | cut -d " " -f 3)
FOUND=0
echo $EVENT_GAMEPAD
fi
done < arquivo.txt
# Detect event do Joystick (Ketchup)
while read p; do
if [[ $p == *"Joystick"* ]]; then
echo "Joystick"
FOUND=1
fi
if [[ $p == H:* && $FOUND -eq 1 ]]; then
EVENT_JOYSTICK=$(echo $p | cut -d " " -f 3)
FOUND=0
echo $EVENT_JOYSTICK
fi
done < arquivo.txt
# kill xboxdrv
sudo killall xboxdrv
#Ketchup
sudo xboxdrv --evdev /dev/input/$EVENT_JOYSTICK --evdev-absmap ABS_X=x1,ABS_Y=y1,ABS_RZ=y2,ABS_Z=x2,ABS_HAT0X=dpad_x,ABS_HAT0Y=dpad_y --axismap -Y1=Y1,-Y2=Y2 --evdev-keymap BTN_TOP=x,BTN_TRIGGER=y,BTN_THUMB2=a,BTN_THUMB=b,BTN_BASE3=back,BTN_BASE4=start,BTN_BASE=lb,BTN_BASE2=rb,BTN_TOP2=lt,BTN_PINKIE=rt,BTN_BASE5=tl,BTN_BASE6=tr --mimic-xpad --silent &
#KTS
sudo xboxdrv --evdev /dev/input/$EVENT_GAMEPAD --evdev-absmap ABS_X=x1,ABS_Y=y1,ABS_RZ=x2,ABS_Z=y2,ABS_HAT0X=dpad_x,ABS_HAT0Y=dpad_y --axismap -Y1=Y1,-Y2=Y2 --evdev-keymap BTN_TOP=x,BTN_TRIGGER=y,BTN_THUMB2=a,BTN_THUMB=b,BTN_BASE3=back,BTN_BASE4=start,BTN_BASE=lb,BTN_BASE2=rb,BTN_TOP2=lt,BTN_PINKIE=rt,BTN_BASE5=tl,BTN_BASE6=tr --mimic-xpad --silent &
Obs.: as configurações diferem no segundo analógico, porque por algum motivo, se eu usar a mesma configuração, o analógico de um deles fica invertido. Deve ser uma característica da marca. Então o remapeamento de ambos difere em RZ e ABS_Z. O Ketchup usa "RZ=y2,ABS_Z=x2" e o KTS usa "RZ=x2,ABS_Z=y2".
Após configurar seus controles, pode usar o AntiMicroX para visualizar e testar:
Se souber uma maneira mais simples, por favor deixe um comentário.
Fontes: