Skonfigurować udev, aby zmienić uprawnienia na urządzeniu USB HID?

21

Mam wagę USB, USB HID. Obecnie po podłączeniu uprawnienia pozwalają tylko administratorowi na dostęp do niego. Jak skonfigurować udev, aby ktokolwiek mógł uzyskać dostęp do tego urządzenia? Mam identyfikator dostawcy i produktu, ale zamiast tego chciałbym dopasować go na podstawie typu HID.

Teraz, mam problem ze znalezieniem jakiegokolwiek istniejącej reguły, które odnoszą się do tego (I grepped dla „hidraw” w /lib/udev/rules.di /etc/udev/rules.d, między innymi).

erjiang
źródło

Odpowiedzi:

21

Zwykle odbywa się to poprzez dodanie do /etc/udev/rules.dpliku o nazwie 50-usb-scale.conftakiej jak ta:

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

Gdzie HEX1 i HEX2 są zastąpione odpowiednio przez dostawcę i identyfikator produktu.

Aby zamiast tego dopasować typ interfejsu, możesz spróbować zastąpić ATTR{idVendor}=="HEX1", ATTR{idProduct}=="HEX2" dopasowaniem dla bInterfaceClassbycia 03(HID):

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

Ale ostrzegam, że złapie także myszy i klawiatury.

Kees Cook
źródło
4
W Ubuntu 14.04 musisz użyć TRYBU: = "0666", bez dwukropka reguła nic nie robi.
EdwinW
2
14.04 ten plik musi mieć .rulesrozszerzenie. Plik z .confrozszerzeniem nie będzie działać.
cherno
1
użyj, lsusb -vvvaby uzyskać idProduct i idVendor
Xavier13
2
Ponieważ to pytanie jest dość popularne w wynikach Google ... Myślę, że powinien to być ATTRS, a nie ATTR - przynajmniej ta zmiana mnie naprawiła.
infthi
2
14.04.5 LTS znalazłem: lsusbto dobry początek, aby zobaczyć, co jest połączone i identyfikatory. idVendori idProductdopasowania wydają się rozróżniać małe i wielkie litery , więc ID DA77nie działa dla mnie, ale da77działa. (Handy diagnostyczny: udevadm info --attribute-walk /dev/bus/usb/008/023, autobus 008 urządzenie 023 mój przykład; lsusb. Na Twoim) Po dodaniu reguły, sudo udevadm control --reload-rulesa następnie sudo udevadm triggerpozwala uniknąć ponownego uruchomienia: zmiany są sekundy po tym. ATTR vs ATTRS nie postawił żadnych szans. Mój plik .rules brzmi: SUBSYSTEM=="usb", ATTR{idVendor}=="da77", ATTR{idProduct}=="d12e", GROUP="users", MODE="0666".
El Zorko
7

Tylko dla podsumowania:

Możesz filtrować według:

  • idVendor
  • idProduct
  • seryjny

I użyć:

== Porównaj dla równości.

! = Porównaj nierówności.

= Przypisz wartość do klucza. Klucze reprezentujące listę są resetowane i przypisywana jest tylko ta pojedyncza wartość.

+ = Dodaj wartość do klucza, który zawiera listę wpisów.

: = Ostatecznie przypisz wartość do klucza; nie zezwalaj na późniejsze zmiany.

Możesz nadać określonemu urządzeniu określoną nową ścieżkę w / dev / ...
Przykład:

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

Prowadzi do:

Możesz łatwo uzyskać dostęp do urządzenia poprzez '/ dev / hiddevx' lub poprzez '/ dev / myhid', każdy użytkownik w grupie „cdrom” może czytać z urządzenia. Właściciel „user28” może czytać i pisać.

lub najprostszy:

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

Wyniki w: Każdy użytkownik może uzyskać dostęp do każdego urządzenia ukrytego od dostawcy 0x16c0

Aby uzyskać szczegółowe informacje, zobacz: Dokumenty

rundekugel
źródło
2
:=nie służy do porównań. Dokumenty mówią: „Ostatecznie przypisz wartość do klucza; nie zezwalaj na późniejsze zmiany”.
Lucas
5

W razie potrzeby zmiany ttyACM0uprawnień (takich jak ja) , oto moje ustawienia:

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

Nie powiodło się, gdy próbowałem określić dostawcę i identyfikator produktu. Nie jestem pewien dlaczego.

Rodo
źródło
Tak, opcja jądra działa na większości urządzeń HID, lepszych niż podsystem USB
Muriuki David
2

Jeśli jest to urządzenie HIDRAW, musisz

chmod 0666 /dev/hidrawX

gdzie X to ukryty numer urządzenia, np. hidraw0. możesz to zrobić

ls /dev/hid*

aby zobaczyć listę :) Lub po prostu zrób

sudo chmod 0666 /dev/hidraw*

ustawić dla wszystkich urządzeń hidraw, prawdopodobnie nie zalecane.

Muriuki David
źródło
2

Aktualizacja / wyjaśnienie Ubuntu 18.04:

Odpowiedź Keesa Cooka jest bliska, ale wymaga 2 zmian, aby działać w 18.04 (bieżącej wersji i tylko jednej, na której ją testowałem).

  1. Znajdź swój idVendor i idProduct za pomocą lsusb .
    • Będzie to 2 wartości szesnastkowe po „ID”, oddzielone dwukropkiem. Dodam skaner. lsusb dał mi:
      Magistrala 001 Urządzenie 011: ID 04b8: 014a Seiko Epson Corp. 
  2. Jako root dodaj plik do /etc/udev/rules.d
    • Coś jak 50-usb-epsonscanner.rules
    • Rozszerzenie musi mieć postać „.rules”  
  3. W tym pliku dodaj:
    SUBSYSTEM == „usb”, ATTRS {idVendor} == „04b8”, ATTR {idProduct} == „014a”, MODE = „0666”
    Ale dzięki wartościom szesnastkowym idVendor i idProduct.
    • Pamiętaj, że to „ATTRS”, a nie „ATTR”.
  4. Zaloguj się ponownie. Nie ma potrzeby ponownego uruchamiania.
gatohaus
źródło
ATTRSzarówno dla dostawcy, jak i identyfikatora produktu? Wtedy twój przykładowy kod jest nieprawidłowy (tak jak podajesz dwie linie później).
neo post modern
Tylko drugi to ATTR. Działa tutaj. Zgaduję, że to błąd, który można zmienić bez ostrzeżenia.
gatohaus