Как изменить порядок геймпадов?

Я ищу способ изменить порядок моих геймпадов. Я имею в виду, что у меня есть несколько подключенных или беспроводных геймпадов, и на них влияют /dev/input/js0 (Player 1), /dev/input/js1 (Player 2) и т. Д. и я хочу быть в состоянии сказать, что один геймпад стал / dev / input / js0 (Player 1), и он будет менять положение с другим геймпадом (как на PS3).

Есть ли способ с помощью утилиты или командной строки, чтобы сделать это?

2 ответа

Нет возможности изменить имена устройств в каталоге /dev. Может быть, это не для устройств ввода, таких как геймпады. Я не могу проверить это, потому что у меня нет геймпадов вокруг.

Но это будет необходимо для вашего подхода. Итак, первый ответ: это невозможно.

Второй ответ - это скорее подсказка, которая поможет вам разобраться с вашей идеей:

Поскольку вы можете назначать символьные ссылки устройствам, используя правила udev, возможно, вы можете справиться с этим таким образом. Я объясню это с помощью USB-флешки.

Что мы делаем, это: - 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

Для справки прочитайте следующие статьи: udev, о правилах udev, авторизации USB-устройств и отказе в доступе sudo echo

В качестве обязательного условия нам нужна информация о USB-флеш-таргетинге. Выньте флешку и выполните команду

udevadm monitor

Подключите флешку, и вы получите много информации на экране. Я извлекаю путь устройства на шине USB из первой строки вывода:

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

С этой информацией запустите команду

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

Опять же, есть много выхода. Мы заинтересованы в

ID_SERIAL_SHORT=08606E5EDA173E6D3F37746D

Это уникальный серийный номер usb-устройства.

Теперь давайте дадим этой ссылке символическую ссылку.

Сначала мы должны отключить нашу флешку:

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

Теперь мы создаем временное правило для udev:

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

Следующим шагом является повторное подключение флешки:

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

Теперь вы найдете символическую ссылку /dev/myusb300 на /deb/sdb1

Смысл всего этого в том, что даже если вы не можете переименовать /dev/js0, вы можете создавать символические ссылки, т.е. /dev/js10, к контроллеру геймпада. Эти символические ссылки можно поменять, просто на лету или путем программного отключения и переподключения контроллера. Само приложение (игра) должно быть настроено на использование геймпадов /dev/js10, /dev/js11 и т. Д.

По уникальным серийным номерам геймпадов вы всегда можете назначить конкретную символическую ссылку на выбранный геймпад.

Возможно, можно найти больше возможностей, связанных с udev. Это зависит не только от конкретного решения, которое вы ищете, но также от приложения, контроллеров и других вещей.

Хорошо , это не полное решение, но я немного раздражен из-за бессмысленности "нет никакого способа сделать это".

Прямо здесь:

$ 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

в котором говорится, что создайте блочное устройство, с большим номером 8, второстепенным номером 0, с именем /dev/lol. ls показывает нам, что это блочное устройство. Затем я удалил его.

Что нам нужно знать о вашем устройстве, это тип: (символ или блок), разрешения, тип ввода, который он ожидает, и тому подобное. С подключенным устройством,
$ls -l /dev/input/js0 расскажет нам большую часть этого. Это не скажет нам, если это ожидает приготовленные или сырые данные. Обновите ваш вопрос этими деталями, и я постараюсь написать сценарий или что-то, что решит проблему. Коренная сила требуется.

Кроме того, с подключенными контроллерами, показать вывод $lsusb

(Я предполагаю, какое устройство подключено первым, получает перечисление /dev/input/js0 и что программное обеспечение не делает глупых вещей, таких как явное перечисление определенных контроллеров в виде конкретных файлов устройства)

Другие вопросы по тегам