Wie kann ich / dev / vchiq-Berechtigungsfehler dauerhaft beheben?

21

Ich arbeite daran, eine grafische Anwendung zu schreiben, die die GPU des Pi verwendet, und es treten ständig * failed to open vchiq instanceFehler beim Ausführen meiner Programme auf. Dies wird normalerweise durch a behoben sudo chmod 777 /dev/vchiq, aber (1) dies ist ein sehr unsicherer Fix, der definitiv nicht für die Bereitstellung auf benutzereigenen Geräten geeignet ist, und (2) er wird nach jedem Neustart zurückgesetzt.

Wie kann ich meine /dev/vchiqProbleme dauerhaft "auf die richtige Weise" beheben , ohne Sicherheitsprobleme einzuführen?

vier
quelle

Antworten:

28

Ich konnte ein ähnliches Problem lösen, indem ich mich der videoGruppe hinzufügte (ich verwendete nicht den Standardbenutzer). Vielleicht kann das helfen.

Der Befehl lautet:

sudo usermod -a -G video $(whoami)

Sie müssen sich abmelden und erneut anmelden, damit die Änderung wirksam wird.

Mickaël
quelle
2
Dies hat bei mir ( sudo usermod -a -G video $(whoami)) funktioniert. Aus Sicherheitsgründen würde ich auch empfehlen, einen dedizierten Benutzer für jeden Prozess hinzuzufügen, der Zugriff auf die Kamera benötigt, und nur diesen Benutzer der videoGruppe hinzuzufügen .
n8henrie
3
Nach dem Neustart funktioniert diese permanente Lösung einwandfrei und ist relativ sicher.
Serge Stroobandt
Neustart erforderlich ....
Moosa Baloch
2
Das hat auch bei mir funktioniert! Vielen Dank. Ein Neustart ist nicht erforderlich, ein Abmelden und erneutes Anmelden ist ausreichend.
Tuvokki
1
Dies ist der richtige und sichere Weg, dies zu tun. Wenn Sie einen dedizierten Benutzer für diese Funktion haben, können Sie diese hinzufügen, indem Sie $ (whoami) durch diesen Benutzernamen ersetzen.
IceMage
8

Sie können eine udev-Regel erstellen, um bestimmte Berechtigungen für das Gerät festzulegen. Als root können Sie:

echo 'SUBSYSTEM == "vchiq", GROUP = "video", MODE = "0660"'> /etc/udev/rules.d/10-vchiq-permissions.rules
usermod -a -G video YourUnprivilegedUser
Nicolas Dufresne
quelle
Dies behebt das Problem nicht. Nachdem ich das ausgeführt habe, erhalte ich immer noch den Fehler.
Cerin
Ich vermute, dass die Berechtigungen in einer höheren (also später in der laufenden Reihenfolge) udev-Regel erfolgen, die diese Änderung rückgängig macht. Auf meinem (Debian-) PC ist die vom System gelieferte Datei /lib/udev/rules.d/91-permissions.rulesso, dass ich versuchen würde, diese auf eine noch höhere Datei zu schreiben (und möglicherweise local in den Namen aufzunehmen, um sie als lokale Modifikation zu echo `SUBSYSTEM=="vchiq",GROUP="video",MODE="0660"\' > /etc/udev/rules.d/92-local-vchiq-permissions.rules
kennzeichnen
Ich bekomme die Erlaubnis verweigert, was könnte falsch sein?
dmigo
Funktioniert perfekt für mich. Elegante Lösung, wenn Usermod nicht genug ist
Axel Advento
5

Sie können die SUIDBerechtigung festlegen

sudo chmod u+s /dev/vchiq
Milliways
quelle
Was macht das?
Fouric
1
Wenn einer ausführbaren Datei das setuidAttribut zugewiesen wurde, erhalten normale Benutzer auf dem System, die zur Ausführung dieser Datei berechtigt sind, die Berechtigungen des Benutzers, dem die Datei gehört (normalerweise root). Sie können dies in Ihrem Programm einstellen (vorausgesetzt, es gehört root). Als /dev/vchiqzur Gruppe gehörend ist eine videoandere Option einzustellen setgidund die Gruppe auf Ihr Programm zu stellen video.
Milliways
1
Das hat nicht geholfen, obwohl der Benutzer www-datain der videoGruppe ist, aber es ist mir bei chmod a+rw /dev/vchiqRaspbian Stretch gelungen .
Jan Turoň
0

hinzufügen

start_x=1 
gpu_mem=256

um boot/config.txtdann zu rennensudo raspistill -o cam.jpg

Natürlich habe ich den Pfad für den Raspistill hinzugefügt. Es hat bei mir in Ubuntu funktioniert.

user40120
quelle
Ich verstehe nicht, wie dies die Frage des OP beantwortet - können Sie Ihre Antwort erweitern, um zu erklären, wie es auf dem Raspberry Pi funktioniert?
SlySven
0

Wenn Sie raspistill über ein PHP-Skript ausführen, auf das über einen Browser zugegriffen wird, müssen Sie Folgendes eingeben:, sudo usermod -a -G video www-data um Apache die erforderlichen Berechtigungen zu erteilen.

C Wheatley
quelle