この現象は、IDEがArduinoデバイスにアクセスするための十分なパーミッションを持っていないためです。
Permissions
ターミナルで
ls -l /dev/ttyACM*
を実行してArduinoデバイスを見てみることにします。 出力はほとんど次のようになります。
crw-rw---- 1 root dialout 166, 0 Des 14 09:47 /dev/ttyACM0
「ACM」の最後の「0」は異なるかもしれませんし、複数のエントリがリストされているかもしれませんが、注目すべき部分は、前の文字とダッシュの文字列、およびroot
とdialout
という2つの名前です。
最初の名前root
はデバイスのオーナー、dialout
はデバイスのオーナーグループです。
前の文字とダッシュ、「c」以降がユーザーごとのデバイスに対する権限を表しています。 – 最初のトリプレットrw-
は、オーナー(root
)がこのデバイスを読み書きできることを意味します – 2番目のトリプレットrw-
は、オーナーグループのメンバー(dialout
)がこのデバイスを読み書きできることを意味します – 3番目のトリプレット---
は、他のユーザにはまったく権限がないことを意味します(他の誰もデバイスに対して読み書きできないことを意味します)
つまりroot
およびdialout
メンバー以外ではArduinoで何もできないことを意味します。 IDEをroot
として、またはdialout
のメンバーとして起動していないので、IDEはパーミッション不足でArduinoにアクセスできないのです。
自分自身をダイヤルアウトグループに追加する
しかし、待ってください! 先ほど、IDE を起動したときに、自分自身を dialout
グループに追加しました!
では、なぜ IDE はまだ Arduino にアクセスする権限を持っていないのでしょうか。
プロンプトが行った変更はログアウトして再びログインするまで適用されないため、作業を保存してログアウトし、再びログインしなければならないのです。
再度ログインして Arduino IDE を起動すると、Serial Port オプションが利用できるはずです。これを変更すると、Arduino にコードをアップロードできるはずです。