Как я могу навсегда исправить ошибки прав доступа / dev / vchiq?

21

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

Как я могу исправлять свои /dev/vchiqпроблемы «правильно», постоянно, без проблем с безопасностью?

fouric
источник

Ответы:

28

Мне удалось решить аналогичную проблему, добавив себя в videoгруппу (я не использовал пользователя по умолчанию). Может быть, это может помочь.

Команда:

sudo usermod -a -G video $(whoami)

Вам нужно будет выйти и снова, чтобы изменения вступили в силу.

Микаэль
источник
2
Это сработало для меня ( sudo usermod -a -G video $(whoami)), я бы также рекомендовал (в целях безопасности) добавить выделенного пользователя для любого процесса, которому потребуется доступ к камере, и добавить только этого пользователя в videoгруппу.
n8henrie
3
После перезагрузки это постоянное решение работает нормально и относительно безопасно.
Серж Строобандт
Требуется перезагрузка ....
Мусу BALOCH
2
Это сработало и для меня! Спасибо. Перезагрузка не требуется, достаточно выйти из системы и войти снова.
Тувокки
1
Это правильный, безопасный способ сделать это. Если у вас есть выделенный пользователь для этой функции, вы можете добавить его, заменив $ (whoami) на это имя пользователя.
IceMage
8

Вы можете создать правило udev для установки определенных разрешений на устройстве. Как корень, вы можете:

echo 'SUBSYSTEM == "vchiq", GROUP = "video", MODE = "0660"'> /etc/udev/rules.d/10-vchiq-permissions.rules
usermod -a -G video YourUnprivilegedUser
Николас Дюфрен
источник
Это не решает проблему. После запуска я все еще получаю ошибку.
Cerin
Я подозреваю, что разрешения выполняются в более высоком (то есть позже в рабочем порядке) правиле 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
Я получил отказано в разрешении, что может быть не так?
Дмиго,
Отлично работает для меня Элегантное решение, если usermod не достаточно
Аксель Адвенто
5

Вы можете установить SUIDразрешение

sudo chmod u+s /dev/vchiq
Milliways
источник
Что это делает?
четыре
1
Когда исполняемому файлу присвоен setuidатрибут, обычные пользователи в системе, которые имеют разрешение на выполнение этого файла, получают привилегии пользователя, которому принадлежит файл (обычно root). Вы можете установить это в своей программе (при условии, что она принадлежит пользователю root). Так как /dev/vchiqпринадлежит группе, videoдругой вариант - установить setgidи группу в вашей программе video.
Milliways
1
Это не помогло, хотя пользователь www-dataв videoгруппе, но мне удалось с chmod a+rw /dev/vchiqRaspbian Stretch.
Jan Turo
0

добавлять

start_x=1 
gpu_mem=256

чтобы boot/config.txtзатем запуститьsudo raspistill -o cam.jpg

Конечно, я добавил путь для расписта. Это сработало для меня в Ubuntu.

user40120
источник
Я не понимаю, как это отвечает на вопрос ОП - не могли бы вы расширить свой ответ, чтобы объяснить, как он работает на Raspberry Pi?
SlySven
0

Если вы запускаете raspistill из php-скрипта, доступ к которому осуществляется через браузер, вам нужно ввести: sudo usermod -a -G video www-data чтобы дать Apache необходимые разрешения.

С Уитли
источник