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.


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.


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.


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


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)


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.