Como posso corrigir permanentemente os erros de permissão / dev / vchiq?

21

Estou trabalhando para escrever um aplicativo gráfico que usa a GPU do Pi e constantemente recebo * failed to open vchiq instanceerros ao executar meus programas. Isso geralmente é corrigido por um sudo chmod 777 /dev/vchiq, mas (1) é uma correção muito insegura que definitivamente não é adequada para implantação em dispositivos de propriedade do usuário e (2) é redefinida após cada reinicialização.

Como posso resolver meus /dev/vchiqproblemas "do jeito certo", persistentemente, sem introduzir problemas de segurança?

fouric
fonte

Respostas:

28

Consegui resolver um problema semelhante adicionando-me ao videogrupo (não estava usando o usuário padrão). Talvez isso possa ajudar.

O comando é:

sudo usermod -a -G video $(whoami)

Você precisará sair e entrar novamente para que a alteração entre em vigor.

Mickaël
fonte
2
Isso funcionou para mim ( sudo usermod -a -G video $(whoami)), eu também recomendaria (por questões de segurança) adicionar um usuário dedicado para qualquer processo que necessite de acesso à câmera e adicionar apenas esse usuário ao videogrupo.
N8henrie 14/05
3
Após a reinicialização, essa solução permanente funciona bem e é relativamente segura.
Serge Stroobandt
Reinicialização necessária ....
Moosa Baloch
2
Isso funcionou para mim também! Obrigado. Não é necessário reinicializar, sair e fazer login novamente é suficiente.
tuvokki 28/03
1
Esta é a maneira correta e segura de fazer isso. Se você tiver um usuário dedicado para esta função, poderá adicioná-lo substituindo $ (whoami) por esse nome de usuário.
IceMage
8

Você pode criar uma regra do udev para definir permissões específicas no dispositivo. Como root, você pode:

echo 'SUBSYSTEM == "vchiq", GROUP = "video", MODE = "0660"'> /etc/udev/rules.d/10-vchiq-permissions.rules
usermod -a -G video YourUnprivilegedUser
Nicolas Dufresne
fonte
Isso não resolve o problema. Depois de executar isso, ainda recebo o erro.
Cerin
Eu suspeito que as permissões sejam feitas em uma regra udev mais alta (portanto, mais tarde na ordem de execução) que desfaz essa alteração. No meu PC (Debian), o arquivo fornecido pelo sistema é o /lib/udev/rules.d/91-permissions.rulesque eu tentaria escrever para um ainda mais alto (e talvez inclua local no nome para identificá-lo como uma modificação local), ou seja:echo `SUBSYSTEM=="vchiq",GROUP="video",MODE="0660"\' > /etc/udev/rules.d/92-local-vchiq-permissions.rules
SlySven
Recebo permissão negada, o que pode estar errado?
dmigo 22/09/16
Funciona perfeitamente para mim. Solução elegante se usermod não é suficiente
Axel Advento
5

Você pode definir SUIDpermissão

sudo chmod u+s /dev/vchiq
Milliways
fonte
O que isso faz?
fouric
1
Quando um arquivo executável recebe o setuidatributo, os usuários normais do sistema que têm permissão para executá-lo obtêm os privilégios do usuário que possui o arquivo (geralmente raiz). Você pode definir isso em seu programa (assumindo que ele seja de propriedade do root). Como /dev/vchiqpertence ao grupo, videooutra opção é definir setgide o grupo no seu programa para video.
Milliways
1
Isso não ajudou, embora o usuário www-dataesteja em videogrupo, mas consegui com o chmod a+rw /dev/vchiqRaspbian Stretch.
precisa saber é o seguinte
0

adicionar

start_x=1 
gpu_mem=256

para boot/config.txtentão corrersudo raspistill -o cam.jpg

É claro que adicionei o caminho para o raspistill. Funcionou para mim no Ubuntu.

user40120
fonte
Não vejo como isso responde à pergunta do OP - você poderia expandir sua resposta para explicar como ele funciona no Raspberry Pi?
precisa saber é o seguinte
0

Se você estiver executando o raspistill a partir de um script php acessado por um navegador, precisará digitar: sudo usermod -a -G video www-data para dar ao Apache as permissões necessárias.

C Wheatley
fonte