我正在C++中开发一个库,允许我使用串行端口与通过USB读写连接的设备进行通信,但在Linux中,它工作得很好,但在Linux中,它能够与我需要在"/dev/tty*“文件中读写的设备通信,为此,我使用" open”函数打开相应的文件,如下所示:
int fileId = open(fileAddress, O_RDWR);
但是,该函数返回-1,除非我使用以下命令将主用户包括在拨号组中:
sudo adduser $USER dialout
使用这种方法,我验证了在我的C++测试中一切都是完美的,但是当我试图将库包含在Unity中时,我意识到它再次失败了,因为它无法访问串行端口
由于我对通过C++进行的串口通信很感兴趣,因为它是一个跨平台的库,所以不能直接与C#进行通信。
我还在为上述问题就像在这种情况下寻找一些可能的解决方案,但在尝试了一段时间之后,在调用以下命令时,我一直无法找到UnityHub:
/usr/bin/flatpak run --branch=stable --arch=x86_64 --device=all --command=start-unityhub com.unity.UnityHub
它将我抛出以下错误:
error: app/com.unity.UnityHub/x86_64/stable is not installed
尽管我在Ubuntu官方统一安装指南之后安装了它
我还尝试在远程平台存储库中添加统一,以便使用以下命令查看这是否是问题所在:
flatpak remote-add UnityHub https://hub.unity3d.com/linux/repos/deb
但是它抛出了以下错误:
error: GPG verification enabled, but no summary found (check that the configured URL in remote config is correct)
总之,我的主要问题是,我应该做些什么来启用统一中的串行端口的读和写权限和/或解决这个问题的最佳方法?
编辑:
正如我在评论中所说的,我已经尝试将用户添加到拨号,但很明显,正如response 到这个职位中提到的那样,团结仍然无法访问带有上述配置的串行端口,我所做的一个解决方案就是对特定的tty文件应用chmod,问题是我必须手动地这样做,在进行统一构建时它是不实用的,运行应用程序的任何用户都必须手动查找相应的tty文件并将chmod应用到它,如果没有其他方法,那么至少有一些方法可以自动应用chmod或解决这个问题吗?
发布于 2022-05-22 00:07:51
我不太清楚问题出在哪里,但我会尽力帮忙的。
您链接到的Ubuntu官方统一安装指南不将Unity安装为平台。
这解释了为什么flatpak
告诉您它没有安装。
您所链接的问题是描述平台的沙箱在访问串口时是如何影响到统一的。
除非您遵循与您所链接的内容不同的教程,否则这不应适用于您。
我认为您的问题是,在默认情况下,Ubuntu上的权限不是为串行端口访问设置的。没有“自动”方法来解决这个问题,因为它需要根权限才能更改。您可以做的是将"installer“shell脚本与您的程序捆绑在一起,并在需要更改权限时运行它。
命令行版本
#!/bin/sh
sudo usermod -a -G dialout "$USER"
图形版本(弹出式询问密码)
#!/bin/sh
pkexec usermod -a -G dialout "$USER"
这不是100%的可移植性,因为并不是所有的Linux发行版都使用dialout
组(例如,Arch使用uucp
),但是对于您在Ubuntu上的使用来说,它可能已经足够好了。
https://stackoverflow.com/questions/72218432
复制相似问题