Configurando controle genérico de PS2 como controle de Xbox

Veja como configurar seu controle genérico de PlayStation 2 para que o sistema "pense" que é um controle de Xbox. Necessário para algumas situações, devido compatibilidade.

[ Hits: 16.878 ]

Por: Xerxes em 17/11/2022


Introdução



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:
   

Páginas do artigo
   1. Introdução
Outros artigos deste autor

Todos os atalhos do Cinnamon

Distros para quem ama a liberdade

Flatpak: usar ou não usar?

Acesso remoto pela Internet de forma simples usando TeamViewer

Entendendo o boot-update

Leitura recomendada

Visualizando informações sobre o sistema

Introdução ao Shell

Principais Ambientes Gráficos

Formatar para Linux

Linux, uma história sem fim!

  
Comentários
[1] Comentário enviado por fabio em 17/11/2022 - 12:29h

Eu assino o Xbox Cloud e não fazia ideia de que ele funcionava no Linux kkk. Acabei de testar aqui, muito bom!

[2] Comentário enviado por maurixnovatrento em 20/11/2022 - 09:45h


Hoje em dia quase tudo é compatível com o linux. Só falta a microsoft portar o office deles praticamente.
Excelente artigo.

___________________________________________________________
Conhecimento não se Leva para o Túmulo.
https://github.com/mxnt10


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts