Setelah mencari tahu bagaimana mengubah pemetaan kode pindaian menjadi kode kunci menggunakan udev
, lihat pertanyaan ini , saya bertanya-tanya bagaimana kode kunci tersebut (atau peristiwa jika Anda mau) dipetakan ke tindakan yang sesuai.
Jadi, misalnya, jika Anda menekan volume uppada keyboard Anda, kode pindaian dikirim yang kemudian akan dikonversi ke volumeup
kode kunci. Tetapi bagaimana kode kunci ini dicegat, volume dinaikkan, dan pemberitahuan yang sesuai ditampilkan?
Dugaan saya adalah bahwa suatu tempat skrip harus dipanggil, jadi saya ingin tahu di mana skrip itu berada.
EDIT: Kode kunci yang saya sebutkan tidak harus bingung dengan kode kunci yang xev
dikembalikan, tetapi saya juga tertarik dengan itu;)
notify-osd
kerjanya? Saya pikir di situlah pemberitahuan kecerahan dikirim ...Jawaban:
Oke, temukan ini di https://help.ubuntu.com/community/MultimediaKeys
Jadi kode kunci dipetakan ke kunci-kunci, Jadi di mana kunci-kunci itu? Saya menemukan dan menjawab dari pertanyaan ini: Di mana saya menemukan daftar semua kunci X hari ini? Karena kita berbicara tentang kunci volume, itu akan ditemukan di
XF86keysym.h
dalam kode sumber yang disebutkan dalam jawaban.Dalam file itu di komputer saya, saya menemukan berikut ini untuk volume:
Aneh ... nilai yang berbeda dari yang lain, mungkin ada beberapa sistem untuk menangani kunci? http://crunchbang.org/forums/viewtopic.php?id=16656
Saya menggunakan Xubuntu, dan untuk mengontrol tombol, saya perlu memetakan tindakan secara manual (seperti ini Bagaimana cara mengubah pintasan keyboard saya di xubuntu? ). Namun, notifikasi tersebut tampak independen seolah-olah mereka mengambil penekanan tombol dan bertindak sesuai, Ini mungkin berarti bahwa program lain di Ubuntu diatur dengan cara ini, jadi tidak perlu memetakan skrip ke tombol.
Jadi saya cukup yakin bahwa program sekarang mengambil kunci (jadi tidak ada skrip yang ditemukan).
Di Xubuntu saya punya masalah dengan Pulse Audio dan menggunakan skrip khusus untuk mengubah volume, Tampaknya Pulse mencegat tombol Bisu, tombol Bisu membisukan Alsa dan PulseAudio, tetapi tidak bersuara hanya Alsa yang dibuat untuk penyelesaian yang menarik.
Lihat ini tentang NotifyOSD https://wiki.ubuntu.com/NotifyOSD#Volume_changes
Jika Anda melihat diagram ini: https://wiki.ubuntu.com/NotifyOSD#Architecture
Terutama yang ini:
Ini menunjukkan bahwa ada "pendengar kunci perangkat keras" yang menerima formulir DBus atau HAL? Ini kemudian "mengambil elemen visual dari sistem" yang ikon suara dan kecerahan di sumber Notify-OSD, dan kemudian membuat gelembung dari sana.
Ini semua membingungkan, tetapi sejauh yang saya mengerti (sejauh ini):
raw scancode (mis. e016)> kode kunci (mis. 160)> keysym (mis. XF86AudioMute)> gnome-settings-daemon (mis. volume-up)> sinyal DBus> hardware-keys-listener untuk notify-osd (atau lainnya mendengarkan program)
sumber
Dalam kebanyakan kasus, tidak ada skrip yang dijalankan. Mereka menyebabkan acara dikirim ke manajer jendela atau daemon pengaturan. Satu-satunya waktu yang saya ketahui tentang scripting dalam proses adalah ketika Anda mengkonfigurasi binding kunci kustom. Untuk pengikat kunci khusus, Anda dapat menambahkan baris perintah (executable atau skrip) dan membuatnya terikat ke kunci.
Silakan lihat jawaban ini yang saya tulis untuk pertanyaan tentang mencadangkan keybindings di Ubuntu: Di mana pintasan keyboard GNOME disimpan? Saya memiliki skrip yang mencadangkan atau mengembalikan semua ikatan kunci, termasuk ikatan kunci khusus. Jika Anda menjalankan skrip, Anda dapat melihat di mana di dconf binding keybindings disimpan, dan aplikasi mana yang akan diberitahu tentang peristiwa kunci.
sumber
Jawabannya berkaitan dengan Drivers .
Setiap perangkat keras harus memiliki driver untuk berinteraksi dengan sistem operasi.
Mengutip http://www.linuxforu.com/2010/11/understanding-linux-device-drivers/ :
Perangkat memiliki register perangkat yang menyimpan bit Kontrol / Status dan bit Data. Setiap kali beberapa data perlu ditransfer biasanya dikirimkan dengan mengatur bit data.
Jadi, setiap kali Anda menekan tombol pada keyboard Anda, beberapa data ditulis pada register. Bit tersebut dibaca oleh driver perangkat dan tindakan yang sesuai dilakukan. Inilah penjelasan singkatnya.
Tautan:
Jika Anda tertarik, saya sarankan Anda membaca seri ini pada Device Drivers yang terdiri dari 17 artikel yang ditulis oleh linuxforu : http://www.linuxforu.com/tag/linux-device-drivers-series/ .
Anda dapat membaca dokumen spesifik yang berisi instruksi tentang cara menulis driver perangkat untuk keyboard USB: http://www.emntech.com/docs/USB_KeyBoard_Driver_eMNTech.pdf
Jika Anda sangat tertarik dengan driver perangkat linux, baca buku "Linux Device Drivers" yang tersedia dalam bentuk pdf gratis: http://lwn.net/Kernel/LDD3/
sumber
evdev
driver, tapi saya tidak melihat bagaimana itu akan membantu di sini ...