¿Cómo puedo corregir permanentemente los errores de permiso / dev / vchiq?

21

Estoy trabajando en escribir una aplicación gráfica que use la GPU de Pi, y constantemente obtengo * failed to open vchiq instanceerrores al ejecutar mis programas. Esto generalmente se soluciona con un sudo chmod 777 /dev/vchiq, pero (1) esta es una solución muy insegura que definitivamente no es adecuada para la implementación en dispositivos propiedad del usuario, y (2) se restablece después de cada reinicio.

¿Cómo puedo solucionar mis /dev/vchiqproblemas "de la manera correcta", de manera persistente, sin presentar problemas de seguridad?

fouric
fuente

Respuestas:

28

Pude resolver un problema similar agregándome al videogrupo (no estaba usando el usuario predeterminado). Quizás esto pueda ayudar.

El comando es:

sudo usermod -a -G video $(whoami)

Deberá cerrar sesión y volver a iniciarla para que el cambio surta efecto.

Mickaël
fuente
2
Esto funcionó para mí ( sudo usermod -a -G video $(whoami)), también recomendaría (por razones de seguridad) agregar un usuario dedicado para cualquier proceso que necesite acceso a la cámara y agregar solo ese usuario al videogrupo.
n8henrie
3
Después de reiniciar, esta solución permanente funciona bien y es relativamente segura.
Serge Stroobandt
Se requiere reiniciar ...
Moosa Baloch
2
¡Esto funcionó para mí también! Gracias. Reiniciar no es necesario, cerrar sesión y volver a iniciar sesión es suficiente.
tuvokki
1
Esta es la forma correcta y segura de hacerlo. Si tiene un usuario dedicado para esta función, puede agregarlo reemplazando $ (whoami) con ese nombre de usuario.
IceMage
8

Puede crear una regla de udev para establecer permisos específicos en el dispositivo. Como root, podrías:

echo 'SUBSYSTEM == "vchiq", GROUP = "video", MODE = "0660"'> /etc/udev/rules.d/10-vchiq-permissions.rules
usermod -a -G video YourUnprivilegedUser
Nicolas Dufresne
fuente
Esto no soluciona el problema. Después de ejecutar eso, sigo recibiendo el error.
Cerin
Sospecho que los permisos se realizan en una regla udev superior (por lo tanto, más adelante en el orden de ejecución) que deshace este cambio. En mi PC (Debian), el archivo proporcionado por el sistema es /lib/udev/rules.d/91-permissions.rulesasí que intentaría escribir esto en uno aún más alto (y tal vez incluir local en el nombre para identificarlo como una modificación local), es decir:echo `SUBSYSTEM=="vchiq",GROUP="video",MODE="0660"\' > /etc/udev/rules.d/92-local-vchiq-permissions.rules
SlySven
Me deniegan el permiso, ¿qué podría estar mal?
dmigo
Funciona perfectamente para mi. Solución elegante si usermod no es suficiente
Axel Advento
5

Podrías establecer un SUIDpermiso

sudo chmod u+s /dev/vchiq
Milliways
fuente
¿Qué hace esto?
Fouric
1
Cuando se le ha otorgado el setuidatributo a un archivo ejecutable , los usuarios normales en el sistema que tienen permiso para ejecutar este archivo obtienen los privilegios del usuario que posee el archivo (comúnmente root). Puede configurar esto en su programa (suponiendo que sea propiedad de root). Como /dev/vchiqpertenece al grupo, videootra opción es configurar setgidy el grupo en su programa video.
Milliways
1
Eso no ayudó, aunque el usuario www-dataestá en videogrupo, pero tuve éxito con chmod a+rw /dev/vchiqRaspbian Stretch.
Jan Turoň
0

añadir

start_x=1 
gpu_mem=256

para boot/config.txtluego corrersudo raspistill -o cam.jpg

Por supuesto, agregué el camino para el raspistill. A mí me funcionó en Ubuntu.

usuario40120
fuente
No veo cómo esto responde la pregunta del OP: ¿podría ampliar su respuesta para explicar cómo funciona en la Raspberry Pi?
SlySven
0

Si está ejecutando raspistill desde un script php al que se accede a través de un navegador, debe ingresar: sudo usermod -a -G video www-data para otorgar a Apache los permisos necesarios.

C Wheatley
fuente