Comment puis-je corriger définitivement les erreurs d'autorisation / dev / vchiq?

21

Je travaille sur l'écriture d'une application graphique qui utilise le GPU du Pi, et je reçois constamment des * failed to open vchiq instanceerreurs lors de l'exécution de mes programmes. Ceci est généralement résolu par un sudo chmod 777 /dev/vchiq, mais (1) il s'agit d'un correctif très peu sûr qui n'est certainement pas adapté au déploiement sur des appareils appartenant à l'utilisateur, et (2) il est réinitialisé après chaque redémarrage.

Comment puis-je résoudre mes /dev/vchiqproblèmes "de la bonne façon", de manière persistante, sans introduire de problèmes de sécurité?

fouric
la source

Réponses:

28

J'ai pu résoudre un problème similaire en m'ajoutant au videogroupe (je n'utilisais pas l'utilisateur par défaut). Peut-être que cela peut aider.

La commande est:

sudo usermod -a -G video $(whoami)

Vous devrez vous déconnecter puis vous reconnecter pour que la modification prenne effet.

Mickaël
la source
2
Cela a fonctionné pour moi ( sudo usermod -a -G video $(whoami)), je recommanderais également (pour des raisons de sécurité) d'ajouter un utilisateur dédié pour tout processus qui aura besoin d'accéder à la caméra et d'ajouter uniquement cet utilisateur au videogroupe.
n8henrie
3
Après le redémarrage, cette solution permanente fonctionne correctement et est relativement sûre.
Serge Stroobandt
Redémarrage requis ....
Moosa Baloch
2
Cela a fonctionné pour moi aussi! Merci. Le redémarrage n'est pas nécessaire, la déconnexion et la reconnexion suffisent.
tuvokki
1
C'est la manière appropriée et sûre de le faire. Si vous avez un utilisateur dédié pour cette fonction, vous pouvez l'ajouter en remplaçant $ (whoami) par ce nom d'utilisateur.
IceMage
8

Vous pouvez créer une règle udev pour définir des autorisations spécifiques sur l'appareil. En tant que root, vous pouvez:

echo 'SUBSYSTEM == "vchiq", GROUP = "video", MODE = "0660"'> /etc/udev/rules.d/10-vchiq-permissions.rules
usermod -a -G video YourUnprivilegedUser
Nicolas Dufresne
la source
Cela ne résout pas le problème. Après avoir exécuté cela, je reçois toujours l'erreur.
Cerin
Je soupçonne que les autorisations sont effectuées dans une règle udev supérieure (donc plus tard dans l'ordre de fonctionnement) qui annule ce changement. Sur mon PC (Debian), le fichier fourni par le système est /lib/udev/rules.d/91-permissions.rulesdonc j'essaierais d'écrire ceci dans un fichier encore plus élevé (et peut-être d'inclure local dans le nom pour l'identifier comme une modification locale), c'est-à-dire:echo `SUBSYSTEM=="vchiq",GROUP="video",MODE="0660"\' > /etc/udev/rules.d/92-local-vchiq-permissions.rules
SlySven
J'obtiens une autorisation refusée, qu'est-ce qui pourrait ne pas arriver?
dmigo
Fonctionne parfaitement pour moi. Solution élégante si le mode utilisateur ne suffit pas
Axel Advento
5

Vous pouvez définir une SUIDautorisation

sudo chmod u+s /dev/vchiq
Milliways
la source
Qu'est-ce que cela fait?
Fouric
1
Lorsqu'un fichier exécutable a reçu l' setuidattribut, les utilisateurs normaux du système autorisés à exécuter ce fichier obtiennent les privilèges de l'utilisateur propriétaire du fichier (généralement root). Vous pouvez définir cela sur votre programme (en supposant qu'il appartient à root). Comme /dev/vchiqappartient au groupe, videoune autre option est de définir setgidet le groupe de votre programme video.
Milliways
1
Cela n'a pas aidé, bien que l'utilisateur www-datasoit dans le videogroupe, mais j'ai réussi avec chmod a+rw /dev/vchiqRaspbian Stretch.
Jan Turoň
0

ajouter

start_x=1 
gpu_mem=256

à boot/config.txtcourir puissudo raspistill -o cam.jpg

Bien sûr, j'ai ajouté le chemin du raspistill. Cela a fonctionné pour moi dans Ubuntu.

user40120
la source
Je ne vois pas comment cela répond à la question de l'OP - pourriez-vous développer votre réponse pour expliquer comment cela fonctionne sur le Raspberry Pi?
SlySven
0

Si vous exécutez raspistill à partir d'un script php accessible via un navigateur, vous devez entrer: sudo usermod -a -G video www-data pour donner à Apache les autorisations nécessaires.

C Wheatley
la source