1

Из-за долгой не исправленной ошибки в Steam с Linux я хочу заблокировать для определенной программы (Steam) какой-либо доступ к определенному устройству (контроллеру Sony DualShock 4).

Я попытался установить некоторые правила udev для пользовательской группы, а затем запустить Steam в качестве пользовательского пользователя, которого нет в этой группе, но этот путь был прерван, когда su не смог выполнить работу с графическим интерфейсом, а у pkexec не было выполнимого (или безопасного) способа сохранения. на самом деле любые переменные окружения, что приводит к многочисленным проблемам, включая немедленный сбой из-за того, что каталог user /home не существует. Теперь у меня нет идей.

1 ответ1

0

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .