2010-11-29 14 views
8

मैं लिनक्स पर libusb-1.0 का उपयोग करके एक विशिष्ट यूएसबी एचआईडी उत्पाद (विक्रेता और उत्पाद आईडी द्वारा पहचाना गया) के साथ संवाद करने के लिए एक छोटा प्रोग्राम लिख रहा हूं। अभी, मुझे प्रोग्राम को रूट के रूप में चलाने की ज़रूरत है क्योंकि "libusb को यूएसबी डिवाइस नोड्स को लिखने की आवश्यकता है"। क्या मुझे आवश्यक डिवाइस पर अनुमतियों को बदलने का कोई तरीका है ताकि मुझे अपने प्रोग्राम को रूट के रूप में चलाने की आवश्यकता न हो?लिनक्स पर यूएसबी डिवाइस तक पहुंच प्राप्त करें (libusb-1.0)?

उत्तर

10

आधुनिक Linux सिस्टम पर, udevd (man 7 udev) जब वे में खामियों को दूर कर रहे हैं यूएसबी उपकरणों के लिए उपकरण नोड्स पैदा करता है। एक udev नियम है कि आपके डिवाइस से मेल खाता है (उदाहरण के लिए। आप USB विक्रेता और उत्पाद आईडी से मेल खा सकते हैं) जोड़ें, और डिवाइस नोड के OWNER/GROUP/MODE सेट करता है।

सबसे अच्छा तरीका शायद उन उपयोगकर्ताओं के लिए एक नया समूह बनाने के लिए है जो डिवाइस तक पहुंचने में सक्षम होना चाहिए, फिर इसे समूह के मालिक के रूप में udev नियम में सेट करें। यह सुनिश्चित करने के लिए कि आपके पास समूह पढ़ने/लिखने की अनुमति है, आपको MODE का उपयोग करने की आवश्यकता हो सकती है। उदाहरण के लिए।

SUBSYSTEMS=="usb", ATTRS{idVendor}=="ffee", ATTRS{idProduct}=="5a5a", MODE="0660", GROUP="foobar" 
+2

यह मैं पर काम नहीं किया जब तक मैं ऊपर टिप्पणी के साथ चारों ओर "0660" – kynnysmatto

+0

एक समय पर उद्धरण चिह्नों कहा: अपने नियम शायद कुछ की तरह दिखाई देगा। काम करने के लिए "0660" के आसपास आवश्यक कोट्स। मैंने मूल उत्तर में एक संपादन सबमिट किया लेकिन, हां, इसे बहुत मामूली होने के रूप में खारिज कर दिया गया:/ –

+1

@ फिल-लैविन: मुझे नहीं पता कि आपका परिवर्तन क्यों अस्वीकार कर दिया गया था, लेकिन मैंने इसे किसी भी तरह से लागू किया है। – caf

संबंधित मुद्दे