Program Arduino hanya berfungsi ketika dijalankan sebagai root

19

Mengunggah sketsa sederhana sepertinya berhasil ketika saya menjalankan program Arduino sebagai root ( sudo). Saya ingin menjalankannya sebagai pengguna biasa. Adakah yang pernah mengalami masalah yang sama sebelumnya dan memperbaikinya?

Inilah yang saya peroleh dari lsusb:

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

Dan program Arduino mengidentifikasinya sebagai /dev/ttyACM0. Berikut ini izinnya:

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

Ini adalah keluaran dari id

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

Ketika saya mengunggah sketsa dari contoh, sebagai pengguna biasa, saya menemukan kesalahan ini:

avrdude:stk500_recv(): programmer not responding

Setiap saran dipersilahkan.

demam
sumber
Lihat apakah ini membantu, bagian "SET THE PERMISSION"
alexan_e
4
Dan +1 karena tidak menerima situasi untuk menjalankan IDE sebagai root, tetapi mencoba mencari cara untuk menyelesaikan masalah dengan benar.
jippie
Apa kesalahan tepat yang Anda dapatkan ketika Anda mencoba menjalankan IDE di bawah pengguna yang tidak memiliki hak istimewa? Anda mungkin perlu mengaktifkan output verbose di Preferencesmenu.
jippie
Pastikan Anda terhubung ke perangkat yang benar, dengan mencabut kabel, lalu tunggu beberapa detik, lalu pasang kembali, lalu periksa output dmesguntuk file perangkat yang terdaftar.
jippie
Memeriksa itu, perangkat ditemukan dengan benar /dev/ttyACM0: USB ACM device. Jadi, sepertinya tidak masalah bagi saya. Di sisi lain, log dari kompilasi dan pengunggahan (harus mengaktifkannya di Preferensi), tampak menjanjikan. Saya sepertinya tidak bisa menyalinnya dari program Arduino :(. (Mungkin mereka menulis ke file di suatu tempat?)
feverDream

Jawaban:

13

Solusi termudah adalah menambahkan diri Anda ke dialoutgrup.

Pertama buat catatan dari output dari id. Simpan dalam file (bukan /tmpkarena dibersihkan pada reboot). Jika Anda melihat hasilnya, Anda akan melihat bahwa pengguna Anda terdaftar untuk beberapa grup dan grup-grup tersebut mewakili hak istimewa tambahan pada sistem. Secara default Arduino Anda ditetapkan ke grup dialoutkarena terdaftar sebagai antarmuka serial dan pada masa lalu ini sering digunakan untuk ... keluar, menggunakan modem.

Untuk menambahkan diri Anda ke dialoutgrup, keluarkan perintah berikut:

sudo usermod -a -G dialout $USER

Jangan lupa -abendera (untuk menambahkan grup daripada mengganti) atau Anda akan memiliki masalah yang sama sekali berbeda. Ini adalah alasan untuk membuat salinan idoutput ke file, jadi jika Anda mengacaukan setidaknya Anda tahu apa yang dikonfigurasi pengguna Anda seperti sebelumnya.

Kemudian logout dan log in dan itu akan berfungsi sejak saat itu.

Secara opsional Anda dapat memeriksa ulang output idterhadap output yang Anda simpan sebelumnya.

jippie
sumber
terima kasih @jippie, atas jawaban yang bijaksana. Saya telah menambahkan diri saya ke dialoutgrup, tetapi masalahnya tampaknya masih berlanjut. Saya telah memodifikasi pertanyaan saya dengan output dari idperintah.
feverDream
Kesan saya dari pembaruan Anda adalah bahwa penyebab pasti masalah telah bergeser ke masalah berikutnya. Anda sedang dalam perjalanan untuk menyelesaikannya. Apa yang terjadi ketika kamu cat /dev/ttyACM0? Apakah ada kesalahan?
jippie
Tidak, file perangkat sepertinya kosong, ketika saya catitu.
feverDream
Empty is OK, asalkan Anda tidak mendapatkan pesan kesalahan.
jippie
9

Saran yang sering diulang untuk "hanya tidak sudo usermod -aG dialout <username>pernah bekerja untuk saya, dan saya akhirnya menemukan alasannya. Di komputer saya, /dev/ttyUSB0adalah dari grup serialdan tidak dialout, jadi menambahkan nama pengguna saya untuk dialouttidak melakukan apa-apa.

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

Akhirnya: sudo usermod -aG <group-name> <username>perbaiki untuk saya.

Yang memalukan, ini juga secara eksplisit disebutkan di sini di bawah "SET THE PERMISSION". Mendesah.

hoosierEE
sumber
Ya, ada baiknya memeriksa grup pemilik yang sebenarnya. Juga file perangkat dapat berupa ttyUSB # atau ttyACM # (atau apa pun secara teoritis) tergantung pada tipe board, driver kernel, dan akhirnya konfigurasi udev atau apa pun yang menciptakan node.
Chris Stratton
Ini juga disebutkan di arduino.cc/en/Guide/Linux#toc6
Roberto Tyley
0

Ini terjadi pada saya. Dalam kasus saya, saya telah memutakhirkan versi arduino dan sepertinya file preferensi menyebabkan masalah. Hapus saja file ~ / .arduino / preferences.txt (dengan Arduino IDE ditutup).

Langkah:

  1. Tutup Arduino IDE
  2. jalankan ini:

    rm ~ / .arduino / preferensi.txt

  3. Luncurkan Arduino IDE

Ini bekerja untuk saya, semoga berhasil untuk orang lain. Saya menggunakan Linux Mint 17 dan saya memutakhirkan dari Arduino 1.05 ke Arduino 1.06 dengan mengekstraksi Arduino IDE, saya tidak menggunakan yang ada di repo. (Tentu saja, setelah menambahkan pengguna Anda ke grup yang sesuai seperti yang disebutkan oleh orang lain, tetapi jika itu tidak membantu Anda mencoba ini)

soynerdito
sumber
Mungkin terkait dengan ini, satu efek samping dari menjalankan alat sebagai root adalah Anda dapat meninggalkan file sementara, konfigurasi, atau proyek yang akun Anda tidak dapat modifikasi atau bersihkan.
Chris Stratton