Заблокировать доступ определенной программы к устройству

478
Jimi-James

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

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

1

1 ответ на вопрос

0
Jimi-James

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

Похожие вопросы