我正在编写使用Pi的GPU的图形应用程序,并且在运行程序时不断出现* failed to open vchiq instance错误。这通常是由sudo chmod 777 /dev/vchiq修复的,但是(1)这是一个非常不安全的修复程序,绝对不适合部署到用户拥有的设备,(2)每次重新启动后都会重置。

如何在不引入安全性问题的情况下,以“正确的方式”持续解决我的/dev/vchiq问题?

#1 楼

通过将自己添加到video组中,我能够解决类似的问题(我未使用默认用户)。

命令是:

sudo usermod -a -G video $(whoami)


您需要注销并重新登录以使更改生效。

评论


这对我有用(sudo usermod -a -G video $ {whoami)),我也建议(出于安全目的)为需要访问摄像机的任何过程添加一个专用用户,并将该用户仅添加到视频组中。

– n8henrie
16年5月14日在15:53

重新启动后,此永久解决方案可以正常工作并且相对安全。

– Serge Stroobandt
16年5月16日在18:55

需要重启。

– Moosa Baloch
17年11月12日在21:23

这也对我有用!谢谢。无需重新启动,注销并再次登录就足够了。

– tuvokki
18年3月28日在16:00

这是正确,安全的方法。如果您有专用于此功能的用户,则可以通过用该用户名替换$(whoami)来添加它们。

– IceMage
19年2月1日在15:06

#2 楼

您可以创建udev规则来设置设备上的特定权限。作为root用户,您可以:

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


评论


这不能解决问题。运行该命令后,我仍然会收到错误消息。

–塞林
2015年10月17日在6:49

我怀疑权限是在较高的udev规则(因此在运行顺序中稍后)中完成的,该规则撤消了此更改。在我的(Debian)PC上,系统提供的文件是/lib/udev/rules.d/91-permissions.rules,因此,我尝试将其写入更高的文件(并可能在名称中包括local,以将其标识为本地修改),即:echo`SUBSYSTEM ==“ vchiq”,GROUP =“ video”,MODE =“ 0660” \'> /etc/udev/rules.d/92-local-vchiq-permissions.rules

– SlySven
16年1月19日在7:50



我的权限被拒绝,可能是什么问题?

– dmigo
16-09-22在18:08

非常适合我。如果usermod不够完善的解决方案

– Axel Advento
18年8月1日在13:15

#3 楼

您可以设置SUID权限

sudo chmod u+s /dev/vchiq


评论


这是做什么的?

– Fouric
2014年6月13日下午5:00

为可执行文件提供setuid属性后,系统上有权执行此文件的普通用户将获得拥有该文件的用户(通常是root)的特权。您可以在程序上设置它(假设它是由root拥有的)。由于/ dev / vchiq属于视频组,另一个选择是将setgid和程序上的组设置为视频。

–地铁
14年6月13日在6:17

尽管用户www-data在视频组中,但这没有帮助,但是我在Raspbian Stretch上成功使用chmod a + rw / dev / vchiq。

– JanTuroň
17年12月21日在10:23

#4 楼



start_x=1 
gpu_mem=256

添加到boot/config.txt,然后运行sudo raspistill -o cam.jpg

当然,我添加了raspistill的路径。它在Ubuntu上对我有用。

评论


我不知道这如何回答OP的问题-您能否扩大答案以解释它在Raspberry Pi上的工作原理?

– SlySven
16年1月19日在7:54

#5 楼

如果您是通过可通过浏览器访问的php脚本运行raspistill,则需要输入:sudo usermod -a -G video www-data
以授予Apache必要的权限。