โปรแกรม Arduino จะทำงานเมื่อทำงานเป็นรูทเท่านั้น


19

การอัพโหลดภาพร่างอย่างง่ายดูเหมือนว่าจะทำงานเมื่อฉันเรียกใช้โปรแกรม Arduino ในฐานะรูท ( sudo) ฉันต้องการเรียกใช้ในฐานะผู้ใช้ทั่วไป มีใครประสบปัญหาเดียวกันก่อนและแก้ไขหรือไม่

นี่คือสิ่งที่ฉันได้รับจาก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

ข้อเสนอแนะใด ๆ ยินดีต้อนรับ


ดูว่าสิ่งนี้ช่วยได้หรือไม่ส่วน "ตั้งค่าสิทธิ์"
alexan_e

4
และ +1 สำหรับการไม่ยอมรับสถานการณ์ให้รัน IDE ในฐานะรูท แต่พยายามหาวิธีแก้ไขปัญหาให้ถูกต้อง
jippie

อะไรคือข้อผิดพลาดที่แน่นอนที่คุณได้รับเมื่อคุณพยายามเรียกใช้ IDE ภายใต้ผู้ใช้ที่ไม่มีสิทธิ์ คุณอาจต้องเปิดใช้งานเอาต์พุต verbose ในPreferencesเมนู
jippie

ตรวจสอบให้แน่ใจว่าคุณกำลังเชื่อมต่อกับอุปกรณ์ที่ถูกต้องโดยถอดปลั๊กแล้วรอสักครู่แล้วจึงถอดออกจากนั้นตรวจสอบเอาต์พุตของdmesgไฟล์อุปกรณ์ที่ลงทะเบียนไว้
jippie

/dev/ttyACM0: USB ACM deviceตรวจสอบว่าอุปกรณ์ที่มีการค้นพบอย่างถูกต้องตาม ดังนั้นมันไม่ได้เป็นปัญหาสำหรับฉัน ในอีกทางบันทึกจากการรวบรวมและอัพโหลด (ต้องเปิดใช้งานพวกเขาในการตั้งค่า) ดูเหมือนสัญญา ฉันดูเหมือนจะไม่สามารถคัดลอกพวกเขาจากโปรแกรม arduino :(. (พวกเขาอาจจะเขียนไปยังไฟล์ที่ไหนสักแห่ง?)
feverDream

คำตอบ:


13

ทางออกที่ง่ายที่สุดคือการเพิ่มตัวเองในdialoutกลุ่ม

idครั้งแรกให้จดบันทึกของการส่งออกจาก บันทึกไว้ในไฟล์ (ไม่ใช่ใน/tmpขณะที่ล้างออกตอนรีบูต) หากคุณดูผลลัพธ์คุณจะสังเกตเห็นว่าผู้ใช้ของคุณสมัครใช้งานหลายกลุ่มและกลุ่มเหล่านั้นเป็นตัวแทนสิทธิพิเศษในระบบ ตามค่าเริ่มต้น Arduino ของคุณถูกกำหนดให้กับกลุ่มdialoutเพราะลงทะเบียนเป็นส่วนต่อประสานแบบอนุกรมและในสมัยก่อนสิ่งเหล่านี้มักถูกใช้เพื่อ ... โทรออกโดยใช้โมเด็ม

ในการเพิ่มตัวคุณเองในdialoutกลุ่มออกคำสั่งต่อไปนี้:

sudo usermod -a -G dialout $USER

อย่าลืมการ-aตั้งค่าสถานะ (สำหรับการผนวกกลุ่มแทนการแทนที่) มิฉะนั้นคุณจะมีปัญหาแตกต่างกันโดยสิ้นเชิง นี่คือเหตุผลในการทำสำเนาของidเอาต์พุตไปยังไฟล์ดังนั้นในกรณีที่คุณทำอย่างน้อยคุณก็รู้ว่าสิ่งที่ผู้ใช้ของคุณได้รับการกำหนดค่าเช่นก่อน

จากนั้นออกจากระบบและเข้าสู่ระบบและควรทำงานจากจุดนั้น

คุณสามารถเลือกที่จะตรวจสอบผลลัพธ์ของคุณidกับผลลัพธ์ที่คุณบันทึกไว้ก่อน


ขอบคุณ @ jippie สำหรับคำตอบที่รอบคอบ ฉันเพิ่มตัวเองลงในdialoutกลุ่ม แต่ปัญหายังคงมีอยู่ ฉันแก้ไขคำถามด้วยผลลัพธ์จากidคำสั่ง
feverDream

ความประทับใจจากการอัปเดตของคุณคือสาเหตุที่แท้จริงของปัญหาได้เปลี่ยนไปสู่ปัญหาถัดไป คุณกำลังจะไปแก้ปัญหา จะเกิดอะไรขึ้นเมื่อคุณcat /dev/ttyACM0? มันโยนข้อผิดพลาดหรือไม่?
jippie

ไม่มีแฟ้มอุปกรณ์ที่ดูเหมือนว่าจะว่างเมื่อฉันcatมัน
feverDream

ว่างเปล่าเป็นปกติตราบใดที่คุณไม่ได้รับข้อความแสดงข้อผิดพลาด
jippie

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" ถอนหายใจ


ใช่มันคุ้มค่าที่จะตรวจสอบกลุ่มที่เป็นเจ้าของจริง นอกจากนี้ไฟล์อุปกรณ์สามารถเป็นได้ทั้ง ttyUSB # หรือ ttyACM # (หรือตามหลักวิชาอะไรก็ได้) ขึ้นอยู่กับประเภทของบอร์ด, ไดรเวอร์เคอร์เนล, และการกำหนดค่าในท้ายที่สุดของ udev หรืออะไรก็ตามที่สร้างโหนด
Chris Stratton

มันยังกล่าวถึงที่arduino.cc/en/Guide/Linux#toc6
Roberto Tyley

0

สิ่งนี้เกิดขึ้นกับฉัน ในกรณีของฉันฉันได้อัปเกรดรุ่นของ arduino และดูเหมือนว่าไฟล์การตั้งค่าเป็นสาเหตุของปัญหา เพียงแค่ลบไฟล์ ~ / .arduino / preferences.txt (เมื่อปิด Arduino IDE)

ขั้นตอน:

  1. ปิด Arduino IDE
  2. ดำเนินการนี้:

    rm ~ / .arduino / preferences.txt

  3. เรียกใช้ Arduino IDE

สิ่งนี้ใช้ได้กับฉันหวังว่ามันจะใช้ได้ผลกับคนอื่น ฉันใช้ Linux Mint 17 และฉันอัปเกรดจาก Arduino 1.05 เป็น Arduino 1.06 โดยแยก Arduino IDE ออกฉันไม่ได้ใช้งานใน repo (แน่นอนหลังจากเพิ่มผู้ใช้ของคุณไปยังกลุ่มที่เกี่ยวข้องตามที่คนอื่นพูดถึง แต่ถ้าไม่ช่วยให้คุณลอง)


อาจเกี่ยวข้องกับสิ่งนี้ผลข้างเคียงหนึ่งของการเรียกใช้เครื่องมือในฐานะรูทคือคุณสามารถท้ายทิ้งไฟล์ชั่วคราวกำหนดค่าหรือโปรเจ็กต์ที่บัญชี ordinay ของคุณไม่สามารถแก้ไขหรือล้างได้
Chris Stratton
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.