Arduinoプログラムは、rootとして実行した場合にのみ機能します


19

ルート(sudo)としてArduinoプログラムを実行すると、簡単なスケッチをアップロードできるようです。通常のユーザーとして実行したいと思います。誰もが以前に同じ問題に直面し、それを修正したことがありますか?

ここから私が入手したものですlsusb

$ lsusb
Bus 002 Device 022: ID 2341:0043 Arduino SA Uno R3 (CDC ACM)

そして、Arduinoプログラムはそれをとして識別します/dev/ttyACM0。その権限は次のとおりです。

$ ls -l /dev/ttyACM0 
crw-rw---T 1 root dialout 166, 0 Mar 14 22:03 /dev/ttyACM0

以下はからの出力です id

groups=1000(abhiram),20(dialout),24(cdrom),25(floppy),29(audio),
30(dip),44(video),46(plugdev),105(scanner),110(bluetooth),112(netdev)

例からスケッチをアップロードすると、通常のユーザーとして次のエラーが発生します。

avrdude:stk500_recv(): programmer not responding

どんな提案でも大歓迎です。


かどうかを確認し、これは、セクション「SET許可を」助け
alexan_e

4
IDEをrootとして実行するという状況を受け入れず、問題を適切に解決する方法を見つけようとするために+1。
ジッピー

非特権ユーザーの下でIDEを実行しようとしたときに表示される正確なエラーは何ですか?Preferencesメニューで詳細出力を有効にする必要がある場合があります。
ジッピー14年

プラグを抜いて正しいデバイスに接続していることを確認してから、数秒待ってから再接続し、dmesg登録されているデバイスファイルの出力を確認します。
ジッピー14年

デバイスがとして適切に検出されることを確認しました/dev/ttyACM0: USB ACM device。だから、それは私には問題のように思えません。一方、コンパイルおよびアップロードのログ(Preferencesで有効にする必要があります)は有望なようです。私はArduinoのプログラムからそれらをコピーすることができないよう:((彼らはファイルのどこかに書いているかもしれ?)。
feverDream

回答:


13

最も簡単な解決策は、自分自身をdialoutグループに追加することです。

まず、からの出力を書き留めますid。ファイルに保存します(/tmp再起動時に消去されるのではなく)。出力を見ると、ユーザーが複数のグループにサインアップしており、それらのグループがシステム上の追加の特権を表していることに気付くでしょう。Arduinoはデフォルトでdialoutシリアルインターフェイスとして登録され、昔はモデムを使用してダイヤルアウトするためによく使用されていたため、デフォルトでグループに割り当てられます。

dialoutグループに自分を追加するには、次のコマンドを発行します。

sudo usermod -a -G dialout $USER

-aフラグを忘れないでください(置換ではなくグループを追加するため)。まったく異なる問題が発生します。これがid出力のコピーをファイルに作成する理由です。したがって、少なくとも混乱した場合は、以前にユーザーがどのように構成されていたかがわかります。

その後、ログアウトしてログインすると、その時点から機能するはずです。

オプションidで、以前に保存した出力に対して出力を再確認できます。


思いやりのある回答をありがとう@jippie。私はdialoutグループに自分自身を追加しましたが、問題はまだ残っているようです。idコマンドからの出力で質問を修正しました。
feverDream 14年

あなたの更新からの私の印象は、問題の正確な原因が次の問題にシフトしたということです。あなたはそれを解決しようとしています。あなたはどうなりますcat /dev/ttyACM0か?エラーがスローされますか?
ジッピー14年

いいえ、デバイスファイルは空のcatようです。
feverDream 14年

エラーメッセージが表示されない限り、空でもかまいません。
ジッピー14年

9

「何sudo usermod -aG dialout <username>度も私のために働いたことはありませんでした。私は最終的にその理由を見つけました。私のマシンで/dev/ttyUSB0は、グループserialではなくdialout、ですので、ユーザー名を追加してdialoutも何もしませんでした。

# ls -l
# crw-rw---- 1 root serial 188, 0 Mar 31 20:52 /dev/ttyUSB0
                    ^^^^^^ (group-name)

最後に:sudo usermod -aG <group-name> <username>私のためにそれを修正しました。

恥ずかしいことに、これは「SET THE PERMISSION」の下でも明示的に言及されています。ため息。


はい、実際の所有グループを確認する価値があります。また、デバイスファイルは、ボードタイプ、カーネルドライバー、最終的にはudevの構成またはノードを作成するものに応じて、ttyUSB#またはttyACM#(または理論的には任意)のいずれかになります。
クリスストラットン14


0

これは私に起こります。私の場合、私はarduinoのバージョンをアップグレードしていましたが、設定ファイルが問題を引き起こしていたようです。〜/ .arduino / preferences.txtファイルを削除するだけです(Arduino IDEを閉じた状態)。

手順:

  1. Arduino IDEを閉じます
  2. これを実行します:

    rm〜/ .arduino / preferences.txt

  3. Arduino IDEを起動します

これは私のために働いた、それが他の誰かのために働くことを願っています。Linux Mint 17を使用しており、Arduino IDEを抽出してArduino 1.05からArduino 1.06にアップグレードしましたが、リポジトリにあるものは使用していません。(もちろん、他の人が言及したように対応するグループにユーザーを追加した後、それがうまくいかない場合はこれを試してください)


これにおそらく関連して、ルートとしてツールを実行することの1つの副作用は、通常のアカウントが変更またはクリーンアップできない一時ファイル、構成ファイル、またはプロジェクトファイルを残すことになります。
クリスストラットン14年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.