Solusi menggunakan udev
Karena HAL sudah usang dan udev
sekarang digunakan, pendekatan ini lebih disukai daripada jawaban saya yang lain (walaupun saya pikir solusi menggunakan HAL lebih sederhana).
Namun untuk banyak tombol fungsi Anda cukup menggunakan Pengaturan Sistem> Keyboard> Pintasan untuk mengikat skrip, coba ini dulu! Ini menghemat banyak masalah. Misalnya, tombol kecerahan ini tidak berfungsi (saya tidak tahu mengapa tidak), jadi jika Anda ingin tahu cara mengubah perilaku misalnya tombol kecerahan, baca terus.
CATATAN : Jika Anda menjalankan notebook Samsung, Anda dapat memperbaiki semua tombol fungsi (tergantung model) dengan menginstal samsung-tools
paket dari http://www.voria.org/forum/
Howto ini mengasumsikan Anda tahu cara menggunakan terminal, dan menggunakan vim
editor. Jika Anda tidak tahu, vim
harap ganti dengan perintah dengan salah satu gedit
atau nano
.
Menentukan keyboard Anda
/lib/udev/findkeyboards
harus mencetak keyboard yang terhubung ke komputer, dalam kasus saya
USB keyboard: input/event9
USB keyboard: input/event7
AT keyboard: input/event4
Sekarang ada dua opsi:
Keyboard USB :
Jika Anda ingin memetakan kembali keyboard USB Anda, periksa dengan menjalankan
udevadm info --export-db | awk '/event9/' RS="" | grep -P 'ID_(VENDOR|MODEL)(?!_ENC)'
di mana Anda harus mengganti angka 9 dalam pernyataan awk dengan nomor yang benar. Outputnya harus sama dengan
E: ID_MODEL=USB_Receiver
E: ID_MODEL_ID=c52b
E: ID_VENDOR=Logitech
E: ID_VENDOR_ID=046d
yang dengan benar menunjukkan bahwa keyboard saya ditangani melalui Logitech USB Receiver saya (input / event7 ternyata adalah mouse Logitech G9 saya yang memiliki beberapa tombol yang dapat diprogram).
Keyboard Laptop :
Jika Anda ingin memetakan kembali keyboard laptop Anda, Anda harus mengingat angka AT keyboard
4 di dalam kasus saya. Dapatkan juga informasi dmi untuk laptop Anda:
cat /sys/class/dmi/id/sys_vendor
yang ada dalam kasus saya
SAMSUNG ELECTRONICS CO., LTD.
dan
cat /sys/class/dmi/id/product_name
yang ada dalam kasus saya
305U1A
Tentukan pemetaan Anda saat ini dari tombol fungsi Anda
Sekarang kita dapat menentukan penekanan tombol kita saat ini dengan mendengarkan keyboard (masukkan nomor yang benar)
sudo /lib/udev/keymap -i input/event4
Anda dapat keluar dari perintah ini dengan menggunakan Escdi keyboard, atau Ctrl+ cdi keyboard lain.
Jika layar Anda mulai bergulir sangat keras, tekan Escdan Ctrl+ cbeberapa kali dan coba lagi dengan
sudo /lib/udev/keymap -i input/event4 2> /dev/null
atau, jika Anda masih memiliki masalah pengguliran
sudo /lib/udev/keymap -i input/event4 > ~/keymap.log
Dalam kasus terakhir Anda masih akan memiliki scroll tetapi jika Anda menekan tombol fungsi mereka harus pergi ke ~/keymap.log
tempat Anda dapat membacanya nanti.
Sekarang kita dapat memeriksa pemetaan saat tombol Fungsi Anda dengan menekan mereka, yang harus memberikan daftar seperti (ini saya Fn+ F1melalui Fn+ F12):
scan code: 0xCE key code: kpplusminus
scan code: 0x89 key code: brightnessdown
scan code: 0x88 key code: brightnessup
scan code: 0x82 key code: switchvideomode
scan code: 0xF9 key code: f23
scan code: 0xA0 key code: mute
scan code: 0xAE key code: volumedown
scan code: 0xB0 key code: volumeup
scan code: 0x43 key code: f9
scan code: 0x44 key code: f10
scan code: 0xB3 key code: prog3
scan code: 0x86 key code: wlan
Sekarang tulis kode pindai yang ingin Anda ubah perilaku.
Mengubah kode kunci untuk kode pindai
Jika Anda melihat kode kunci dengan jelas tidak mencakup apa yang Anda harapkan dari kunci tersebut, Anda dapat melihat di /usr/include/linux/input.h
bawah Tombol dan tombol untuk melihat apakah ada kode kunci yang lebih cocok dengan apa yang sebenarnya Anda inginkan terjadi. Kode kunci ada dalam format KEY_KEYCODE
dan Anda harus menuliskan bagian setelah KEY_
dalam huruf kecil. Terkadang mengubah ini sudah cukup untuk menyelesaikan masalah.
Namun tombol kecerahan seringkali memiliki kode kunci yang tepat yang terkait dengannya, dan inilah yang tidak memungkinkannya untuk dipetakan kembali. Jadi kita perlu mengubahnya ke kode kunci lain. Kami akan menggunakan prog1
dan prog2
untuk contoh ini karena ini tidak digunakan di komputer saya, namun Anda juga dapat menggunakan f13
melalui f24
, atau f20
melalui f24
jika Anda memiliki keyboard Apple yang memiliki F1melalui F19tombol.
Buat custom keymap :
Buat file keymap di direktori /lib/udev/keymaps
dengan nama yang cocok, lihat output ls /lib/udev/keymaps
untuk melihat nama yang cocok. Saya pergi dengan custom-brightness
tujuan dari pertanyaan ini.
sudo vim /lib/udev/keymaps/custom-brightness
dan masukkan kode pindaian dari tombol yang ingin Anda ubah diikuti oleh scancode yang Anda inginkan. custom-brightness
Penampilan saya seperti ini:
# /lib/udev/keymaps/custom-brightness
0x89 prog1
0x88 prog2
Buat file rilis kunci khusus. Hanya jika Anda
mengganti keyboard laptop Anda : Terkadang acara pelepasan kunci tidak terkirim dengan benar, menyebabkan komputer macet. Untuk menghindari ini, kami juga akan menulis file rilis kunci khusus
sudo vim /lib/udev/keymaps/force-release/custom-brightness
file ini harus berisi kode pindai yang sama, seperti milik saya
# /lib/udev/keymaps/force-release/custom-brightness
0x89
0x88
Pastikan bahwa pemetaan baru dimuat dalam file aturan
Sekarang kita perlu memastikan bahwa pemetaan Anda dimuat. Kita dapat melakukan ini dengan mengedit /lib/udev/rules.d/95-keymap.rules
, jadi pintar untuk membuat cadangan
Sekali lagi kami memiliki dua opsi:
Keyboard USB :
Karena Anda memiliki keyboard USB, Anda harus menambahkan entri Anda di bawah LABEL="keyboard_usbcheck"
dan itu harus melewati entri lain dari produsen keyboard Anda. Ini karena keyboard saya dengan
E: ID_MODEL=USB_Receiver
E: ID_MODEL_ID=c52b
E: ID_VENDOR=Logitech
E: ID_VENDOR_ID=046d
sudah dicocokkan dengan salah satu aturan, dan jika tidak maka akan ditimpa.
Tambahkan aturan berikut, di mana Anda harus mengubah ID_VENDOR_ID
dan ID_MODEL_ID
dan nama keymap Anda dengan tepat
ENV{ID_VENDOR_ID}=="046d", ENV{ID_MODEL_ID}=="c52b", RUN+="keymap $name custom-brightness"
Keyboard laptop :
Jika /lib/udev/findkeyboards
dilaporkan keyboard laptop AT keyboard
Anda sebagai aturan Anda harus di bawah LABEL="keyboard_vendorcheck"
, jika tidak, letakkan di bawah LABEL="keyboard_modulecheck"
. Sekali lagi letakkan di bawah entri lain untuk produsen laptop Anda. Tambahkan aturan berikut ( SAMSUNG ELECTRONICS CO., LTD.
agak panjang jadi saya menggunakan wildcard`)
ENV{DMI_VENDOR}=="SAMSUNG*", ATTR{[dmi/id]product_name}=="305U1A", RUN+="keymap $name custom_brightness"
Sekarang juga tambahkan aturan /lib/udev/rules.d/95-keyboard-force-release.rules
setelah mencadangkannya
sudo cp /lib/udev/rules.d/95-keyboard-force-release.rules /lib/udev/rules.d/95-keyboard-force-release.rules.bak
sudo vim /lib/udev/rules.d/95-keyboard-force-release.rules
Lagi di bawah entri lain dari pabrikan Anda tambahkan
ENV{DMI_VENDOR}=="SAMSUNG*", ATTR{[dmi/id]product_name}=="305U1A", RUN+="keyboard-force-release.sh $devpath custom_test"
Pastikan udev memuat aturan baru
Untuk memuat aturan baru berjalan
sudo adevadm trigger
CATATAN: udevadm control --reload-rules
(masih dalam instruksi di banyak situs web) tidak berfungsi.
Sekarang periksa apakah aturan berhasil diterapkan oleh
sudo /lib/udev/keymap -i input/event4
yang sekarang seharusnya melaporkan untuk tombol kecerahan
scan code: 0x89 key code: prog1
scan code: 0x88 key code: prog2
Memetakan kembali kunci dalam Pengaturan Sistem
Jika langkah terakhir melaporkan kode kunci yang benar, salah satu kunci mulai bekerja secara otomatis (jika mereka pertama kali memiliki kode kunci yang salah).
Untuk kecerahan Anda masih harus mengikat tombol ke skrip yang sekarang mungkin menggunakan Pengaturan Sistem> Keyboard> Pintasan .
Nikmati
Catatan :
Jika kunci Anda salah kode kunci dan diperbaiki dengan pendekatan ini, silakan ikuti petunjuk di /usr/share/doc/udev/README.keymap.txt.gz
(Anda dapat membuka ini tanpa mengekstraksi menggunakan zless
) dan mengirimkan hasil Anda alamat email yang disebutkan di sana, maka perubahan dapat dimasukkan dalam rilis berikutnya. Banyak pengguna akan mendapat manfaat!
Terima kasih banyak untuk posting bermanfaat ini oleh Vaidas Jablonskis.