ルート権限なしで仮想シリアルポートを使用するには?

ルート権限なしで仮想シリアルポートを使用するには?

背景:使いたいです。 このWi-Fi-シリアルポートアダプタ 望遠鏡を操縦して 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機能します。ただし、標準ユーザー権限でポートを使用しようとすると、次のエラーが発生します。picocommpicosomm

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

これに特別なudevルールを定義して、標準ユーザー権限で仮想COMポートにアクセスできるようにする方法を知っていますか?

編集#1

Deckertの答えで好むアプローチに応じて、次のようになります。

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

これはmacOSでもうまく機能します(homebrewを介して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使用して通常のユーザーとして呼び出し、完了したら終了する短いスクリプトを作成することです。このスクリプトを使って始めてください。stellariumsocatstellarium

関連情報