सीरियल पोर्ट टर्मिनल> ओपन / देव / ttyS0 नहीं कर सकता: अनुमति से इनकार किया


19

मेरे पास इस बॉक्स पर विंडोज एक्सपी था और यह विफल हो गया। यह सोचकर कि यह भ्रष्ट था ओएस मैंने पुनः स्थापित करने की कोशिश की, और यह विफल रहा। लेकिन फिर मैंने उबंटू को स्थापित करने की कोशिश की, और मैं इसे यूएसबी या एचडी से नहीं चला सका।

क्या मेम ने टेस्ट किया और पता चला कि मेरी 512MB की एक स्टिक (2 थी) फेल हो गई। मैंने खराब को हटा दिया और उबंटू स्थापित करने में सक्षम था लेकिन यह सुस्त था।

मैं तूफान सैंडी के लिए अपने पैकेट रेडियो को जल्दी से स्थापित करने की कोशिश कर रहा था। सीरियल पोर्ट टर्मिनल डाउनलोड किया और कुछ उपयोग करने में सक्षम था, लेकिन सिस्टम लॉक अप करता रहा। तो इसके बगल में स्थापित Xubuntu, बॉक्स के लिए रैम प्राप्त करने के लिए अगले दिन बाहर चलाने की योजना बना रहा है। Xubuntu पर रखो और अब मैं सीरियल पोर्ट टर्मिनल के साथ निम्नलिखित त्रुटि प्राप्त कर रहा हूं।

Cannot open /dev/ttyS0: Permission denied

मैं सीरियल पोर्ट टर्मिनल का उपयोग करने में सक्षम होना चाहता हूं, या Xubuntu के बराबर है, इसलिए मैं अपने kpc3 पैकेट टर्मिनल का उपयोग कर सकता हूं, अपने कंप्यूटर के पीछे कॉम पोर्ट से कनेक्ट कर सकता हूं।

कोई विचार?

जवाबों:


39

टैटी डिवाइस "डायलआउट" समूह से संबंधित हैं, मुझे संदेह है कि आप इस समूह के सदस्य नहीं हैं और इसलिए / dev / ttyS0 तक पहुंच से वंचित हैं, इसलिए आपको उस समूह में खुद को जोड़ना होगा।

पहले जाँच लें कि क्या आप उस समूह के सदस्य हैं:

groups ${USER}

.. यह आपके द्वारा संबंधित सभी समूहों को सूचीबद्ध करेगा। यदि आप डायलआउट ग्रूप से संबंधित नहीं हैं, तो अपने आप को इसमें जोड़ें, उदाहरण के लिए:

sudo gpasswd --add ${USER} dialout

फिर आपको प्रभावी होने के लिए लॉग आउट करना होगा और फिर से लॉग इन करना होगा। फिर देखें कि क्या यह आपकी समस्या को ठीक करता है।


यहां तक ​​कि आईडी 1000 के साथ डायलआउट समूह उपयोगकर्ता में होने से सीरियल पोर्ट को पढ़ने के लिए नहीं खोला जा सकता है। रिबूट के बाद। लेकिन, जब मैं उसी निष्पादन योग्य के लिए सूडो का उपयोग करता हूं, तो यह खोलने में सक्षम होता है /dev/ttyS0। क्या संभव कारण?
टॉमिलोव अनातोली

3
@ हमारी समस्या समान थी और यह इसलिए था क्योंकि समूह dialoutपरिभाषित नहीं था। रनिंग newgrp dialoutने समस्या को ठीक कर दिया।
theGr8_Nik

@ TheGr8_Nik धन्यवाद। आपके समाधान ने Ubuntu 16.04 पर काम किया। कोई रिबूट शामिल नहीं है। डिफ़ॉल्ट रूप से, इस सिस्टम में समूह का नाम नहीं था dialout; groupsआदेश के माध्यम से जाँच की । dialoutआदेश के माध्यम से समूह में उपयोगकर्ता नाम जोड़ने के बाद भी sudo usermod -a username -G dialout। उपयोग करने के बाद newgrp dialout, इस कमांड esptool.py -p /dev/ttyUSB0 flash_idने काम किया।
सूर्य भालू

11

मेरे लिए काम करने वाला एकमात्र समाधान है: (हर बार जब मैं मशीन को बूट करता हूं)

sudo chmod 666 /dev/ttys0

यह वास्तव में स्थापना के समय तय किया जाना चाहिए। मैं 15.10 पर हूं और 16.04 एलटीएस की कोशिश कर चुका हूं, अभी भी वहीं है। ऐसा एक साधारण तय लगता है।

पुराने संस्करणों 10.04LTS में यह समस्या नहीं थी।


2
रास्पबेरी पाई 3 के साथ यह काम है, लेकिन जब मैं रिबूट अनुमतियों को खो दिया।
J261

1
डायलआउट के लिए मेरे उपयोगकर्ता नाम के लिए अनुमतियों को जोड़ना ठीक काम किया, बहुत आसान फिक्स।
DRJ101

6

आप बस इस कमांड का उपयोग कर सकते हैं:

sudo adduser $USER dialout

यह डायलआउट समूह में वर्तमान उपयोगकर्ता को जोड़ देगा। लॉग इन करें और इसे प्रभावी होने के लिए।


4

उबंटू 18.04 पर, मैंने निम्नलिखित कमांड के साथ इस मुद्दे को तय किया:

sudo usermod -a -G tty $USER
sudo usermod -a -G dialout $USER

और इसके बाद, रिबूट।

यदि आपके पास अभी भी समस्या है, तो इसके साथ डिबग करने का प्रयास करें:

strace -ff <COMMAND> > strace.txt 2>&1

और स्ट्रेस में "इनकार" की तलाश करें।


3

विभिन्न मंचों के आसपास एक नज़र था और यह अनुमतियों से संबंधित बग प्रतीत होता है। यहां बताया गया है कि मुझे समस्या (लंबे संस्करण) के आसपास कैसे मिली। आपको BOTH cuऔर setserialसंकुल स्थापित करने की आवश्यकता होगी ।

तीन टर्मिनल टैब्स में, आउटपुट से मॉनिटर किया गया है # tail -f /var/log/messages कि हम कैसे जानते हैं कि हमारे पास है /dev/ttyUSB0या नहीं।

दूसरे टैब में, ls -lयह अनुमतियाँ देखने के लिए इस उपकरण पर केवल एक लूप चलाया गया और यह ग्रुप आईडी 'डायलआउट' है। यह महत्वपूर्ण बिट है। किसी कारण के लिए, आपके उपयोगकर्ता को इस GID का उपयोग करने के लिए करना होगा cu, इसलिए ...

तीसरे टैब में, रूट के रूप में, # newgrp dialout(डायलआउट के GID के साथ पत्राचार करने के लिए) किया गया। के साथ परीक्षण किया गया # touch /tmp/anything... ls -lइस फ़ाइल पर करने से पता चलता है कि इसे रूट द्वारा एक डायलआउट समूह के साथ बनाया गया है, इसलिए हम # cu -l /dev/ttyUSB0 इसके लिए तैयार हैं ... मेरे मामले में मुझे अपेक्षित शीघ्रता को देखने के लिए फिर से वापसी करने की आवश्यकता है, अन्य मामलों में गति की आवश्यकता हो सकती है निर्दिष्ट किया जाएगा।


यह वास्तविक टुकड़ा है कि मुझे मदद मिली: किसी कारण के लिए, अपने उपयोगकर्ता चाहिए इस GID का उपयोग घन करने के लिए है, तो ... । बहुत - बहुत धन्यवाद।
ΤΖΩΤΖΙΟΥ

1

यहाँ समाधान है:

मैंने सिर्फ उबंटू 18 में अपने ऑपरेटिंग सिस्टम को अपडेट किया था। आम तौर पर मैं Arduino वेब दृश्य के माध्यम से arduino IDE स्थापित करूंगा क्योंकि उबंटू सॉफ्टवेयर पोर्टल के माध्यम से प्रदान किया गया एक हमेशा पुराना संस्करण था, और मैं नवीनतम सुविधाओं और बोर्ड का समर्थन चाहता था। हालाँकि, जब से मैंने अभी नया ऑपरेटिंग सिस्टम स्थापित किया है, मुझे लगा कि ubuntu के आधिकारिक सॉफ्टवेयर सेंटर में IDE का नवीनतम संस्करण सूचीबद्ध होगा, और इसने किया।

अब रसदार भाग के लिए! मेरे लैपटॉप और मेरे डेस्कटॉप दोनों में सीरियल पोर्ट तक पहुंचने में समान समस्याएं थीं। मैंने डायल-अप समूह का उपयोगकर्ता हिस्सा बना लिया था, और सीरियल पोर्ट के लिए अनुमतियाँ सेट कर दी थी, लेकिन हमेशा लॉग आउट करना पड़ता था, फिर हर बार जब मैं रिबूट होता था, तो इसे फिर से करें! मज़ा नहीं!।

इस बार, यह काम नहीं किया। यहां तक ​​कि सॉफ्टवेयर केंद्र में सॉफ्टवेयर के लिए अनुमतियों का विकल्प सीरियल पोर्ट "डिस्कनेक्ट" हो जाता है। सूडो का उपयोग करके टर्मिनल विंडो के माध्यम से मैन्युअल रूप से सभी अनुमतियाँ दिए जाने के बाद भी पोर्ट को अनुमति देने का कोई विकल्प नहीं है।

मैंने सॉफ्टवेयर केंद्र से Arduino IDE की स्थापना रद्द करने का निर्णय लिया, और इसे वेब दृष्टि से स्थापित किया, इसलिए मैंने किया। इस बार मैंने इंस्टॉल फ़ाइलों को पढ़ा, बस यह देखने के लिए कि क्या यह सीरियल पोर्ट के लिए अनुमतियों का उल्लेख करता है या नहीं, निश्चित रूप से ***** ने ऐसा किया था! ****** सभी पोर्ट पूरी पहुंच की अनुमति के साथ सेट किए गए हैं, बोर्ड भर में उपयोगकर्ता की पहुंच। पता चला कि यह जवाब था। Arduino द्वारा प्रदान की गई arduino-linux-setup.sh फ़ाइल को चलाने के बाद, सभी सीरियल पोर्ट समस्याओं को हल किया गया था। निम्नलिखित arduino-linux-setup.shफ़ाइल का एक अंश है ;

echo ""
echo "******* Add User to dialout,tty, uucp, plugdev groups *******"
echo ""

sudo usermod -a -G tty $1
sudo usermod -a -G dialout $1
sudo usermod -a -G uucp $1
sudo groupadd plugdev
sudo usermod -a -G plugdev $1


acmrules () {

    echo ""
    echo "# Setting serial port rules"
    echo ""

    cat <<EOF
    "KERNEL="ttyUSB[0-9]*", TAG+="udev-acl", TAG+="uaccess", OWNER="$1"
   "KERNEL="ttyACM[0-9]*", TAG+="udev-acl", TAG+="uaccess", OWNER="$1"
   EOF

}

तो आप देखते हैं कि KERNEL भी प्रभावित है। मेरा सुझाव:

Arduino ide वेब साइट से स्थापित करें। इस समय सॉफ़्टवेयर केंद्र की उपेक्षा करें, जब तक कि इसकी मरम्मत न हो जाए। हाँ सॉफ़्टवेयर केंद्र स्थापित करने के दौरान सीरियल पोर्ट के लिए और हमेशा के लिए अनुमति नहीं दे रहा है।

समस्या सुलझ गयी!


0

मेरे मामले में समस्या अभी भी मौजूद है, यहां तक ​​कि जब मैं अपने उपयोगकर्ता को समूह का उपयोग करके जोड़ता हूं:

इसलिए जब मैं उपयोग करता हूं:

sudo gpasswd --add ${USER} dialout

और जब मैं टाइप करता हूं: groupsमुझे यह परिणाम मिला है:

ilyahoo adm cdrom sudo dip plugdev lpadmin sambashare

लेकिन जब मैंने id -Gn ilyahooपुटपुट लिखा है:

ilyahoo adm tty dialout cdrom sudo dip plugdev lpadmin sambashare 

मुझे पता है कि एक समस्या है कि मुझे नहीं पता कि यह ईमानदारी से क्या है।

एक समाधान पाने के लिए मैंने सिर्फ टाइप किया

newgrp ilyahoo

और समस्या ठीक हो गई।


Ubahoo askubuntu में आपका स्वागत है! कृपया हमारी गाइड लाइन के अनुसार पोस्ट को प्रारूपित करने का प्रयास करें। आउटपुट को अधिक पठनीय तरीके से प्रारूपित करने का प्रयास करें। धन्यवाद
abu_bua

1
@abu_bua कृपया कमांड आउटपुट के लिए कोड फ़ॉर्मेटिंग का उपयोग करें, न कि फ़ॉर्मेटिंग का।
मुरु

0

उत्तर सीधा है। USB पोर्ट तक पहुंच के लिए आपको अपने उपयोगकर्ता को दो समूहों में जोड़ने की आवश्यकता है। ये समूह हैं dialoutऔर tty:

sudo usermod -a -G dialout <user>
sudo usermod -a -G tty <user>

<user>उन आदेशों में वास्तविक उपयोगकर्ता नाम के साथ बदलें ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.