Chương trình Arduino chỉ hoạt động khi chạy bằng root


19

Tải lên các bản phác thảo đơn giản dường như hoạt động khi tôi chạy chương trình Arduino dưới dạng root ( sudo). Tôi muốn chạy nó như một người dùng thông thường. Có ai phải đối mặt với cùng một vấn đề trước đây và khắc phục nó?

Đây là những gì tôi có được từ lsusb:

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

Và chương trình Arduino xác định nó là /dev/ttyACM0. Đây là quyền của nó:

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

Đây là đầu ra từ id

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

Khi tôi tải lên một bản phác thảo từ các ví dụ, như một người dùng thông thường, tôi gặp phải lỗi này:

avrdude:stk500_recv(): programmer not responding

Mọi góp ý đều được chào đón.


Xem nếu điều này có ích, phần "THIẾT LẬP GIẤY PHÉP"
alexan_e

4
Và +1 vì đã không chấp nhận tình huống để chạy IDE với quyền root, nhưng cố gắng tìm ra cách giải quyết vấn đề chính xác.
jippie

Lỗi chính xác bạn gặp phải khi bạn cố chạy IDE theo người dùng không có đặc quyền là gì? Bạn có thể cần phải bật đầu ra dài dòng trong Preferencesmenu.
jippie

Đảm bảo bạn đang kết nối với đúng thiết bị, bằng cách rút phích cắm, sau đó đợi vài giây, sau đó cắm lại, sau đó kiểm tra đầu ra của dmesgtệp thiết bị được đăng ký.
jippie

Kiểm tra rằng, thiết bị được phát hiện đúng như /dev/ttyACM0: USB ACM device. Vì vậy, nó dường như không phải là vấn đề với tôi. Mặt khác, các bản ghi từ biên dịch và tải lên (phải kích hoạt chúng trong Tùy chọn), có vẻ đầy hứa hẹn. Tôi dường như không thể sao chép chúng từ chương trình arduino :(. (Có thể họ đang ghi vào một tệp ở đâu đó?)
feverDream 15/03/2016

Câu trả lời:


13

Giải pháp đơn giản nhất là thêm chính mình vào dialoutnhóm.

Đầu tiên hãy ghi chú đầu ra từ id. Lưu nó trong tập tin (không phải trong /tmpđó được làm sạch khi khởi động lại). Nếu bạn nhìn vào đầu ra, bạn sẽ nhận thấy rằng người dùng của bạn đã đăng ký một số nhóm và những nhóm đó đại diện cho các đặc quyền bổ sung trên hệ thống. Theo mặc định, Arduino của bạn được gán cho nhóm dialoutvì nó đăng ký như một giao diện nối tiếp và ngày xưa chúng thường được sử dụng để ... quay số, sử dụng modem.

Để thêm chính mình vào dialoutnhóm, hãy ra lệnh sau:

sudo usermod -a -G dialout $USER

Đừng quên -acờ (đối với các nhóm bổ sung thay vì thay thế) hoặc bạn sẽ gặp các vấn đề hoàn toàn khác nhau. Đây là lý do để tạo một bản sao của idđầu ra thành một tệp, vì vậy trong trường hợp bạn làm hỏng ít nhất bạn sẽ biết người dùng của bạn đã được cấu hình như thế nào trước đây.

Sau đó đăng xuất và đăng nhập và nó sẽ hoạt động từ thời điểm đó.

Tùy chọn bạn có thể kiểm tra lại đầu ra idso với đầu ra bạn đã lưu trước đó.


cảm ơn @jippie, vì câu trả lời chu đáo Tôi đã thêm mình vào dialoutnhóm, nhưng vấn đề dường như vẫn còn tồn tại. Tôi đã sửa đổi câu hỏi của tôi với đầu ra từ idlệnh.
gây sốt

Ấn tượng của tôi từ bản cập nhật của bạn là nguyên nhân chính xác của vấn đề đã chuyển sang vấn đề tiếp theo. Bạn đang trên đường giải quyết nó. Điều gì xảy ra khi bạn cat /dev/ttyACM0? Nó có ném lỗi không?
jippie

Không, tập tin thiết bị dường như trống rỗng, khi tôi catnó.
gây sốt

Làm trống là được, miễn là bạn không nhận được thông báo lỗi.
Jippie

9

Lời khuyên lặp đi lặp lại là "đừng sudo usermod -aG dialout <username>bao giờ làm việc cho tôi, và cuối cùng tôi đã hiểu tại sao. Trên máy của tôi, /dev/ttyUSB0là của nhóm serialchứ không phải dialout, vì vậy, thêm tên người dùng của tôi vào dialoutkhông làm gì cả.

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

Cuối cùng: sudo usermod -aG <group-name> <username>sửa nó cho tôi.

Xấu hổ thay, điều này cũng được đề cập rõ ràng ở đây trong phần "THIẾT LẬP PERMISSION". Thở dài.


Có, đáng để kiểm tra nhóm sở hữu thực tế. Ngoài ra, tệp thiết bị có thể là ttyUSB # hoặc ttyACM # (hoặc về mặt lý thuyết) tùy thuộc vào loại bảng, trình điều khiển hạt nhân và cuối cùng là cấu hình của udev hoặc bất cứ thứ gì tạo ra các nút.
Chris Stratton

Nó cũng được đề cập tại arduino.cc/en/Guide/Linux#toc6
Roberto Tyley 18/03/2017

0

Điều này xảy ra với tôi. Trong trường hợp của tôi, tôi đã nâng cấp phiên bản arduino và dường như tệp ưu tiên đã gây ra sự cố. Chỉ cần xóa tệp ~ / .arduino / Preferences.txt (đã đóng Arduino IDE).

Các bước:

  1. Đóng Arduino IDE
  2. thực hiện điều này:

    rm ~ / .arduino / Preferences.txt

  3. Khởi chạy Arduino IDE

Điều này làm việc cho tôi, hy vọng nó làm việc cho người khác. Tôi đang sử dụng Linux Mint 17 và tôi đã nâng cấp từ Arduino 1.05 lên Arduino 1.06 bằng cách giải nén Arduino IDE, tôi không sử dụng cái này trong repo. (Tất nhiên, sau khi thêm người dùng của bạn vào nhóm tương ứng như được đề cập bởi những người khác, nhưng nếu điều đó không giúp bạn thử điều này)


Có thể liên quan đến điều này, một tác dụng phụ của các công cụ đang chạy là root là bạn có thể để lại các tệp tạm thời, cấu hình hoặc dự án mà tài khoản thứ tự của bạn không thể sửa đổi hoặc dọn sạch.
Chris Stratton
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.