Plug and Play USB Devices dengan Udev Rules
Perangkat USB yang terpasang ke komputer dengan sistem operasi GNU/Linux akan dimonitor oleh daemon dari Udev. Saya baru saja membeli sebuah USB Mouse hybrid yaitu Rexus Arka RX107 yang mendukung dual-mode di mana kita dapat menggunakannya secara nirkabel maupun berkabel. Dalam kasus ini mouse dapat terdeteksi dan digunakan secara langsung, namun ada beberapa hal yang saya butuhkan, seperti mengatur beberapa properties pada mouse. Yang saya maksud misalnya akselerasi kursor, kecepatan double-click, hingga kecepatan scroll. Konfigurasi semacam itu terkadang perlu kita adjust secara mandiri dan tidak dapat serta merta dilakukan begitu saja dari System Settings (contohnya xfce4-mouse-settings
) di DE (Desktop Environment) XFCE. Terlebih saya tidak menggunakan DE, hanya Window Manager saja.
Xinput
Biasanya saya menggunakan xinput
untuk melakukan konfigurasi pada properties milik mouse.
Listing
Kita dapat melihat perangkat apa saja yang terhubung seperti berikut.
|
|
Dan di sini saya mempunyai beberapa perangkat input, kita akan berfokus pada perangkat yang namanya mengandung kata Wireless dan pointer karena kita membahas tentang akselerasi mouse.
|
|
Properties
Untuk melihat properties apa saja yang mungkin dapat kita set, jalankan perintah berikut.
|
|
Angka 19 adalah id dari pointer LXDDZ 2.4G Wireless Mouse. Kurang lebih outputnya seperti dibawah ini, cukup cari kata yang berhubungan dengan Speed atau Accel.
|
|
Dari sini kita akan mendapatkan id dari properties Accel Speed adalah 321. Kita akan membutuhkannya untuk melakukan adjustment pada mouse.
Set Mouse Properties
Untuk memberikan value baru pada properties di atas, kita dapat menggunakan perintah berikut.
|
|
Saya memberikan value sebesar -0.575 bertipe float atau pecahan, untuk menurunkan kecepatan akselerasi pada mouse. Dari sini seharusnya mouse akan terasa lebih lambat untuk digerakkan, sesuaikan dengan preferensi kalian. Kita perlu mengatur properties tersebut tiap kali mouse reconnected, tentu saja sangat melelahkan. Maka dari itu, mari membuatnya menjadi otomatis.
Deteksi USB Mouse
Saya mencoba membaca perangkat USB yang terhubung menggunakan perintah lsusb
, beberapa informasi yang kita butuhkan adalah Device ID dan Vendor ID.
lsusb
Informasi terkait dapat kita dapatkan dengan perintah berikut.
|
|
Berikut ini adalah sebelum Mouse USB terpasang.
|
|
Kemudian saya menghubungkan Mouse USB, dan inilah outputnya.
|
|
Berdasarkan output diatas, dapat kita ambil value yang baru muncul (bernama Xenta).
Key | Value |
---|---|
idVendor | 0x1d57 |
idProduct | 0xfa60 |
udevadm
Sekarang mari kita monitor path dari pertangkat USB yang terhubung. Tapi sebelumnya saya akan mencabut mouse terlebih dahulu, barulah menjalankan perintah berikut.
|
|
Setelah mouse kembali dihubungkan ke komputer, saya mendapatkan output seperti berikut.
|
|
Kita hanya perlu mencari path yang berhubungan dengan idVendor dan idProduct yang telah kita dapatkan sebelumnya. Maka kita akan menggunakan baris berikut.
|
|
Lalu kita cari informasi lebih lanjut tentang path tersebut menggunakan perintah berikut.
|
|
Maka kita akan mendapatkan banyak sekali output seperti berikut.
|
|
Kita dapat melihat lebih detail informasi yang tentang perangkat USB Mouse yang baru saja saya beli, untuk membuat Udev rules saya membutuhkan value dari SUBSYSTEMS pada output di atas.
|
|
Value dari SUBSYSTEMS adalah usb.
Symlink
Mari kita buktikan dengan langsung membuat sebuah Udev rules yang akan menciptakan sebuah symlink path pada /dev/
ketika perangkat terhubung, dan hilang saat perangkat tercabut.
|
|
Dengan perintah di atas, saya membuat file baru di direktori /etc/udev/rules.d
yang bernama 83-hybrid-wireless-mouse-rexus-rx107.rules
. Untuk format nama file pada Udev selalu diawali dengan angka yang akan menjadi nomor urut dari rules tersebut untuk dieksekusi.
Kemudian jalankan ujicoba pada path yang kita dapatkan sebelumnya.
|
|
Jika Udev rules berhasil, maka kita akan mendapatkan output seperti berikut.
|
|
Periksa juga apakah symlink telah terbuat di direktori /dev/
.
|
|
Dan saat mouse dicabut, symlink tersebut akan hilang.
|
|
Plug And Play
Sebenarnya menggunakan istilah PnP atau Plug and Play kurang tepat, karena mouse langsung dapat digunakan tanpa perlu memasang driver dan sebagainya. Hanya saja, seperti yang saya tulis sebelumnya bahwa konfigurasi properties pada mouse perlu tidaklah permanen. Artinya saya perlu melakukannya setiap kali reconnecting mouse, namun terimakasih kepada udev
dan shell script sederhana yang akan melakukannya secara otomatis.
Udev rules
Sebelumnya kita telah mencoba membuat rules untuk path symlink, kali ini kita akan menambahkan beberapa baris rules lagi untuk mengeksekusi sebuah shell script yang berisi perintah xinput
untuk konfigurasi properties pada mouse.
|
|
Kenapa saya membuat dua symlink dan terdapat dua idProduct yang berbeda? Hal ini karena ketika mouse mempunyai dual-mode, yang ternyata memiliki idProduct berbeda saat dioperasikan secara nirkabel ataupun berkabel.
Lalu kita dapat melihat ACTION=="add"
yang artinya rules akan mulai menjalankan RUN
saat mendeteksi action berupa add pada atribut yang sesuai dengan SUBSYSTEM, idVendor dan idProduct. Sementara ENV
adalah environment variable yang akan dilewatkan ketika RUN
dieksekusi, hal ini diperlukan karena perintah xinput
pada shell script akan dieksekusi oleh sistem (root). Maka udev
perlu tahu mana user yang dimaksud, dan mana letak sesi display manager user tersebut.
Selanjutnya muat ulang Udev rules yang telah kita buat supaya daemon akan menerapkannya.
|
|
Response
Dari sini kita akan melakukan sedikit shell scripting, kurang lebih seperti berikut.
|
|
Namun file tersebut tidak akan menjalankan perintah xinput
. Karena mouse belum terdeteksi pada xinput list
ketika Udev rules pertama kali dieksekusi. Maka kita akan memanggil shell script lain di background seperti berikut.
|
|
grep
di atas, kita perlu menyesuaikannya untuk mendapatkan id dari perangkat yang terdeteksi oleh xinput list
. Artinya setiap perangkat memiliki karakteristik yang berbeda, dan silahkan bermain-main untuk mencari value yang sesuai dengan perangkat kalian.Saya menyimpan kedua file shell script tersebut ke direktori /usr/local/bin
dan jangan lupa tambahkan executable permission.
|
|
Dari sini kita dapat memicu Udev rules dengan perintah berikut. Atau sederhana saja, cukup cabut dan hubungkan kembali mouse. Maka kedua shell script tersebut akan dieksekusi oleh Udev rules.
|
|
Kesimpulan
Sebenarnya udev
tidak terlalu rumit untuk digunakan, hanya sedikit susah dalam hal debug perangkat. Faktanya udev
juga dapat digunakan untuk berbagai macam perangkat dengan interface lain seperti SCSI, SATA/eSATA, PCI, hingga VGA dan HDMI. Jadi tidak untuk USB saja, udev
dipakai oleh sistem operasi untuk handling berbagai peripheral yang terhubung ke komputer.