Я наконец понял, что могу использовать песочницу для достижения этой цели. Конкретно пожарная тюрьма. Я придумал команду, которая только блокирует hidraw-устройства (которая включает в себя все контроллеры Bluetooth и как Steam обнаруживает Bluetooth DS4). Единственный контроллер, который я использую через Bluetooth, это мой DS4, так что это достаточно хорошее решение для меня:
firejail --noprofile --blacklist="/dev/hidraw*" /usr/bin/steam
Это полностью работает! Steam не видит DS4 и не падает. Однако некоторым играм, таким как Shadow of Mordor, этот метод, похоже, не нравится. Большинство игр работают нормально, но SoM увидит мой DS4 (и даже будет знать, что это DS4, потому что он идет с подсказками кнопок PlayStation, несмотря на то, что я заставляю Steam думать, что это конкретно контроллер 360 с sc-controller
), и все же отказывается принимать любой ввод от него. У меня еще впереди работа.
РЕДАКТИРОВАТЬ: успех! После дополнительных испытаний я обнаружил, что проблема SoM заключается в том, что игра не является лучшим портом Linux и просто не совместима с чем-либо связанным с DS4, кроме самого DS4. То есть, попытка заставить его эмулировать что-то еще с любым драйвером пользовательского пространства - xboxdrv, ds4drv, sc-controller и т.д. - не подходит для этой игры. Итак, я пошел и сделал целый скрипт для запуска Steam, который блокирует мой адаптер Bluetooth вместо устройств hidraw. Так как эта ошибка Steam вызвана конфигурациями PulseAudio, я решил рискнуть и решил, что если я просто заблокирую доступ Steam ко всему USB-устройству контроллера, но позволю Steam обнаружить все его части, кроме hidraw и /dev /input /jsX, это будет работать. И это сработало. Вот соответствующие части моего сценария:
#!/bin/bash
BLUETOOTH="$(lsusb | grep "8087:07dc")" # those are my BT adapter's device and vendor IDs; yours may be different
BUS="$(echo "$BLUETOOTH" | sed 's/.*Bus \([0-9]\+\).*/\1/')"
DEV="$(echo "$BLUETOOTH" | sed 's/.*Device \([0-9]\+\).*/\1/')"
BLACKLIST="/dev/bus/usb/$BUS/$DEV"
firejail --noprofile --blacklist="$BLACKLIST" /usr/bin/steam
(Я взял эту игру, вместо того, чтобы блокировать что-либо связанное со звуком с контроллера, потому что, хотя в контроллере действительно есть звуковая карта, и, хотя, возможно, именно поэтому в Steam вообще есть эта проблема, я не могу найти способ получить доступ к чему-либо связанные с указанной звуковой картой over /sys или /dev.)