Udev
如何在沒有root權限的情況下使用虛擬串口?
背景:我想使用 這個 Wifi-to-Serial 適配器通過 在 Kubuntu 16.04(64 位)上執行的Stellarium 控制望遠鏡 。
我使用
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
例如。但是當我嘗試使用具有標準使用者權限的埠時,出現錯誤:picocomm``picosomm
$ picocom /dev/virtualcom0 --baud 9600 --imap lfcrlf FATAL: cannot open /dev/virtualcom0: Permission denied
知道如何使用標準使用者權限使虛擬 com 埠可訪問,也許為此定義一個特殊的 udev 規則?
編輯#1
按照 dirkt 回答的首選方法,我現在正在使用:
$ socat pty,link=/tmp/virtualcom0,raw tcp:10.0.0.1:4030
請注意,這在 macOS 上也可以正常工作(通過自製軟體安裝 socat 之後)。
我完全不明白為什麼你需要一個虛擬串口。如果你只是會發生什麼
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 到處都在使用,如果其他程序碰巧為另一個使用者創建了這個偽 tty,它們就會失敗。最乾淨的解決方案是使用變體 (1) (
/tmp/vcom0
)。如果您堅持使用其他變體,請製作一個包含 the
socat
和chmod
/的短腳本chown
,並使用sudo
.readlink
如有必要,您可以使用 跟隨符號連結。另一種選擇是編寫一個簡短的腳本,
socat
以普通使用者的身份呼叫,並stellarium
使用它創建的連結,並socat
在完成後終止。使用該腳本啟動stellarium
.