没有root权限如何使用虚拟串口?

没有root权限如何使用虚拟串口?

背景:我想使用 这个 Wifi 转串口适配器 通过控制望远镜 星辰 在 Kubuntu 16.04(64 位)上运行。

socat我使用以下命令行创建了一个虚拟 com 端口:

$ sudo socat pty,link=/dev/virtualcom0,raw tcp:10.0.0.1:4030

我在这里看到了新设备:

$ ls -l /dev/virtualcom0 
lrwxrwxrwx 1 root root 10 2017-07-03 09:05 virtualcom0 -> /dev/pts/6
$ ls -l /dev/pts/6
crw--w---- 1 root tty 136, 6 2017-07-03 09:05 /dev/pts/6

只要我以root权限运行,尝试使用/dev/virtualcom0eg就可以工作。但是当我尝试以标准用户权限使用该端口时,出现错误:picocommpicosomm

$ picocom /dev/virtualcom0 --baud 9600 --imap lfcrlf
FATAL: cannot open /dev/virtualcom0: Permission denied

是否知道如何使虚拟 com 端口可通过标准用户权限访问,也许可以通过为此定义特殊的 udev 规则?

编辑#1

按照德克特回答的首选方法,我现在使用:

$ socat pty,link=/tmp/virtualcom0,raw tcp:10.0.0.1:4030

请注意,这在 macOS 上也可以正常工作(通过自制软件安装 socat 后)。

答案1

在翻阅 socat 的手册页后,我找到了答案。

您可以通过在命令行中添加更多表达式来将模式和组添加到 pty 的属性中。要遵循您的示例,但使用拨出组拥有的新串行端口并对该组具有读/写访问权限,请执行以下操作:

$ sudo socat pty,link=/dev/virtualcom0,raw,group-late=dialout,mode=660 tcp:10.0.0.1:4030

答案2

我完全不明白为什么你需要虚拟串口。如果你只是这么做,会发生什么telnet 10.0.0.1 4030

socat接下来的事情是在没有普通用户的情况下运行sudo并选择可访问的路径,例如/tmp/vcom0(或其他)。

如果由于某种原因这不起作用,而你显然可以做到sudo,请尝试更换所有者

sudo chown your_username /dev/virtualcom0

或权限

sudo chmod o+rw /dev/virtualcom0

编辑

不要尝试udev为特定的伪终端制定规则。首先,你事先并不知道它是哪个伪tty,其次,伪tty到处都在使用,如果其他程序碰巧为另一个用户创建了这个伪tty,它们就会失败。

最简洁的解决方案是使用变体 (1) ( /tmp/vcom0)。

如果您坚持使用其他变体,请制作一个包含 和socat/chmod的简短脚本chown,并使用 执行该脚本sudo。如有必要,您可以使用 来跟踪符号链接readlink

另一种选择是编写一个简短的脚本,socat以普通用户身份调用两者,并stellarium使用其创建的链接,并socat在完成后终止。使用该脚本来启动stellarium

相关内容