Dalam /dev
folder saya , saya ingin file-file berikut dapat dibaca dan ditulis pengguna:
/dev/ttyUSB0
/dev/gpib0
Bagaimana saya melakukan ini tanpa menggunakan chgrp
? Saya dapat mengedit /etc/udev/rules.d
tetapi saya tidak tahu sintaksnya.
Dalam /dev
folder saya , saya ingin file-file berikut dapat dibaca dan ditulis pengguna:
/dev/ttyUSB0
/dev/gpib0
Bagaimana saya melakukan ini tanpa menggunakan chgrp
? Saya dapat mengedit /etc/udev/rules.d
tetapi saya tidak tahu sintaksnya.
Jawaban:
Untuk perangkat yang termasuk dalam subsistem tty, Anda dapat mengatur grup mereka sebagai berikut:
SUBSYSTEM=="tty", GROUP="dialout"
Perhatikan bahwa, seperti dalam pemrograman umum, ==
adalah ujian untuk kesetaraan sementara =
merupakan tugas. Jadi, pernyataan di atas diterjemahkan menjadi "jika SUBSYSTEM=="tty"
kemudian menetapkan GROUP="dialout"
. Pernyataan mungkin memiliki beberapa tes, yang and-ed bersama, dan beberapa tugas.
Jika Anda ingin mengubah izin baca-tulis-jalankan, maka tetapkan MODE alih-alih GROUP di mana MODE mengikuti notasi oktal Unix yang biasa, misalnya MODE="0660"
memberikan pemilik dan izin baca-tulis grup. man udev
memiliki semua detail.
Anda dapat menemukan banyak contoh aturan semacam itu di /lib/udev/rules.d/91-permissions.rules
Setelah Anda menentukan aturan yang Anda inginkan, cukup sederhana untuk menambahkannya. Pada sistem turunan debian, buka direktori /etc/udev/rules.d
dan buat file. File dijalankan dalam urutan. Jadi, untuk membuat file aturan Anda yang terakhir dibaca, menimpa yang sebelumnya, coba nama seperti 99-instruments.rules
. Kemudian masukkan aturan Anda dalam file itu, satu per baris. (Jika perlu, garis dapat diperpanjang dengan meletakkan backslash di akhir baris, sama seperti di shell.)
Jadi, jika Anda ingin mengubah grup dan izin pada perangkat tty, file Anda /etc/udev/rules.d/99-instruments.rules
dapat terdiri dari satu baris:
SUBSYSTEM=="tty", GROUP="dialout", MODE="0660"
Untuk memastikan bahwa file baru Anda sendiri memiliki izin seperti biasa:
sudo chown root:root /etc/udev/rules.d/99-instruments.rules
sudo chmod 0644 /etc/udev/rules.d/99-instruments.rules
Setelah Anda membuat file Anda, udevd dapat membacanya secara otomatis. Jika tidak, Anda bisa memaksanya membaca ulang file-file-nya dengan:
udevadm control --reload-rules
Jika Anda ingin mendapatkan kontrol yang lebih baik atas perangkat mana yang merespons aturan mana, Anda dapat mempelajari lebih lanjut tentang bagaimana udev melihat perangkat Anda dengan membaca dengan teliti / sys /. Pada saat ini, saya tidak memiliki akses ke mesin dengan ttyUSB atau HPIB, jadi mari kita buat contoh disk sda. Lari:
udevadm info --attribute-walk --path=/sys/block/sda
Ini memberikan banyak informasi seperti:
. . . .
KERNEL=="sda"
SUBSYSTEM=="block"
DRIVER==""
ATTR{range}=="16"
ATTR{ext_range}=="256"
ATTR{removable}=="0"
. . . .
Garis-garis ini semuanya dalam bentuk yang sesuai untuk digunakan sebagai if
klausa dalam aturan. Jadi, misalnya, untuk mengubah kepemilikan pada semua perangkat blok yang ditandai sebagai tidak dapat dilepas, kami akan menggunakan aturan:
SUBSYSTEM=="block", ATTR{removable}=="0", OWNER=john1024
Dengan informasi dari udevadm
, seseorang dapat mengembangkan aturan yang dapat menargetkan secara khusus perangkat yang menarik.
Saya pikir saya akan menyarankan membuat aturan sedikit lebih ketat daripada aturan John. Misalnya membuat file seperti /etc/udev/rules.d/99-tty-dialout.rules
:
SUBSYSTEM=="tty", KERNEL=="ttyUSB0", GROUP="dialout", MODE="0660"
Anda dapat menggunakan udevadm
untuk menentukan perangkat SUBSYSTEM==
dan KERNEL==
nilai. Sebagai contoh:
$ udevadm info -a -n /dev/tty0
Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.
looking at device '/devices/virtual/tty/tty0':
KERNEL=="tty0"
SUBSYSTEM=="tty"
DRIVER==""
ATTR{active}=="tty1"