USB HID cihazındaki izinleri değiştirmek için udev yapılandırılsın mı?


21

Bir USB ölçeğim var, bir USB HID. Şu anda, prize takıldığında, izinler yalnızca süper kullanıcının erişmesine izin veriyor. Udev'i birisinin bu cihaza erişmesine izin verecek şekilde nasıl yapılandırabilirim? Satıcı ve ürün kimlikleri var, ancak bunun yerine HID türüne göre eşleşmek istiyorum.

Şu anda, bu geçerli olduğu mevcut herhangi bir kural (I "hidraw" için grepped bulmakta zorlanıyorum /lib/udev/rules.dve /etc/udev/rules.ddiğer şeylerin yanı sıra,).

Yanıtlar:


21

Normalde, bu /etc/udev/rules.dbelki de 50-usb-scale.confbunun gibi içeriklerle adlandırılmış bir dosyaya ekleyerek yapılır :

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

Nerede HEX1 ve HEX2 sırasıyla satıcı ve ürün kimliğine sahip değiştirilir.

Yerine Arayüz türüne uyacak için, yerine deneyebilirsiniz ATTR{idVendor}=="HEX1", ATTR{idProduct}=="HEX2"için bir maç ile bInterfaceClassvarlık 03(HID):

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

Ancak, fareleri ve klavyeleri de yakalayacağı konusunda uyarılmalıdır.


4
Ubuntu 14.04'te MODE: = "0666" kullanmanız gerekir; kolon olmadan kural hiçbir şey yapmaz.
EdwinW

2
14.04 tarihinde bu dosyanın bir .rulesuzantısı olmalıdır. .confUzantılı bir dosya çalışmaz.
cherno 5

1
lsusb -vvvidProduct ve idVendor'u kullanmak için kullanın
Xavier13

2
Bu soru google çıktısında oldukça popüler olduğu için ... ATTRS olmalı, ATTR olmalı, en azından bu değişiklik benim için düzeltti.
infthi

2
14.04.5 tarihinde LTS buldum: lsusbneyin bağlı olduğunu ve kimlikleri görmek için iyi bir başlangıç. idVendorve idProducteşleşmeler büyük / küçük harfe duyarlı görünüyor , bu yüzden ID DA77benim için da77çalışmıyor, çalışıyor. (Kullanışlı tanı:, udevadm info --attribute-walk /dev/bus/usb/008/023bus 008 cihazı 023 örneğimi; lsusbsizin için.) Bir kural ekledikten sudo udevadm control --reload-rulessonra ve sudo udevadm triggeryeniden başlatmayı önler: değişiklikler bundan birkaç saniye sonra olur. ATTR vs ATTRS hiç şansını vermedi. Benim .rules dosya okur: SUBSYSTEM=="usb", ATTR{idVendor}=="da77", ATTR{idProduct}=="d12e", GROUP="users", MODE="0666".
El Zorko

7

Sadece özet için:

Şunlara filtre uygulayabilirsiniz:

  • idVendor
  • idProduct
  • seri

Ve kullan:

== Eşitlik için karşılaştırın.

! = Eşitsizlik için karşılaştırın.

= Bir tuşa bir değer atayın. Bir listeyi temsil eden tuşlar sıfırlanır ve yalnızca bu tek değer atanır.

+ = Girdilerin listesini içeren bir anahtara değer ekleyin.

: = Sonunda bir anahtara bir değer atama; daha sonra yapılan değişikliklere izin vermeyin.

Belirli bir aygıta / dev / ... öğesinde yeni bir yol verebilirsiniz.
Örnek:

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

Sonuçlar:

Cihaza '/ dev / hiddevx' veya '/ dev / myhid' üzerinden kolayca erişebilirsiniz, 'cdrom' grubundaki her kullanıcı cihazdan okuyabilir. 'User28' sahibi okuyabilir ve yazabilir.

veya en basit:

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

Sonuç olarak: Her kullanıcı, Satıcı 0x16c0’dan her bir aracıya erişebilir

Detaylar için bakınız: Dokümanlar


2
:=karşılaştırmalar için değildir. Belgeler "Son olarak bir anahtara bir değer atama; daha sonra yapılan değişikliklere izin verme" der.
Lucas

5

ttyACM0İzinleri (benim gibi) değiştirmeniz gerekirse , bu benim ayarlarım:

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

Satıcı ve ürün kimliğini belirlemeye çalıştığımda başarısız oldu. Neden olduğundan emin değilim.


Evet, Çekirdek seçeneği çoğu HID cihazında çalışır, USB alt sisteminden daha iyidir
Muriuki David

2

Eğer bir HIDRAW cihazı ise,

chmod 0666 /dev/hidrawX

burada X, hid cihaz numarasıdır, örneğin hidraw0. yapabilirsin

ls /dev/hid*

bir liste görmek için :) Veya sadece yapın

sudo chmod 0666 /dev/hidraw*

Tüm hidraw cihazlarını ayarlamak için, muhtemelen tavsiye edilmez.


2

Ubuntu 18.04 güncelleme / açıklama:

Kees Cook'un cevabı yakın ancak 18.04'te çalışması için 2 değişiklik gerektiriyor (şu anki sürüm ve bunu denedim.

  1. İdVendor'unuzu ve idProduct'ınızı lsusb ile bulun .
    • Bu, bir kolonla ayrılmış "ID" den sonra 2 onaltılık değer olacaktır. Bir tarayıcı ekliyorum. lsusb bana verdi:
      Otobüs 001 Cihaz 011: Kimlik 04b8: 014a Seiko Epson Corp. 
  2. Gibi root dosya eklemek /etc/udev/rules.d
    • 50-usb-epsonscanner.rules benzeri bir şey
    • Uzantı ".rules" olmalıdır  
  3. Bu dosyaya şunu ekleyin:
    SUBSYSTEM == "usb", ATTRS {idVendor} == "04b8", ATTR {idProduct} == "014a", MOD = "0666"
    Ancak idVendor ve idProduct hex değerlerinizle.
    • "ATTRS" değil, "ATTR" değil.
  4. Yeniden giriş. Yeniden başlatmaya gerek yok.

ATTRShem satıcı hem de ürün kimliği için? O zaman kod numaranız yanlış (iki satır sonra da belirttiğiniz gibi).
neo post modern

Sadece ikincisi ATTR. Burada çalışıyor. Uyarmadan değiştirilebilecek bir hata olduğunu tahmin ediyorum.
gatohaus
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.