2012-11-04 22 views
7

एक लिनक्स प्रोग्राम पर, कंसोल पर (जैसा कि कोई xorg, आदि नहीं है), मैं कीबोर्ड और चूहों को पढ़ने के लिए/dev/input/event * का उपयोग कर उपयोग कर रहा हूं, हालांकि मुझे उन्हें पढ़ने में सक्षम होने के लिए रूट होना आवश्यक है। रूट विशेषाधिकारों के बिना उस सामान को पढ़ने के लिए कोई वैकल्पिक रूप है (बिना परमिट और कॉन्फ़िगरेशन फ़ाइलों को बदलने के),?रूट अनुमति के बिना लिनक्स कच्चे इनपुट?

मुझे समझ में आता है कि डिफ़ॉल्ट रूप से ऐसा क्यों नहीं किया जाता है।

+1

आपको हमेशा ऐसा करने की अनुमति देने की अनुमति होगी। अन्यथा, एक कीबोर्ड लॉगर/स्निफर/जासूस संभव हो सकता है। और यूनिक्स को एक सुरक्षित, बहु-उपयोगकर्ता, प्रणाली के रूप में डिजाइन किया गया था ... –

उत्तर

6

यह देखने के लिए जांचें कि डिवाइस फ़ाइलों का कौन सा समूह संबंधित है। उदाहरण के लिए, यहाँ मैं:

 
$ ls -l /dev/input/ 
... 
crw-rw---- 1 root plugdev 13, 64 Nov 4 18:01 event0 
crw-rw---- 1 root plugdev 13, 65 Nov 4 18:01 event1 
crw-rw---- 1 root plugdev 13, 66 Nov 4 18:01 event2 
crw-rw---- 1 root plugdev 13, 67 Nov 4 18:01 event3 
crw-rw---- 1 root plugdev 13, 68 Nov 4 18:01 event4 
... 

अपने कार्यक्रम को क्रियान्वित करने उपयोगकर्ता इस सिस्टम पर plugdev समूह में की जरूरत है। शायद आपके सिस्टम पर कुछ ऐसा ही मामला है।

यदि आप इसे रोकने के लिए एक रास्ता मांग रहे हैं (समूह में होने के बिना डिवाइस को पढ़ना या लिखना), तो नहीं। यह उपयोगकर्ता समूहों के बावजूद सुरक्षा के उद्देश्य को स्पष्ट रूप से हार जाएगा।

इवेंट डिवाइस को पढ़ने का एक विकल्प सीधे उपयुक्त उपयोगकर्ता स्पेस एपीआई का उपयोग करना होगा। उदाहरण के लिए, कीबोर्ड पढ़ने के लिए आप ncurses का उपयोग करेंगे, और माउस को पढ़ने के लिए आप GPM का उपयोग करेंगे।

7

हाँ, यह एक udev नियम बनाने के द्वारा संभव है, इस HowTo

उदाहरण के लिए रूट के रूप में देखते हैं, फ़ाइल /etc/udev/rules.d/99-input.rules बनाएँ:

कर्नेल == "घटना *", नाम = "इनपुट /% कश्मीर", मोड = "660", ग्रुप = "इनपुट"

नोट: आप शायद पहले समूह "इनपुट" बनाने की आवश्यकता होगी।

+1

ठीक है, आपको udev नियम बनाने के लिए रूट की आवश्यकता है। – theomega

+0

@theomega हां, लेकिन इसकी आवश्यकता सिर्फ एक बार है और यह मोड को बदलने से कहीं बेहतर है। – iabdalkader