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.