กำหนดค่า udev เพื่อเปลี่ยนการอนุญาตบนอุปกรณ์ USB HID หรือไม่


21

ฉันมีสเกล USB, USB HID ปัจจุบันเมื่อเสียบปลั๊กแล้วสิทธิ์อนุญาตอนุญาตให้ superuser เข้าถึงได้เท่านั้น ฉันจะกำหนดค่า udev เพื่อให้ทุกคนเข้าถึงอุปกรณ์นี้ได้อย่างไร? ฉันมีผู้จำหน่ายและรหัสผลิตภัณฑ์ แต่ฉันต้องการจับคู่ตามประเภท HID แทน

ตอนนี้ฉันมีปัญหาในการค้นหากฎที่มีอยู่ที่ใช้กับสิ่งนี้ (ฉัน greed สำหรับ "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" โดยไม่มีเครื่องหมายจุดคู่กฎจะไม่ทำอะไรเลย
EdwinW

2
ในวันที่ 14.04 ไฟล์นี้จะต้องมี.rulesส่วนขยาย ไฟล์ที่มี.confนามสกุลไม่ทำงาน
cherno

1
ใช้lsusb -vvvเพื่อรับ idProduct และ idVendor
Xavier13

2
เนื่องจากคำถามนี้ค่อนข้างได้รับความนิยมใน google output ... ฉันคิดว่าควรเป็น ATTRS ไม่ใช่ ATTR - อย่างน้อยการเปลี่ยนแปลงนี้ก็ทำให้ฉันแก้ไขได้
infthi

2
ใน 14.04.5 LTS ที่ฉันพบ: lsusbเป็นการเริ่มต้นที่ดีในการดูว่ามีการเชื่อมต่อและ ID อะไร idVendorและการidProductจับคู่นั้นคำนึงถึงขนาดตัวพิมพ์ดังนั้น ID DA77ไม่ได้ผลสำหรับฉัน แต่da77ทำไม่ได้ (การวินิจฉัยที่มีประโยชน์: udevadm info --attribute-walk /dev/bus/usb/008/023อุปกรณ์บัส 008 023 เป็นตัวอย่างlsusbของคุณสำหรับคุณ) หลังจากเพิ่มกฎsudo udevadm control --reload-rulesแล้วsudo udevadm triggerหลีกเลี่ยงการรีบูต: การเปลี่ยนแปลงคือไม่กี่วินาทีหลังจากนั้น ATTR เทียบกับ ATTRS ไม่ทำอะไรเลย ไฟล์. rules ของฉันอ่าน: SUBSYSTEM=="usb", ATTR{idVendor}=="da77", ATTR{idProduct}=="d12e", GROUP="users", MODE="0666".
El Zorko

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"

ผลลัพธ์ใน: ผู้ใช้ทุกคนสามารถเข้าถึงทุก hiddevice จากผู้ขาย 0x16c0

ดูรายละเอียดได้ที่: เอกสาร


2
:=ไม่ได้สำหรับการเปรียบเทียบ เอกสารพูดว่า "กำหนดค่าให้กับคีย์ในที่สุดไม่อนุญาตการเปลี่ยนแปลงใด ๆ ในภายหลัง"
ลูคัส

5

ในกรณีที่คุณต้องการเปลี่ยนการอนุญาต (เช่นฉัน) ttyACM0นี่คือการตั้งค่าของฉัน:

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

มันล้มเหลวเมื่อฉันพยายามระบุผู้จัดจำหน่ายและรหัสผลิตภัณฑ์ ฉันไม่แน่ใจว่าทำไม


ใช่ตัวเลือกเคอร์เนลทำงานได้กับอุปกรณ์ HID ส่วนใหญ่ดีกว่าระบบย่อย USB
Muriuki David

2

หากเป็นอุปกรณ์ HIDRAW คุณจะต้อง

chmod 0666 /dev/hidrawX

โดยที่ X คือหมายเลขอุปกรณ์ hid เช่น hidraw0 คุณทำได้

ls /dev/hid*

เพื่อดูรายการ :) หรือเพียงแค่ทำ

sudo chmod 0666 /dev/hidraw*

เพื่อตั้งค่าสำหรับอุปกรณ์ hidraw ทั้งหมดอาจไม่แนะนำ


2

อัพเดต / ชี้แจงของ Ubuntu 18.04:

คำตอบของ Kees Cook นั้นใกล้เคียงกัน แต่ต้องการการเปลี่ยนแปลง 2 อย่างเพื่อทำงานใน 18.04 (รุ่นปัจจุบันและรุ่นเดียวที่ฉันได้ทำการทดสอบ)

  1. ค้นหา idVendor และ idProduct ของคุณด้วยlsusb
    • นี่จะเป็นค่าเลขฐานสิบหก 2 ค่าหลัง "ID" คั่นด้วยเครื่องหมายโคลอน ฉันกำลังเพิ่มสแกนเนอร์ lsusb ให้ฉัน:
      อุปกรณ์ 001 บัส 011: ID 04b8: 014a Seiko Epson Corp. 
  2. ในฐานะที่เป็นรากเพิ่มไฟล์ไปยัง/etc/udev/rules.d
    • บางอย่างเช่น50-USB-epsonscanner.rules
    • ส่วนขยายจะต้องเป็น ".rules"  
  3. ในไฟล์นั้นเพิ่ม:
    SUBSYSTEM == "usb", ATTRS {idVendor} == "04b8", ATTR {idProduct} == "014a", โหมด = "0666"
    แต่ด้วยค่าฐานสิบหก idVendor และ idProduct ของคุณ
    • โปรดทราบว่าเป็น "ATTRS" ไม่ใช่ "ATTR"
  4. Re: เข้าสู่ระบบ ไม่จำเป็นต้องรีบูท

ATTRSทั้งสำหรับผู้ขายและรหัสผลิตภัณฑ์? จากนั้นตัวอย่างโค้ดของคุณผิด (เช่นเดียวกับที่คุณระบุสองบรรทัดในภายหลัง)
ใหม่โพสต์โมเดิร์น

แค่อันที่สองคือ ATTR ทำงานที่นี่ ฉันเดาว่ามันเป็นข้อผิดพลาดที่สามารถเปลี่ยนแปลงได้โดยไม่มีการเตือนล่วงหน้า
gatohaus
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.