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

किसी भी सुझाव का स्वागत है।


देखें कि क्या यह मदद करता है, खंड "सेट द
पेर्मिसन

4
और आईडीई को रूट के रूप में चलाने के लिए स्थिति को स्वीकार नहीं करने के लिए +1, लेकिन यह पता लगाने की कोशिश करें कि समस्या को ठीक से कैसे हल किया जाए।
जिप्पी

जब आप एक गैर-विशेषाधिकार प्राप्त उपयोगकर्ता के तहत IDE को चलाने का प्रयास करते हैं तो आपको क्या सटीक त्रुटि मिलती है? आपको Preferencesमेनू में वर्बोज़ आउटपुट को सक्षम करने की आवश्यकता हो सकती है ।
जिप्पी

सुनिश्चित करें कि आप सही डिवाइस से कनेक्ट कर रहे हैं, अनप्लग करके, फिर कुछ सेकंड के लिए प्रतीक्षा करें, फिर उत्तर दें, फिर dmesgपंजीकृत डिवाइस फ़ाइल के आउटपुट की जांच करें ।
जिप्पी

जाँच की गई कि, उपकरण ठीक से खोजा गया है /dev/ttyACM0: USB ACM device। तो, यह मेरे लिए समस्या की तरह नहीं लगता है। दूसरी ओर, संकलन और अपलोडिंग से लॉग (उन्हें वरीयता में सक्षम करना था), आशाजनक लगता है। मैं सिर्फ उन्हें arduino प्रोग्राम से कॉपी करने के लिए प्रतीत नहीं कर सकता :(! (वे कहीं एक फ़ाइल के लिए लिख रहे हैं हो सकता है?)
बुखार

जवाबों:


13

सबसे आसान उपाय यह है कि अपने आप को dialoutसमूह में जोड़ें ।

सबसे पहले आउटपुट से नोट करें id। इसे फाइल में सेव करें ( /tmpरिबूट पर साफ नहीं होता है)। यदि आप आउटपुट को देखते हैं, तो आप देखेंगे कि आपका उपयोगकर्ता कई समूहों के लिए साइन इन है और वे समूह सिस्टम पर अतिरिक्त विशेषाधिकारों का प्रतिनिधित्व करते हैं। डिफ़ॉल्ट रूप से आपके Arduino को समूह को सौंपा जाता है dialoutक्योंकि यह एक सीरियल इंटरफ़ेस के रूप में पंजीकृत होता है और पुराने दिनों में इनका अक्सर उपयोग किया जाता था ... एक मॉडेम का उपयोग करके, डायल करें।

dialoutसमूह में खुद को जोड़ने के लिए , निम्नलिखित आदेश जारी करें:

sudo usermod -a -G dialout $USER

-aध्वज को न भूलें (प्रतिस्थापित करने के बजाय समूहों को जोड़ने के लिए) या आपको पूरी तरह से अलग समस्याएं होंगी। idफ़ाइल में आउटपुट की प्रतिलिपि बनाने का यही कारण है , इसलिए यदि आप कम से कम यह जानते हैं कि आपका उपयोगकर्ता पहले से कॉन्फ़िगर किया गया था, तो आपको गड़बड़ करना होगा।

फिर लॉग आउट करें और लॉग इन करें और यह उस बिंदु से काम करना चाहिए।

वैकल्पिक रूप से आप अपने द्वारा idपहले सेव किए गए आउटपुट के खिलाफ आउटपुट की जांच कर सकते हैं ।


विचारशील उत्तर के लिए @jippie, धन्यवाद। मैंने खुद को dialoutसमूह में जोड़ा है , लेकिन समस्या अभी भी बनी हुई है। मैंने अपने प्रश्न को idकमांड से आउटपुट के साथ संशोधित किया है ।
बुखारड्रीम

आपके अपडेट से मेरी धारणा यह है कि समस्या का सटीक कारण अगले मुद्दे पर स्थानांतरित हो गया है। आप इसे हल करने के लिए अपने रास्ते पर हैं। क्या होता है जब आप cat /dev/ttyACM0? क्या यह एक त्रुटि फेंकती है?
जिप्पी

नहीं, डिवाइस फ़ाइल खाली लगती है, जब मैं catइसे।
बुखारड्रीम

खाली ठीक है, जब तक कि आपको एक त्रुटि संदेश नहीं मिलता है।
जिप्पी

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 के कॉन्फ़िगरेशन या जो कुछ भी नोड बनाता है, के आधार पर हो सकता है।
क्रिस स्ट्रैटन

यह भी उल्लेख किया गया है पर arduino.cc/en/Guide/Linux#toc6
रॉबर्टो Tyley

0

मेरे साथ ऐसा होता है। मेरे मामले में, मैंने arduino के संस्करण को अपग्रेड किया था और लगता है कि प्राथमिकताएं फ़ाइल समस्या का कारण बन रही थी। बस ~ / .arduino / वरीयताओं को हटा दें। टेक्स्ट फ़ाइल (Arduino IDE बंद होने के साथ)।

कदम:

  1. Arduino IDE बंद करें
  2. इसे निष्पादित करें:

    rm ~ / .arduino / प्राथमिकताएं

  3. Arduino IDE लॉन्च करें

इसने मेरे लिए काम किया, आशा है कि यह किसी और के लिए काम करेगा। मैं लिनक्स मिंट 17 का उपयोग कर रहा हूं और मैंने Arduino 1.05 से Arduino IDE निकालकर Arduino 1.05 में अपग्रेड किया है, मैं रेपो में एक का उपयोग नहीं कर रहा हूं। (बेशक, अपने उपयोगकर्ता को दूसरों द्वारा बताए गए संबंधित समूह में जोड़ने के बाद, लेकिन अगर यह आपकी कोशिश करने में मदद नहीं करेगा)


संभवतः इससे संबंधित, रूट के रूप में चल रहे टूल का एक साइड इफेक्ट यह है कि आप अस्थायी, कॉन्फ़िगरेशन या प्रोजेक्ट फ़ाइलों को पीछे छोड़ सकते हैं, जिन्हें आपका अध्यादेश खाता संशोधित या साफ नहीं कर सकता है।
क्रिस स्ट्रैटन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.