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


1

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

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

Ответы:


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.)

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.