Come posso correggere in modo permanente gli errori di autorizzazione / dev / vchiq?


21

Sto lavorando alla scrittura di un'applicazione grafica che utilizza la GPU del Pi e ricevo costantemente * failed to open vchiq instanceerrori durante l'esecuzione dei miei programmi. Questo di solito è risolto da un sudo chmod 777 /dev/vchiq, ma (1) è una soluzione molto insicura che non è sicuramente adatta alla distribuzione su dispositivi di proprietà dell'utente e (2) viene ripristinata dopo ogni riavvio.

Come posso risolvere i miei /dev/vchiqproblemi "nel modo giusto", in modo persistente, senza introdurre problemi di sicurezza?

Risposte:


28

Sono stato in grado di risolvere un problema simile aggiungendomi al videogruppo (non stavo usando l'utente predefinito). Forse questo può aiutare.

Il comando è:

sudo usermod -a -G video $(whoami)

Sarà necessario disconnettersi e riconnettersi per rendere effettiva la modifica.


2
Questo ha funzionato per me ( sudo usermod -a -G video $(whoami)), raccomanderei anche (per motivi di sicurezza) di aggiungere un utente dedicato per qualunque processo occorresse accedere alla telecamera e aggiungere solo quell'utente al videogruppo.
n8henrie,

3
Dopo il riavvio, questa soluzione permanente funziona correttamente ed è relativamente sicura.
Serge Stroobandt,

Riavvio richiesto ....
Moosa Baloch,

2
Questo ha funzionato anche per me! Grazie. Il riavvio non è necessario, disconnettersi e riconnettersi è sufficiente.
tuvokki,

1
Questo è il modo corretto e sicuro per farlo. Se hai un utente dedicato per questa funzione, puoi aggiungerli sostituendo $ (whoami) con quel nome utente.
IceMage

8

È possibile creare una regola udev per impostare autorizzazioni specifiche sul dispositivo. Come root, potresti:

echo 'SUBSYSTEM == "vchiq", GROUP = "video", MODE = "0660"'> /etc/udev/rules.d/10-vchiq-permissions.rules
usermod -a -G video YourUnprivilegedUser

Questo non risolve il problema. Dopo averlo eseguito, ricevo ancora l'errore.
Cerin,

Sospetto che le autorizzazioni vengano eseguite in una regola udev superiore (quindi più avanti nell'ordine di esecuzione) che annulla questa modifica. Sul mio PC (Debian) il file fornito dal sistema è /lib/udev/rules.d/91-permissions.rulesquindi proverei a scriverlo su uno ancora più alto (e forse includo local nel nome per identificarlo come una modifica locale), cioè:echo `SUBSYSTEM=="vchiq",GROUP="video",MODE="0660"\' > /etc/udev/rules.d/92-local-vchiq-permissions.rules
SlySven

Mi viene negata l'autorizzazione, cosa potrebbe esserci di sbagliato?
dmigo,

Funziona perfettamente per me. Soluzione elegante se usermod non è abbastanza
Axel Advento

5

Potresti impostare il SUIDpermesso

sudo chmod u+s /dev/vchiq

Cosa fa questo?
Fouric

1
Quando viene assegnato l' setuidattributo a un file eseguibile , gli utenti normali sul sistema che dispongono dell'autorizzazione per eseguire questo file ottengono i privilegi dell'utente proprietario del file (comunemente root). Puoi impostarlo sul tuo programma (supponendo che sia di proprietà di root). Come /dev/vchiqappartiene al gruppo, videoun'altra opzione è impostare setgide il gruppo sul programma su video.
Milliways,

1
Ciò non ha aiutato, sebbene l'utente www-datasia nel videogruppo, ma ci sono riuscito chmod a+rw /dev/vchiqsu Raspbian Stretch.
Jan Turoň,

0

Inserisci

start_x=1 
gpu_mem=256

per boot/config.txtpoi correresudo raspistill -o cam.jpg

Naturalmente ho aggiunto il percorso per il raspistill. Ha funzionato per me in Ubuntu.


Non vedo come questo risponda alla domanda del PO: potresti espandere la tua risposta per spiegare come funziona su Raspberry Pi?
SlySven,

0

Se stai eseguendo raspistill da uno script php a cui si accede tramite un browser, devi inserire: sudo usermod -a -G video www-data per dare ad Apache le autorizzazioni necessarie.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.