デフォルト以外のユーザーがシリアルデバイスttyUSB0を使用できるようにするにはどうすればよいですか?


35

2人のユーザーがいるUbuntu 11.10システムがあります。

  • 最初はインストール中に作成されました
  • 代わりに、2番目が作成されました。sudoersグループに属します。

問題は、2番目のデバイスがデバイスを使用しようとするとttyUSB0、次のエラーが返されることです。

"Could not open serial port /dev/ttyUSB0"

私はそれを使用して修正することができました:

sudo chown :second_user /dev/ttyUSB0

ただし、デバイスを切断して再接続すると、問題が再発します。

さまざまなユーザーがデバイスにアクセスできるようにする方法はありますか?特定のグループにユーザーを追加する必要があると思います。現在、所有者はでrootあり、グループはdialoutです。ただし、グループについてはわかりませんし、ユーザーを追加する方法もわかりません。

ありがとう!

回答:


48

お気づきのとおり、/dev/ttyUSB0デバイスにはのグループがありdialoutます。必要なことは、2番目のユーザーをdialoutグループに追加することだけです。

sudo adduser second_user dialout

これを有効にするには、second_userをログアウトして再度ログインする必要があります。


ジェレミー、ありがとう!これはsshアクセスでも機能しますか?ssh経由でpcにアクセスすると、同じ名前の2人のユーザーが表示されるためです。1つはローカルユーザーで、もう1つはsshであると思います。sshユーザーに所有権を与えるにはどうすればよいですか?
-Maverik

1
これにより、second_userはログイン、ssh、またはローカルからシリアルポートにアクセスできます。そのユーザーの特定のログインに所有権を割り当てる必要はありません。
ジェレミーカー

2
はい、あなたは正しいです。vis sshにアクセスするには、ログアウトしてから再度ログインする必要がありました。
Maverik

自動的にログインしたユーザーのセッションについては、X Window Systemに再ログインするだけでなく、コンピューターを再起動する必要があります。Ubuntu 19.04で観測されました。
タニウス

12

簡単な方法:

sudoedit /etc/udev/rules.d/50-myusb.rules

このテキストを保存します。

KERNEL=="ttyUSB[0-9]*",MODE="0666"
KERNEL=="ttyACM[0-9]*",MODE="0666"

デバイスを取り外して再接続すると、すべてのユーザーから読み取り/書き込みが可能になります!


ttyACMソケットの自家製デバイスの14.04で機能します。ありがとう。+1
非標準モデル

再プラグしてルールをリロードする前にこれを行う必要はありませんか?sudo udevadm control --reload
アレクシスペイクス

どのファイルシステムに/ etc / udevが保存されているか、およびどのバージョンのudevを使用しているかによって、実際に明示的にリロードする必要があるかもしれません。しかし、私が使用したほとんどのマシンでは、udevは(inotifyを使用して)自動的にそれを把握しているようです。
オリオンローラー

それは本当にそれが行われることになっている方法ではありません。USBシリアルデバイスはダイヤルアウトグループなどに属している必要があり、ユーザーをそれに追加する必要があります。あなたは何がUSBデバイスの他のタイプのために理にかなって提案されている
クリス・ストラットン

7

UDEVを使用できます。これは、デバイスを(他のものと一緒に)プラグインまたはアンプラグするたびにトリガーするシステムです。これを使用して、許可の設定など、さまざまなスクリプトを作成します。

実行sudoedit /etc/udev/rules.d/50-ttyusb.rulesしてそこに貼り付けます:

KERNEL=="ttyUSB[0-9]*",NAME="tts/USB%n",SYMLINK+="%k",GROUP="uucp",MODE="0666"

保存して終了し、再接続すると、稼働状態になります。許可を666に設定すると、誰でもデバイスに書き込むことができます。

私はこれを数年前のこのページに基づいていますが、ジェレミーのソリューションが機能しない場合はこのようなものが機能するはずです。


1
これはうまくいきました。つまり、udevルールを使用しましたが、自分のケースに合わせて構文を変更しました。linux.m2osw.com/sane-cannot-find-any-scanners-MODE = "0666"を使用する場合、おそらくGROUPは必要ないことに注意してください。どちらか一方のみが有用です。
アレクシスウィルケ14年

5

素晴らしい-ここで与えられたUDEVソリューションは私にとって切符でした。

Wine経由でIcomのCS-F3020_F5010_F5020プログラムをインストールし、Comポートのリンクを次のように作成しました。

ln -s /dev/ttyUSB0 ~/.wine/dosdevices/com1 but nothing. 

それから、/ dev / ttyUSB0のアクセス権を変更してアクセスできるようにする必要があることに気付きました。これは、USBのプラグを抜き差しするまでうまく機能します。その後、アクセス許可を変更する必要があります。

ユーザーをダイヤルアウトグループに追加しようとしましたが、これは何らかの理由で問題を解決しませんでした。

UDEVを使用すると、パズルの最後のピースが解決されます。これで、Linuxを使用してIcomラジオをプログラムし、USB /シリアルデバイスのプラグインとプラグを抜くことができます。うわー ありがとう。


3

udevルールは機能しますが、書かれているように、すべてのttyUSB*デバイスを誰でもアクセスできるようにするという非常に厄介な副作用があります。これは、システム上の他の要素によってはセキュリティリスクになる可能性があるため、良くありません。

代わりに、より選択的なudevルールを使用してください。たとえば、一連のスイッチを操作するUSB​​デバイスがあります。プラグインされたdmesgから、製造元のIDと製品コード(さらに、この場合はデバイスのシリアル番号)を確認できます。追加できます:

ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001"

上記のカーネル行に追加すると、ルールはそのデバイスにのみ適用されます。MODE変数だけに割り当てるよりもグループを設定するよりもさらに良い:

GROUP="whatever", MODE="0660"

グループ ' whatever'のユーザーのみが書き込みアクセス権を取得します。

ジョン・ボウラー

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.