Як я можу назавжди виправити / dev / vchiq помилки дозволу?


21

Я працюю над написанням графічної програми, яка використовує графічний процесор Pi, і я постійно отримую * failed to open vchiq instanceпомилки під час роботи своїх програм. Зазвичай це виправлено a sudo chmod 777 /dev/vchiq, але (1) це дуже небезпечне виправлення, яке, безумовно, не підходить для розгортання на пристроях, що належать користувачеві, і (2) воно скидається після кожного перезавантаження.

Як я можу виправити свої /dev/vchiqпроблеми "правильним шляхом", наполегливо, не вводячи проблеми безпеки?

Відповіді:


28

Мені вдалося вирішити подібну проблему, додавши себе до videoгрупи (я не використовував користувача за замовчуванням). Можливо, це може допомогти.

Команда така:

sudo usermod -a -G video $(whoami)

Вам потрібно буде вийти з системи та знову ввійти, щоб зміни набрали чинності.


2
Це працювало для мене ( sudo usermod -a -G video $(whoami)), я також рекомендував би (з метою безпеки) додати виділеного користувача для будь-якого процесу, який потребує доступу до камери та додавання лише цього користувача до videoгрупи.
n8henrie

3
Після перезавантаження це постійне рішення працює чудово і відносно безпечно.
Серж Стротобанд

Перезавантаження потрібно ....
Moosa Baloch

2
Це працювало і для мене! Спасибі. Перезавантажувати не потрібно, достатньо виходу з системи та входу в систему.
тувоккі

1
Це правильний, безпечний спосіб зробити це. Якщо у вас є виділений користувач для цієї функції, ви можете додати їх, замінивши $ (whoami) на це ім'я користувача.
IceMage

8

Ви можете створити правило udev для встановлення конкретних дозволів на пристрої. Як корінь, ви можете:

echo 'SUBSYSTEM == "vchiq", GROUP = "відео", MODE = "0660"'> /etc/udev/rules.d/10-vchiq-permissions.rules
usermod -a -G відео YourUnprivilegedUser

Це не виправить проблему. Після цього я все-таки отримую помилку.
Серін

Я підозрюю, що дозволи виконуються за більш високим (таким чином пізніше в порядку запуску) правилом udev, яке скасовує цю зміну. На моєму (Debian) ПК файлі, що постачаються системою, /lib/udev/rules.d/91-permissions.rulesя б спробував записати це на ще більш високий (і, можливо, включити локальний у ім'я, щоб визначити його як локальну модифікацію), тобто:echo `SUBSYSTEM=="vchiq",GROUP="video",MODE="0660"\' > /etc/udev/rules.d/92-local-vchiq-permissions.rules
SlySven,

Я отримую відмову в дозволі, що може бути не так?
dmigo

Для мене прекрасно працює. Елегантне рішення, якщо користувачам недостатньо
Axel Advento

5

Ви можете встановити SUIDдозвіл

sudo chmod u+s /dev/vchiq

Що це робить?
чотирирічний

1
Коли виконуваний файл отримав setuidатрибут, звичайні користувачі системи, які мають дозвіл на виконання цього файлу, отримують привілеї користувача, якому належить файл (зазвичай root). Ви можете встановити це у своїй програмі (якщо припустити, що вона належить root). Як /dev/vchiqналежить до групи, videoще одним варіантом є встановлення setgidта групу у вашій програмі video.
Міллівейс

1
Це не допомогло, хоча користувач www-dataзнаходиться у videoгрупі, але мені вдалося chmod a+rw /dev/vchiqна Raspbian Stretch.
Ян Туров

0

додати

start_x=1 
gpu_mem=256

щоб boot/config.txtпотім бігтиsudo raspistill -o cam.jpg

Звичайно, я додав шлях до raspistill. Це працювало для мене в Ubuntu.


Я не бачу, як це відповідає на питання ОП - ви могли б розширити свою відповідь, щоб пояснити, як це працює на Raspberry Pi?
SlySven

0

Якщо у вас запущено raspistill зі скрипта php, доступ до якого здійснюється через браузер, вам потрібно ввести: sudo usermod -a -G video www-data щоб надати Apache необхідні дозволи.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.