背景: このWifi-シリアルアダプタ を使用して、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
/dev/virtualcom0
を使用しようとしています。例: root権限でpicocomm
を実行している限り、picosomm
で動作します。しかし、標準のユーザー権限でポートを使用しようとすると、エラーが発生しました。
$ picocom /dev/virtualcom0 --baud 9600 --imap lfcrlf
FATAL: cannot open /dev/virtualcom0: Permission denied
おそらくこれのための特別なudevルールを定義することによって、標準のユーザー権限で仮想COMポートにアクセスできるようにする方法はありますか?
Dirktの答えの好ましいアプローチに従って、私は現在、以下を使用しています。
$ socat pty,link=/tmp/virtualcom0,raw tcp:10.0.0.1:4030
これはmacOSでも正常に機能することに注意してください(homebrew経由でsocatをインストールした後)。
なぜ仮想シリアルポートが必要なのか完全には理解していません。 telnet 10.0.0.1 4030
?
次に、通常のユーザーとしてsocat
なしでSudo
を実行し、アクセス可能なパスを選択します。 /tmp/vcom0
(または何でも)。
それが何らかの理由で機能せず、Sudo
を実行できることが明らかな場合は、所有者を変更してみてください
Sudo chown your_username /dev/virtualcom0
または権限
Sudo chmod o+rw /dev/virtualcom0
編集
特定の疑似ttyに対してudev
ルールを作成しようとしないでください。第一に、それがどの疑似ttyであるかを事前に知らないこと、第二に、疑似ttyが至る所で使用されていること、そして他のプログラムが別のユーザーのためにこの疑似ttyを作成した場合、他のプログラムは失敗します。
最もクリーンな解決策は、バリアント(1)(/tmp/vcom0
)。
他のバリアントを主張する場合は、socat
とchmod
/chown
の両方を含む短いスクリプトを作成し、Sudo
を使用してそのスクリプトを実行します。必要に応じて、readlink
を使用してシンボルリンクをたどることができます。
もう1つの方法は、通常のユーザーとしてsocat
と作成したリンクを使用してstellarium
の両方を呼び出し、完了時にsocat
を強制終了する短いスクリプトを作成することです。そのスクリプトを使用してstellarium
を開始します。
Socatのmanページを調べたところ、答えが見つかりました。
コマンドラインにさらにいくつかの式を追加することで、ptyの属性にモードとグループを追加できます。あなたの例に従うが、ダイヤルアウトグループが所有する新しいシリアルポートとそのグループの読み取り/書き込みアクセスを使用するには、次のようにします。
$ Sudo socat pty,link=/dev/virtualcom0,raw,group-late=dialout,mode=660 tcp:10.0.0.1:4030