Como reorganizar os gamepads?

4

Estou procurando uma maneira de reorganizar meus gamepads. O que quero dizer é que tenho vários gamepads conectados ou sem fio e eles são afetados para / dev / input / js0 (Player 1), / dev / entrada / js1 (Player 2), ect. e eu quero ser capaz de dizer que um gamepad se torna / dev / input / js0 (Player 1) e ele mudaria de posição com o outro gamepad (como no PS3).

Existe uma maneira com um utilitário ou uma linha de comando para fazer isso?

    
por Nyamiou The Galeanthrope 09.03.2016 / 01:14

2 respostas

0

nenhuma maneira de altere os nomes dos dispositivos no diretório / dev . Talvez isso não esteja definido para dispositivos de entrada como gamepads. Eu não posso testar isso porque não tenho gamepads ao redor.

Mas isso será necessário para sua abordagem. Então, a primeira resposta é: é impossível.

A segunda resposta é mais uma sugestão para uma maneira que pode ajudá-lo a lidar com sua ideia:

Como você pode atribuir links simbólicos a dispositivos usando regras do udev, talvez você possa lidar com isso dessa maneira. Vou explicar isso por meio de um usb-stick.

O que fazemos é: - Disconnect the usb stick using a command - create a temporary rule for assigning a symlink - Reconnect the usb stick using a command - delete the temporary rule

Para o fundo, leia estes artigos: udev , sobre as regras do udev , Autorizando dispositivos USB e acesso ao echo sudo negado

Como pré-requisito, precisamos de algumas informações sobre o stick usb de segmentação. Remova o bastão e execute o comando

udevadm monitor

Conecte o bastão a uma grande quantidade de informações na tela. Eu extraio o caminho do dispositivo no barramento usb da primeira linha de saída:

add      /devices/pci0000:00/0000:00:1d.0/usb4/4-1/4-1.1 (usb)
                                                   ^^^^^

Com esta informação, execute o comando

udevadm test /sys/bus/usb/devices/4-1.1
                                  ^^^^^

Mais uma vez, há muita saída. Estamos interessados em

ID_SERIAL_SHORT=08606E5EDA173E6D3F37746D

Este é um número serial exclusivo para o dispositivo usb.

Agora vamos dar a este stick um link simbólico.

Primeiro, temos que desconectar o nosso pendrive:

echo 0 | sudo tee /sys/bus/usb/devices/4-1.1/authorized > /dev/null

Agora criamos uma regra temporária para o udev:

echo "KERNEL==\"sd?1\", SUBSYSTEMS==\"usb\", ATTRS{serial}==\"08606E5EDA173E6D3F37746D\", SYMLINK+=\"myusb300\"" | sudo tee /etc/udev/rules.d/90-tmp-001.rules > /dev/null

O próximo passo é reconectar o pen drive:

echo 1 | sudo tee /sys/bus/usb/devices/4-1.1/authorized > /dev/null

Agora você encontra um link simbólico / dev / myusb300 para / deb / sdb1

A ideia por trás de tudo isso é que, mesmo que você não possa renomear /dev/js0 , você pode criar links simbólicos, ou seja, /dev/js10 , para o controlador do gamepad. Esses links simbólicos podem ser trocados, apenas no fly ou por meio de desconexão programática e reconectar o controlador. O aplicativo (o jogo) deve ser configurado para usar os gamepads / dev / js10, / dev / js11 e assim por diante.

Nos números de série exclusivos dos gamepads, você pode sempre atribuir um link simbólico específico a um gamepad escolhido.

Talvez seja possível encontrar mais possibilidades de lidar com o udev. Isso depende não apenas da solução concreta que você está procurando, mas também da aplicação, dos controladores e de outras coisas.

    
por cmks 14.03.2016 / 00:21
0

ok, não é uma solução completa, mas estou meio aborrecido com o "Não há como fazer isso", não faz sentido.

Bem aqui:

$ sudo mknod /dev/lol b 8 0
$ ls -l /dev/lol
brw-r--r-- 1 root root 8, 0 Mar 15 15:51 /dev/lol
$ sudo rm  /dev/lol
$ ls -l /dev/lol
ls: cannot access /dev/lol: No such file or directory

que diz criar um dispositivo de bloco, com maior número 8, menor número 0, chamado / dev / lol. ls nos mostra que é um dispositivo de bloco. Então, eu apaguei.

o que precisamos saber sobre o seu dispositivo é o tipo: (caractere ou bloco), permissões, tipo de entrada que ele espera e tal. Com o dispositivo conectado, $ls -l /dev/input/js0 nos dirá mais do que isso. Não nos dirá se espera dados cozidos ou crus. Atualize sua pergunta com esses detalhes e tentarei escrever um script ou algo para resolver o problema. Potência fundamental necessária.

Além disso, com os controladores conectados, mostre a saída de $lsusb

(Estou assumindo que cada dispositivo é conectado primeiro, é enumerado / dev / input / js0 e que o software não está fazendo coisas bobas como enumerar explicitamente controladores específicos como arquivos de dispositivos específicos)

    
por j0h 15.03.2016 / 21:02

Tags