Konfigurasikan udev untuk mengubah izin pada perangkat USB HID?

21

Saya memiliki skala USB, USB HID. Saat ini, ketika dicolokkan, izin hanya memungkinkan superuser untuk mengaksesnya. Bagaimana saya bisa mengkonfigurasi udev agar orang lain mengakses perangkat ini? Saya memiliki ID vendor dan produk, tetapi saya ingin mencocokkannya berdasarkan tipe HID.

Saat ini, saya mengalami kesulitan menemukan aturan yang ada yang berlaku untuk ini (saya menerima "hidraw" di /lib/udev/rules.ddan /etc/udev/rules.d, di antara hal-hal lain).

erjiang
sumber

Jawaban:

21

Biasanya, ini dilakukan dengan menambahkan ke /etc/udev/rules.dfile yang mungkin dinamai 50-usb-scale.confdengan konten seperti ini:

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

Di mana HEX1 dan HEX2 diganti masing-masing dengan vendor dan id produk.

Untuk mencocokkan pada jenis Antarmuka sebagai gantinya, Anda dapat mencoba mengganti ATTR{idVendor}=="HEX1", ATTR{idProduct}=="HEX2"dengan kecocokan untuk bInterfaceClassmenjadi 03(HID):

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

Tetapi berhati-hatilah, itu juga akan menangkap tikus dan keyboard.

Kees Cook
sumber
4
Pada ubuntu 14.04 Anda harus menggunakan MODE: = "0666", tanpa titik dua, aturannya tidak melakukan apa-apa.
EdwinW
2
Pada 14,04 file ini harus memiliki .rulesekstensi. File dengan .confekstensi tidak akan berfungsi.
cherno
1
gunakan lsusb -vvvuntuk mendapatkan idProduct dan idVendor
Xavier13
2
Karena pertanyaan ini cukup populer di keluaran google ... Saya pikir itu harus ATTRS, bukan ATTR - setidaknya perubahan ini memperbaikinya untuk saya.
infthi
2
Pada 14.04.5 LTS saya temukan: lsusbadalah awal yang baik untuk melihat apa yang terhubung dan ID. idVendordan idProductkecocokan tampaknya peka terhadap huruf besar-kecil , jadi ID DA77tidak berfungsi untuk saya tetapi da77tidak. (Handy diagnostik udevadm info --attribute-walk /dev/bus/usb/008/023:, bus 008 perangkat 023 contoh saya; lsusbuntuk Anda.) Setelah menambahkan aturan, sudo udevadm control --reload-rulesdan kemudian sudo udevadm triggerhindari reboot: perubahan terjadi beberapa detik setelah itu. ATTR vs ATTRS tidak membuat masalah. Saya berkas .rules berbunyi: SUBSYSTEM=="usb", ATTR{idVendor}=="da77", ATTR{idProduct}=="d12e", GROUP="users", MODE="0666".
El Zorko
7

Hanya untuk ringkasannya:

Anda dapat memfilter untuk:

  • idVendor
  • idProduct
  • serial

Dan gunakan:

== Bandingkan untuk kesetaraan.

! = Bandingkan untuk ketimpangan.

= Tetapkan nilai ke kunci. Kunci yang mewakili daftar diatur ulang dan hanya nilai tunggal ini yang ditetapkan.

+ = Tambahkan nilai ke kunci yang menyimpan daftar entri.

: = Tetapkan nilai pada kunci akhirnya; larang perubahan selanjutnya.

Anda dapat memberikan perangkat tertentu jalur baru tertentu di / dev / ...
Contoh:

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

Hasil dalam:

Anda dapat mengakses perangkat melalui '/ dev / hiddevx' atau melalui '/ dev / myhid' dengan mudah, setiap pengguna dalam grup 'cdrom' dapat membaca dari perangkat. Pemilik 'user28' dapat membaca dan menulis.

atau paling sederhana:

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

Hasil dalam: Setiap pengguna dapat mengakses setiap hiddevice dari Vendor 0x16c0

Untuk detailnya lihat: Documents

rundekugel
sumber
2
:=bukan untuk perbandingan. Documents mengatakan, "Tetapkan nilai pada suatu kunci akhirnya; larang perubahan selanjutnya."
Lucas
5

Jika Anda perlu mengubah (seperti saya) ttyACM0izin, ini adalah pengaturan saya:

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

Gagal ketika saya mencoba menentukan vendor dan ID produk. Saya tidak yakin mengapa.

Rodo
sumber
Ya, opsi Kernel bekerja untuk sebagian besar perangkat HID, lebih baik daripada subsistem USB
Muriuki David
2

Jika ini merupakan perangkat HIDRAW, Anda harus melakukannya

chmod 0666 /dev/hidrawX

di mana X adalah nomor perangkat hid, misalnya hidraw0. Anda dapat melakukan

ls /dev/hid*

untuk melihat daftar :) Atau lakukan saja

sudo chmod 0666 /dev/hidraw*

untuk mengatur semua perangkat hidraw, mungkin tidak disarankan.

Muriuki David
sumber
2

Pembaruan / klarifikasi Ubuntu 18.04:

Jawaban Kees Cook dekat tetapi membutuhkan 2 perubahan untuk berfungsi dalam 18,04 (rilis saat ini dan hanya satu yang saya uji ini aktif).

  1. Temukan idVendor dan idProduct Anda dengan lsusb .
    • Ini akan menjadi 2 nilai hex setelah "ID", dipisahkan oleh titik dua. Saya menambahkan pemindai. lsusb memberi saya:
      Bus 001 Perangkat 011: ID 04b8: 014a Seiko Epson Corp. 
  2. Sebagai root, tambahkan file ke /etc/udev/rules.d
    • Sesuatu seperti 50-usb-epsonscanner.rules
    • Ekstensi harus ".rule"  
  3. Dalam file itu tambahkan:
    SUBSYSTEM == "usb", ATTRS {idVendor} == "04b8", ATTR {idProduct} == "014a", MODE = "0666"
    Tetapi dengan nilai hex idVendor dan idProduct Anda.
    • Perhatikan itu "ATTRS" bukan "ATTR".
  4. Masuk kembali. Tidak perlu reboot.
Gatohaus
sumber
ATTRSbaik untuk vendor dan ID produk? Maka contoh kode Anda salah (sama seperti Anda menyatakan dua baris kemudian).
neo post modern
Yang kedua adalah ATTR. Bekerja disini. Saya menduga itu adalah kesalahan yang bisa berubah tanpa peringatan.
gatohaus