Joe*_*Joe 2 udev serial-port kubuntu socat
背景:我想使用 这个 Wifi-to-Serial 适配器 通过 在 Kubuntu 16.04(64 位)上运行的Stellarium来控制望远镜 。
我使用socat以下命令行创建了一个虚拟 com 端口:
$ sudo socat pty,link=/dev/virtualcom0,raw tcp:10.0.0.1:4030
Run Code Online (Sandbox Code Playgroud)
我在这里看到了新设备:
$ 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
Run Code Online (Sandbox Code Playgroud)
只要我以 root 权限运行,就尝试使用/dev/virtualcom0eg withpicocomm工作picosomm。但是当我尝试使用具有标准用户权限的端口时,出现错误:
$ picocom /dev/virtualcom0 --baud 9600 --imap lfcrlf
FATAL: cannot open /dev/virtualcom0: Permission denied
Run Code Online (Sandbox Code Playgroud)
知道如何使用标准用户权限访问虚拟 com 端口,也许为此定义一个特殊的 udev 规则?
遵循dirkt答案的首选方法,我现在使用:
$ socat pty,link=/tmp/virtualcom0,raw tcp:10.0.0.1:4030
Run Code Online (Sandbox Code Playgroud)
请注意,这在 macOS 上也可以正常工作(通过自制软件安装 socat 后)。
小智 8
在翻阅 socat 的手册页后,我找到了答案。
您可以通过在命令行中添加更多表达式来将模式和组添加到 pty 的属性中。要遵循您的示例,但使用拨出组拥有的新串行端口并对该组具有读/写访问权限,请执行以下操作:
$ sudo socat pty,link=/dev/virtualcom0,raw,group-late=dialout,mode=660 tcp:10.0.0.1:4030
Run Code Online (Sandbox Code Playgroud)
我完全不明白为什么你需要一个虚拟串口。如果你只是会发生什么telnet 10.0.0.1 4030?
下一步是在socat没有sudo普通用户的情况下运行并选择可访问的路径,例如/tmp/vcom0(或其他)。
如果由于某种原因这不起作用,而您显然可以做到sudo,请尝试更改所有者
sudo chown your_username /dev/virtualcom0
Run Code Online (Sandbox Code Playgroud)
或权限
sudo chmod o+rw /dev/virtualcom0
Run Code Online (Sandbox Code Playgroud)
编辑
不要试图udev为特定的伪 tty制定规则。首先,您事先不知道它是哪个伪 tty,其次,到处都在使用伪 tty,如果其他程序碰巧为另一个用户创建了这个伪 tty,它们就会失败。
最干净的解决方案是使用变体 (1) ( /tmp/vcom0)。
如果您坚持使用其他变体,请制作一个包含socat和chmod/的简短脚本chown,然后使用sudo. readlink如有必要,您可以使用 跟踪符号链接。
另一种选择是编写一个简短的脚本,socat以普通用户的身份调用,并stellarium使用它创建的链接,并socat在完成后终止。使用该脚本启动stellarium.
| 归档时间: |
|
| 查看次数: |
7538 次 |
| 最近记录: |