USB छिपाई डिवाइस पर अनुमतियाँ बदलने के लिए udev कॉन्फ़िगर करें?


21

मेरे पास एक USB पैमाना, एक USB HID है। वर्तमान में, जब इसे प्लग इन किया जाता है, तो अनुमतियाँ केवल सुपरयुसर को इसे एक्सेस करने की अनुमति देती हैं। मैं इस उपकरण तक किसी को भी पहुंचने देने के लिए udev को कैसे कॉन्फ़िगर कर सकता हूं? मेरे पास विक्रेता और उत्पाद ID हैं, लेकिन मैं इसके बजाय HID प्रकार के आधार पर मिलान करना चाहूंगा।

अभी, मुझे इस पर लागू होने वाले किसी भी मौजूदा नियम को खोजने में परेशानी हो रही है (मैं "hidraw" के लिए /lib/udev/rules.dऔर /etc/udev/rules.dअन्य चीजों के साथ)।

जवाबों:


21

आम तौर पर, यह इस तरह की सामग्री के साथ /etc/udev/rules.dनामित एक फ़ाइल में जोड़कर किया जाता है 50-usb-scale.conf:

SUBSYSTEM=="usb", ATTR{idVendor}=="HEX1", ATTR{idProduct}=="HEX2", MODE="0666"

जहां HEX1 और HEX2 को क्रमशः विक्रेता और उत्पाद आईडी से बदल दिया जाता है।

बजाय इंटरफ़ेस प्रकार पर से मेल करने के लिए, आप की जगह की कोशिश कर सकते ATTR{idVendor}=="HEX1", ATTR{idProduct}=="HEX2"के लिए एक मैच के साथ bInterfaceClassकिया जा रहा है 03(HID):

SUBSYSTEM=="usb", ATTR{bInterfaceClass}=="03", MODE="0666"

लेकिन चेतावनी दी है, कि चूहों और कीबोर्ड भी पकड़ लेंगे।


4
Ubuntu 14.04 पर आपको कोल के बिना MODE: = "0666" का उपयोग करना होगा, नियम कुछ भी नहीं करता है।
एडविनडब्ल्यू

2
14.04 पर इस फ़ाइल का .rulesएक्सटेंशन होना चाहिए। .confएक्सटेंशन वाली फ़ाइल काम नहीं करेगी।
चेरनो

1
lsusb -vvvआईडीप्रोडक्टर और आईडीवेंडर प्राप्त करने के लिए उपयोग करें
जेवियर 13

2
चूंकि यह सवाल Google आउटपुट में काफी लोकप्रिय है ... मुझे लगता है कि यह एटीटीआर होना चाहिए, एटीटीआर नहीं - कम से कम इस बदलाव ने इसे मेरे लिए तय किया।
शिशु

2
14.04.5 एलटीएस पर मैंने पाया: lsusbयह देखने के लिए एक अच्छी शुरुआत है कि कनेक्टेड और आईडी क्या है। idVendorऔर idProductमैच केस-संवेदी लगते हैं , इसलिए आईडी DA77मेरे लिए काम नहीं da77करता है लेकिन करता है। (हैंडी डायग्नोस्टिक: udevadm info --attribute-walk /dev/bus/usb/008/023बस 008 डिवाइस 023 मेरा उदाहरण; आपके lsusbलिए।) एक नियम जोड़ने के बाद, sudo udevadm control --reload-rulesऔर फिर sudo udevadm triggerरिबूट से बचा जाता है: परिवर्तन उसके बाद के सेकंड हैं । एटीटीआर बनाम एटीटीआरएस ने कोई बाधा नहीं बनाई। मेरी .rules फ़ाइल पढ़ता है SUBSYSTEM=="usb", ATTR{idVendor}=="da77", ATTR{idProduct}=="d12e", GROUP="users", MODE="0666":।
एल जोर्को

7

केवल सारांश के लिए:

आप इसके लिए फ़िल्टर कर सकते हैं:

  • idVendor
  • idProduct
  • धारावाहिक

और उपयोग करें:

== समानता के लिए तुलना करें।

! = असमानता के लिए तुलना करें।

= एक कुंजी के लिए एक मान असाइन करें। किसी सूची का प्रतिनिधित्व करने वाली कुंजी रीसेट कर दी जाती हैं और केवल यह एकल मान असाइन किया जाता है।

+ = एक कुंजी को मान जोड़ें जो प्रविष्टियों की सूची रखती है।

: = अंत में एक कुंजी के लिए एक मूल्य असाइन करें; किसी भी बाद के परिवर्तनों को अस्वीकार करें।

आप किसी विशिष्ट डिवाइस को / dev / ... में एक विशेष नया पथ दे सकते हैं।
उदाहरण:

KERNEL=="hiddev*", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="05df", ATTRS{serial}=="1234567", GROUP="cdrom", OWNER="user28", MODE="0640", SYMLINK+="myhid"

का परिणाम:

आप डिवाइस को '/ dev / hiddevx' या '/ dev / myhid' के माध्यम से आसानी से एक्सेस कर सकते हैं, समूह 'cdrom' में प्रत्येक उपयोगकर्ता डिवाइस से पढ़ सकता है। मालिक 'user28' पढ़ और लिख सकता है।

या सबसे सरल:

KERNEL=="hiddev*", ATTRS{idVendor}=="16c0", MODE="0666"

परिणाम: प्रत्येक उपयोगकर्ता विक्रेता से हर hxevice का उपयोग कर सकता है 0x16c0

विवरण के लिए देखें: डॉक्स


2
:=तुलना के लिए नहीं है। डॉक्स कहते हैं, "अंत में एक कुंजी को एक मूल्य प्रदान करें; बाद में होने वाले परिवर्तनों को अस्वीकार करें।"
लुकास

5

मामले में आपको (मेरी तरह) ttyACM0अनुमति बदलने की आवश्यकता है , यह मेरी सेटिंग्स हैं:

KERNEL=="ttyACM0", MODE="0777"

यह तब विफल हुआ जब मैंने विक्रेता और उत्पाद आईडी को निर्दिष्ट करने का प्रयास किया। मुझे यकीन नहीं है कि क्यों


हाँ, कर्नेल विकल्प, USB सबसिस्टम एक से बेहतर अधिकांश HID उपकरणों के लिए काम करता है
Muriuki David

2

यदि इसका HIDRAW डिवाइस है, तो आपको करना होगा

chmod 0666 /dev/hidrawX

जहां X छिपाई गई डिवाइस नंबर है, उदाहरण के लिए hidraw0। तुम कर सकते हो

ls /dev/hid*

एक सूची देखने के लिए :) या बस करो

sudo chmod 0666 /dev/hidraw*

सभी hidraw उपकरणों के लिए सेट करने के लिए, शायद अनुशंसित नहीं है।


2

Ubuntu 18.04 अद्यतन / स्पष्टीकरण:

Kees Cook का जवाब करीब है, लेकिन 18.04 में काम करने के लिए 2 बदलावों की आवश्यकता है (वर्तमान रिलीज़ और केवल एक जिसे मैंने इस पर परीक्षण किया है)।

  1. Lsusb के साथ अपना idVendor और idProduct ढूँढें
    • यह "आईडी" के बाद 2 हेक्स मान होगा, जो एक बृहदान्त्र द्वारा अलग किया जाता है। मैं एक स्कैनर जोड़ रहा हूँ। lsusb ने मुझे दिया:
      बस 001 डिवाइस 011: आईडी 04 बी 8: 014 ए सेको एप्सों कॉर्प। 
  2. रूट के रूप में /etc/udev/rules.d में एक फ़ाइल जोड़ें
    • 50-usb-epsonscanner.rules जैसा कुछ
    • एक्सटेंशन ".rules" होना चाहिए  
  3. उस फ़ाइल में जोड़ें:
    SUBSYSTEM == "usb", ATTRS {idVendor} == "04b8", ATTR {idProduct} == "014a", MODE = "0666"
    लेकिन अपने idVendor और idProduct हेक्स मूल्यों के साथ।
    • ध्यान दें कि यह "एटीटीआरएस" नहीं "एटीटीआर" है।
  4. पुन लॉगिन। रिबूट करने की आवश्यकता नहीं है।

ATTRSविक्रेता और उत्पाद ID दोनों के लिए? फिर आपका कोड नमूना गलत है (जैसा कि आप बाद में दो पंक्तियों में बताते हैं)।
नव पद आधुनिक

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