Blockieren Sie den Zugriff eines bestimmten Programms auf ein Gerät

634
Jimi-James

Aufgrund eines langen, nicht behobenen Fehlers in Steam unter Linux möchte ich verhindern, dass ein bestimmtes Programm (Steam) Zugriff auf ein bestimmtes Gerät (Sony DualShock 4-Controller) hat.

Ich habe versucht, einige udev-Regeln für eine benutzerdefinierte Gruppe festzulegen und dann Steam als benutzerdefinierten Benutzer auszuführen, der sich nicht in dieser Gruppe befindet. Diese Möglichkeit brach jedoch zusammen, wenn suGUI-Sachen pkexecnicht möglich waren und es keine praktikable (oder sichere) Möglichkeit gab, wirklich irgendwelche zu erhalten Umgebungsvariablen, die zu zahlreichen Problemen führen, einschließlich eines sofortigen Fehlers, da das / home-Verzeichnis dieses benutzerdefinierten Benutzers nicht vorhanden ist. Jetzt habe ich keine Ideen mehr.

1

1 Antwort auf die Frage

0
Jimi-James

Ich habe endlich herausgefunden, dass ich dazu eine Sandbox benutzen kann. Speziell Feuergefängnis. Ich hatte einen Befehl, der nur Hidraw-Geräte blockiert (einschließlich aller Bluetooth-Controller und wie Steam einen Bluetooth DS4 erkennt). Der einzige Controller, den ich über Bluetooth verwende, ist mein DS4. Das ist eine gute Lösung für mich:

firejail --noprofile --blacklist="/dev/hidraw*" /usr/bin/steam 

Es funktioniert total! Steam kann den DS4 nicht sehen und stürzt nicht ab. Allerdings scheinen bestimmte Spiele wie Shadow of Mordor diese Methode nicht zu mögen. Die meisten Spiele funktionieren gut, aber SoM wird meinen DS4 sehen (und sogar wissen, dass es sich um einen DS4 handelt, da die PlayStation-Schaltfläche trotz meines Tricks dazu führt, dass es sich bei Steam um einen 360-Controller handelt sc-controller) und trotzdem keine Eingaben von ihm akzeptieren. Ich habe noch etwas Arbeit vor mir.

EDIT: Erfolg! Nach weiteren Tests stellte ich fest, dass SoMs Problem darin bestand, dass das Spiel nicht der beste Linux-Port war und einfach nicht mit DS4-bezogenem Material kompatibel ist, bei dem es sich nicht um das DS4 handelt. Das heißt, wenn Sie versuchen, etwas anderes mit einem beliebigen Userspace-Treiber zu emulieren - xboxdrv, ds4drv, sc-controller usw. - spielt dieses Spiel nicht gut. Also habe ich ein komplettes Skript zum Starten von Steam erstellt, das meinen gesamten Bluetooth-Adapter anstelle von Hidraw-Geräten blockiert. Da dieser Steam-Fehler durch PulseAudio-Konfigurationen verursacht wird, nahm ich mir ein Glücksspiel und stellte fest, dass ich, wenn ich nur Steams Zugriff auf das gesamte USB-Gerät des Controllers blockiere, aber Steam alle Teile und Teile davon entdecken lasse, von hidraw bis / dev /. input / jsX würde es funktionieren. Und es hat funktioniert. Hier sind die relevanten Teile meines Skripts:

#!/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 

(Ich habe dieses Glücksspiel genommen, anstatt alles zu blockieren, was mit dem Controller zu tun hatte. Der Controller enthält zwar eine Soundkarte, und obwohl Steam wahrscheinlich dieses Problem hat, kann ich auf nichts zugreifen verwandt mit der Soundkarte über / sys oder / dev.)