在 Ubuntu 上无需 root 权限打开串行端口(udev 规则)

在 Ubuntu 上无需 root 权限打开串行端口(udev 规则)

我按照本教程设置从用户空间对 Flir Boson 相机串行端口的访问:

https://www.forecr.io/blogs/connectivity/how-to-integrate-flir-boson-thermal-camera-to-nvidia-jetson-modules

相机按/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权限,这很容易让您陷入其中。

这应该是您或任何其他用户访问设备所需要做的全部操作。除非您有某些非常特殊的用例,否则您应该保留默认权限不是在您的问题中指定。

相关内容