Как изменить порядок геймпадов?
Я ищу способ изменить порядок моих геймпадов. Я имею в виду, что у меня есть несколько подключенных или беспроводных геймпадов, и на них влияют /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 и что программное обеспечение не делает глупых вещей, таких как явное перечисление определенных контроллеров в виде конкретных файлов устройства)