Cấu hình udev để thay đổi quyền trên thiết bị USB HID?


21

Tôi có một thang đo USB, USB HID. Hiện tại, khi được cắm, các quyền chỉ cho phép siêu người dùng truy cập. Làm cách nào tôi có thể định cấu hình udev để cho phép mọi người truy cập thiết bị này? Tôi có ID nhà cung cấp và sản phẩm, nhưng tôi muốn khớp nó dựa trên loại HID thay thế.

Ngay bây giờ, tôi gặp khó khăn khi tìm bất kỳ quy tắc hiện hành nào áp dụng cho điều này (tôi đã tham gia "hidraw" trong /lib/udev/rules.d/etc/udev/rules.d, trong số những điều khác).

Câu trả lời:


21

Thông thường, điều này được thực hiện bằng cách thêm vào /etc/udev/rules.dmột tệp có thể được đặt tên 50-usb-scale.confvới nội dung như thế này:

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

Trong đó HEX1HEX2 được thay thế bằng id nhà cung cấp và sản phẩm tương ứng.

Để phù hợp vào loại giao diện thay vào đó, bạn có thể thử thay thế ATTR{idVendor}=="HEX1", ATTR{idProduct}=="HEX2"với một trận đấu cho bInterfaceClass03(HID):

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

Nhưng được cảnh báo, điều đó cũng sẽ bắt chuột và bàn phím.


4
Trên Ubuntu 14.04, bạn phải sử dụng MODE: = "0666", không có dấu hai chấm, quy tắc không làm gì cả.
EdwinW

2
Ngày 14.04, tập tin này phải có .rulesphần mở rộng. Một tệp có .confphần mở rộng sẽ không hoạt động.
cherno

1
sử dụng lsusb -vvvđể lấy idSản phẩm và idVendor
Xavier13

2
Vì câu hỏi này khá phổ biến trong đầu ra của google ... Tôi nghĩ rằng nó nên là ATTRS, không phải ATTR - ít nhất là sự thay đổi này đã khắc phục nó cho tôi.
infthi

2
Vào ngày 14.04.5 LTS tôi đã tìm thấy: lsusblà một khởi đầu tốt để xem những gì được kết nối và ID. idVendorvà các idProductkết quả khớp có vẻ phân biệt chữ hoa chữ thường , vì vậy ID DA77không hoạt động với tôi nhưng da77không. (Chẩn đoán tiện dụng : udevadm info --attribute-walk /dev/bus/usb/008/023, bus 008 thiết bị 023 ví dụ của tôi; lsusbcho bạn.) Sau khi thêm quy tắc, sudo udevadm control --reload-rulessau đó sudo udevadm triggertránh khởi động lại: thay đổi là vài giây sau đó. ATTR vs ATTRS không có tỷ lệ cược. Tập tin .rules của tôi đọc : SUBSYSTEM=="usb", ATTR{idVendor}=="da77", ATTR{idProduct}=="d12e", GROUP="users", MODE="0666".
El Zorko

7

Chỉ để tóm tắt:

Bạn có thể lọc cho:

  • chủ tịch
  • sản phẩm
  • nối tiếp

Và sử dụng:

== So sánh cho bình đẳng.

! = So sánh bất đẳng thức.

= Gán một giá trị cho một khóa. Các khóa đại diện cho một danh sách được đặt lại và chỉ giá trị duy nhất này được gán.

+ = Thêm giá trị vào khóa chứa danh sách các mục nhập.

: = Gán một giá trị cho khóa cuối cùng; không cho phép bất kỳ thay đổi sau này.

Bạn có thể cung cấp cho một thiết bị cụ thể một đường dẫn mới cụ thể trong / dev / ...
Ví dụ:

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

Kết quả trong:

Bạn có thể truy cập thiết bị thông qua '/ dev / hiddevx' hoặc qua '/ dev / myhid' một cách dễ dàng, mọi người dùng trong nhóm 'cdrom' đều có thể đọc từ thiết bị. Chủ sở hữu 'user28' có thể đọc và viết.

hoặc đơn giản nhất:

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

Kết quả trong: Mọi người dùng có thể truy cập mọi hiddevice từ Nhà cung cấp 0x16c0

Để biết chi tiết, xem: Tài liệu


2
:=không phải để so sánh. Tài liệu nói rằng "Gán một giá trị cho khóa cuối cùng; không cho phép bất kỳ thay đổi nào sau này."
Lucas

5

Trong trường hợp bạn cần thay đổi quyền (như tôi) ttyACM0, đây là cài đặt của tôi:

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

Nó đã thất bại khi tôi cố gắng chỉ định ID nhà cung cấp và sản phẩm. Tôi không chắc tại sao.


Vâng, tùy chọn Kernel hoạt động cho hầu hết các thiết bị HID, tốt hơn so với hệ thống con USB
Muriuki David

2

Nếu đó là một thiết bị HIDRAW, bạn phải

chmod 0666 /dev/hidrawX

Trong đó X là số thiết bị ẩn, ví dụ: hidraw0. bạn có thể làm

ls /dev/hid*

để xem danh sách :) Hoặc chỉ cần làm

sudo chmod 0666 /dev/hidraw*

để đặt cho tất cả các thiết bị hidraw, có thể không được khuyến nghị.


2

Cập nhật / làm rõ Ubuntu 18.04:

Câu trả lời của Kees Cook rất gần nhưng yêu cầu 2 thay đổi để hoạt động vào ngày 18.04 (bản phát hành hiện tại và chỉ có một bản tôi đã thử nghiệm này).

  1. Tìm idVendor và idSản phẩm của bạn với lsusb .
    • Đây sẽ là 2 giá trị hex sau "ID", được phân tách bằng dấu hai chấm. Tôi đang thêm một máy quét. lsusb đã cho tôi:
      Xe buýt 001 Thiết bị 011: ID 04b8: 014a Seiko Epson Corp. 
  2. Khi root thêm một tập tin vào /etc/udev/rules.d
    • Một cái gì đó như 50-usb-epsonscanner.rules
    • Phần mở rộng phải là ".rules"  
  3. Trong tập tin đó thêm:
    SUBSYSTEM == "usb", ATTRS {idVendor} == "04b8", ATTR {id sản phẩm} == "014a", MODE = "0666"
    Nhưng với các giá trị hex idVendor và id sản phẩm của bạn.
    • Lưu ý đó là "ATTRS" chứ không phải "ATTR".
  4. Đăng nhập lại. Không cần phải khởi động lại.

ATTRScả cho nhà cung cấp và ID sản phẩm? Sau đó, mẫu mã của bạn là sai (giống như bạn nêu hai dòng sau).
tân bài hiện đại

Chỉ cần thứ hai là ATTR. Hoạt động ở đây. Đang đoán đó là một lỗi có thể thay đổi mà không cần cảnh báo.
gatohaus
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.