Jak trwale naprawić błędy uprawnień / dev / vchiq?

21

Pracuję nad napisaniem aplikacji graficznej korzystającej z procesora graficznego Pi i ciągle pojawiają się * failed to open vchiq instancebłędy podczas uruchamiania moich programów. Zwykle jest to naprawione przez sudo chmod 777 /dev/vchiq, ale (1) jest to bardzo niepewna poprawka, która zdecydowanie nie nadaje się do wdrożenia na urządzeniach należących do użytkownika, i (2) resetuje się po każdym ponownym uruchomieniu.

Jak mogę /dev/vchiquporczywie naprawić swoje problemy „we właściwy sposób” bez wprowadzania problemów związanych z bezpieczeństwem?

czterokrotnie
źródło

Odpowiedzi:

28

Byłem w stanie rozwiązać podobny problem, dodając się do videogrupy (nie używałem domyślnego użytkownika). Może to może pomóc.

Polecenie to:

sudo usermod -a -G video $(whoami)

Musisz wylogować się i zalogować ponownie, aby zmiana zaczęła obowiązywać.

Mickaël
źródło
2
To zadziałało dla mnie ( sudo usermod -a -G video $(whoami)), zaleciłbym również (ze względów bezpieczeństwa) dodanie dedykowanego użytkownika do dowolnego procesu wymagającego dostępu do kamery i dodanie tylko tego użytkownika do videogrupy.
n8henrie
3
Po ponownym uruchomieniu to trwałe rozwiązanie działa dobrze i jest względnie bezpieczne.
Serge Stroobandt
Wymagane
ponowne uruchomienie
2
To też działało dla mnie! Dzięki. Ponowne uruchomienie nie jest konieczne, wystarczy wylogowanie i ponowne zalogowanie.
tuvokki
1
To jest właściwy, bezpieczny sposób na zrobienie tego. Jeśli masz dedykowanego użytkownika dla tej funkcji, możesz go dodać, zastępując $ (whoami) tą nazwą użytkownika.
IceMage
8

Możesz utworzyć regułę udev, aby ustawić określone uprawnienia na urządzeniu. Jako root możesz:

echo 'SUBSYSTEM == "vchiq", GROUP = "video", MODE = "0660"'> /etc/udev/rules.d/10-vchiq-permissions.rules
usermod -a -G wideo YourUnprivilegedUser
Nicolas Dufresne
źródło
To nie rozwiązuje problemu. Po uruchomieniu nadal pojawia się błąd.
Cerin
Podejrzewam, że uprawnienia są wykonywane w wyższej (a więc w późniejszej kolejności) zasadzie udev, która anuluje tę zmianę. Na moim (Debianowym) komputerze plik dostarczony przez system jest /lib/udev/rules.d/91-permissions.ruleswięc, więc spróbuję zapisać go na jeszcze wyższym (i być może echo `SUBSYSTEM=="vchiq",GROUP="video",MODE="0660"\' > /etc/udev/rules.d/92-local-vchiq-permissions.rules
dołączę
Odmawiam pozwolenia, co może być nie tak?
dmigo
Działa dla mnie idealnie. Eleganckie rozwiązanie, jeśli usermod nie wystarczy
Axel Advento
5

Możesz ustawić SUIDuprawnienia

sudo chmod u+s /dev/vchiq
Milliways
źródło
Co to robi?
czteroosobowy
1
Gdy plik wykonywalny otrzyma setuidatrybut, normalni użytkownicy w systemie, którzy mają uprawnienia do wykonania tego pliku, zyskują uprawnienia użytkownika, który jest właścicielem pliku (zwykle root). Możesz ustawić to w swoim programie (zakładając, że jest własnością root). Jak /dev/vchiqnależy do grupy, videoinną opcją jest ustawienie, setgida grupa w twoim programie na video.
Milliways,
1
To nie pomogło, chociaż użytkownik www-datajest w videogrupie, ale udało mi się chmod a+rw /dev/vchiqna Raspbian Stretch.
Jan Turoň
0

Dodaj

start_x=1 
gpu_mem=256

aby boot/config.txtnastępnie uruchomićsudo raspistill -o cam.jpg

Oczywiście dodałem ścieżkę do raspistill. To działało dla mnie w Ubuntu.

użytkownik40120
źródło
Nie wiem, jak to odpowiada na pytanie OP - czy możesz rozszerzyć swoją odpowiedź, aby wyjaśnić, jak to działa na Raspberry Pi?
SlySven,
0

Jeśli korzystasz z raspistill ze skryptu php dostępnego przez przeglądarkę, musisz wpisać: sudo usermod -a -G video www-data aby nadać Apache niezbędne uprawnienia.

C Wheatley
źródło