Bloquear um programa específico de acessar um dispositivo

1

Por causa do um bug longo não corrigido no Steam com Linux , eu quero bloquear um programa específico (Steam) de ter qualquer acesso a um dispositivo específico (controlador Sony DualShock 4).

Eu tentei definir algumas regras do udev em torno de um grupo personalizado e depois executar o Steam como um usuário personalizado que não está nesse grupo, mas essa avenida quebrou quando su não conseguiu fazer a GUI e pkexec não foi possível (ou seguro) maneira de preservar realmente quaisquer variáveis de ambiente, resultando em inúmeros problemas, incluindo uma falha imediata devido ao diretório / home do usuário personalizado não existente. Agora estou sem ideias.

    
por Jimi-James 14.07.2018 / 02:43

1 resposta

0

Eu finalmente descobri que posso usar uma sandbox para realizar isso. Especificamente firejail. Eu criei um comando que não faz nada além de bloquear dispositivos hidraw (que inclui todos os controladores Bluetooth e é como o Steam detecta um Bluetooth DS4). O único controlador que uso através do Bluetooth é o meu DS4, o que é uma solução boa o suficiente para mim:

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

Funciona totalmente! O Steam não pode ver o DS4 e não falha. No entanto, certos jogos, como Shadow of Mordor, não parecem gostar deste método. A maioria dos jogos funcionam bem, mas SoM vai ver o meu DS4 (e até mesmo sei que é um DS4, porque ele vai com prompts botão PlayStation apesar da minha vapor enganar em pensar que é especificamente um controlador 360 com sc-controller ), e ainda se recusam a aceitar qualquer entrada a partir dele. Eu ainda tenho algum trabalho pela frente.

EDIT: Sucesso! Depois de mais testes, descobri que o problema do SoM era que o jogo não era a melhor porta do Linux, e simplesmente não é compatível com nada relacionado ao DS4 que não seja o próprio DS4. Ou seja, tentar tê-lo imitar outra coisa com qualquer driver userspace - xboxdrv, ds4drv, sc-controlador, etc .-- não jogar bonito com este jogo. Então, eu fui e fiz um script inteiro para o lançamento do Steam, que bloqueia todo o meu adaptador Bluetooth em vez de dispositivos hidraw. Uma vez que este bug vapor é causada por configurações PulseAudio, tomei um jogo e percebi que se eu simplesmente bloquear o acesso do Steam para todo o dispositivo USB do controlador, mas vamos vapor descobrir todos os pedaços de que, além disso, a partir hidraw para / dev / entrada / jsX, funcionaria. E funcionou. Aqui estão as partes relevantes do meu script:

#!/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]\+\).*//')"
DEV="$(echo "$BLUETOOTH" | sed 's/.*Device \([0-9]\+\).*//')"
BLACKLIST="/dev/bus/usb/$BUS/$DEV"

firejail --noprofile --blacklist="$BLACKLIST" /usr/bin/steam

(Tomei essa aposta, em vez de bloquear qualquer coisa relacionada som do controlador, porque, embora o controlador tem uma placa de som nele, e embora isso é provavelmente porque Vapor tem esse problema em tudo, não consigo encontrar uma maneira para acessar qualquer coisa relacionada à dita placa de som por / sys ou / dev.)

    
por 29.07.2018 / 03:47