背景:我想使用 这个 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/virtualcom0
eg就可以工作。但是当我尝试以标准用户权限使用该端口时,出现错误:picocomm
picosomm
$ 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
。