我按照本教程设置从用户空间对 Flir Boson 相机串行端口的访问:
相机按/dev/ttyACM0
教程安装.rules
,您需要下载并复制到以下文件:/etc/udev/rules.d/
。然后重新启动。
这是该文件的内容:
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="09cb", OWNER="nvidia", MODE="0777", GROUP="nvidia"
但它对我来说不起作用。即使重启后,我的应用程序仍然需要sudo
能够与相机通信。
现在在我看来,本教程假设您有一个特定的用户名,在本例中可能是“nvidia”。所以我也尝试将 OWNER 更改为我的实际用户名,但这也无济于事。
问题的一部分可能是我不太明白 OWNER 和 GROUP 字段到底有什么用处,我只是在猜测。当然,我一直在尝试用 Google 搜索,但出于某种原因,我显然无法正确地表达查询。
这是带有 JetpackSDK 4.6 的 nVidia Jetson Xavier NX,实际上是 Ubuntu 18.04。
谢谢!
答案1
您的规则文件将用户和组更改为不存在的用户和组nvidia
- 这不会解决您的问题,事实上它不会起作用,因为用户和组nvidia
不是默认组,并且您的用户不在其中。您也不应该将套接字设置为777
权限 - 出于同样的原因,您不会将其赋予文件(请参阅这个帖子关于为什么你不应该出于类似的安全考虑而放弃777
。/var/www
作为 AppArmor 隔离规则的一部分,针对不同应用程序的设备还有额外的访问控制,你作为标准用户无法克服这些控制。这就是为什么该dialout
组存在的原因给访问这些设备。
nVidia 教程可能适用于其他系统,或者已经过时 - 你不需要使用他们的规则,而是只授予自己访问权限dialout
。
使用用户级权限时,特殊设备(例如串行端口通信)需要额外权限。这些权限由dialout
组授予(对于拨号调制解调器、USB 串行适配器等设备)
只需将您的组添加到dialout
组中,重新启动,您就可以访问。在命令行中使用此命令:
sudo usermod -a -G dialout $USER
将其替换$USER
为您在计算机上的用户名,然后当您重新启动并重新登录到会话时,您将可以访问该设备和其他设备。串行通信端口需要dialout
权限,这很容易让您陷入其中。
这应该是您或任何其他用户访问设备所需要做的全部操作。除非您有某些非常特殊的用例,否则您应该保留默认权限不是在您的问题中指定。