Bagaimana kode kunci dipetakan ke tindakan yang sesuai?

18

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 volumeupkode 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 xevdikembalikan, tetapi saya juga tertarik dengan itu;)

Burger Gerhard
sumber
3
Saya tidak setuju, misalnya notifikasi sangat spesifik untuk Ubuntu, jadi saya ingin tahu bagaimana notifikasi dikirimkan. Dugaan saya adalah bahwa suatu tempat skrip harus dipanggil, jadi saya ingin tahu di mana skrip itu berada.
Gerhard Burger
2
Ini adalah pertanyaan spesifik Ubuntu yang valid karena cara Ubuntu menangani hal ini telah berubah pada tahun-tahun IIRC. Sangat menarik untuk mengetahui apa urutan kejadian di Ubuntu pada acara menekan tombol pintas memicu tindakan yang tepat. Kemungkinan tujuan: kontrol kecerahan khusus , debugging masalah kunci panas, dll.
gertvdijk
2
@Seth Sepertinya ketinggalan zaman. HAL sudah usang sejak lama, sejak 10,04 . Juga tidak ada informasi bagaimana pemberitahuan desktop dipicu.
gertvdijk
1
Hari ini saya menemukan wiki.ubuntu.com/Hotkeys/Troubleshooting , yang memberikan beberapa petunjuk bagus (ada tautan ke wiki.ubuntu.com/Hotkeys/Architecture yang sangat informatif). Saya pikir jawaban Stephen Ostermiller ada di arah yang benar, tetapi saya ingin menemukan skrip-skrip itu dan dapat mengubahnya;)
Gerhard Burger
1
^^ informasi ini tampaknya sudah ketinggalan zaman, tidak ada ikatan kunci di bawah gnome-settings-daemon di sini ... Banyak hit untuk kecerahan di bawah bagian compiz (saya menduga untuk persatuan?) Siapa yang tahu cara notify-osdkerjanya? Saya pikir di situlah pemberitahuan kecerahan dikirim ...
Gerhard Burger

Jawaban:

6

Oke, temukan ini di https://help.ubuntu.com/community/MultimediaKeys

Ketika Anda menekan tombol pada keyboard Anda, kernel linux menghasilkan scancode mentah untuk itu (jika ditugaskan). Setiap scancode dapat dipetakan ke kode kunci. Ini pada level kernel. X memiliki cara pemetaan kunci independen total (kuasi): X membaca tabel kode kunci kernel saat startup, kemudian memetakan kode kunci tersebut ke tabel kode kunci independennya (sama dengan kode kunci kernel tetapi berbeda :)). Kemudian setiap kode kunci dapat dipetakan ke keysym, yaitu string yang mewakili kunci atau menyarankan suatu tindakan. Dengan demikian agar kunci kita berfungsi penuh, mereka membutuhkan scancode / keycode kernel ditambah keycode / keysym. Ini mungkin terlihat aneh, tetapi pengembang X memiliki alasan untuk menyimpan pemetaan keyboard terpisah dari kernel. Sama sekali tidak sulit, hanya prosedur yang cukup membosankan.

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.hdalam kode sumber yang disebutkan dalam jawaban.

Dalam file itu di komputer saya, saya menemukan berikut ini untuk volume:

#define XF86XK_AudioLowerVolume 0x1008FF11   /* Volume control down        */
#define XF86XK_AudioMute    0x1008FF12   /* Mute sound from the system */
#define XF86XK_AudioRaiseVolume 0x1008FF13   /* Volume control up          */

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: masukkan deskripsi gambar di sini

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)

Mateo
sumber
Sepertinya ini ada di suatu tempat! Ditandai sebagai CW dari awal jadi saya kira Anda masih membaik? :)
gertvdijk
ya, saya perlu melihat lebih banyak lagi, diagram memiliki banyak tanda tanya di dalamnya.
Mateo
Apakah Anda dengan cara tidak sengaja membuatnya menjadi jawaban wiki komunitas? Mungkin minta mod untuk membatalkannya ... Oh dan grafik itu kemungkinan besar agak ketinggalan zaman, karena HAL sudah usang sejak lama ... Yah, setidaknya kita sampai di suatu tempat: D
Gerhard Burger
@ gertvdijk Saya tahu, tapi akan sangat memalukan untuk semua upvotes yang akan dia lewatkan;)
Gerhard Burger
1

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.

Stephen Ostermiller
sumber
lalu bagaimana pemberitahuan desktop dipicu?
Gerhard Burger
Saya percaya bahwa daemon pengaturan gnome bertanggung jawab untuk memicu mereka dalam kasus volume dan kecerahan misalnya.
Stephen Ostermiller
2
Saya menjalankan skrip Anda, tetapi yang tampaknya dilakukan hanyalah mendapatkan pintasan yang dapat Anda akses dengan Pengaturan Sistem> Keyboard> Pintasan , saya tidak menemukan referensi kecerahan misalnya.
Gerhard Burger
skrip keren untuk mendapatkan kunci shoutcut.
Mateo
0

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/ :

Driver mendorong, mengelola, mengendalikan, mengarahkan, dan memantau entitas di bawah perintahnya. Apa yang dilakukan oleh sopir bus dengan bus, driver perangkat tidak dengan perangkat komputer (semua perangkat keras yang terhubung ke komputer) seperti mouse, keyboard, monitor, hard disk, kamera-Web, jam, dan banyak lagi.

Selanjutnya, "pilot" dapat berupa seseorang atau bahkan sistem otomatis yang dipantau oleh seseorang (misalnya, sistem pilot otomatis pada pesawat terbang). Demikian pula, perangkat keras tertentu dapat dikontrol oleh perangkat lunak (driver perangkat), atau dapat dikontrol oleh perangkat hardware lain, yang pada gilirannya dapat dikelola oleh driver perangkat perangkat lunak. Dalam kasus terakhir, perangkat pengendali seperti itu biasa disebut pengendali perangkat. Ini, sebagai perangkat itu sendiri, sering juga membutuhkan sopir, yang biasa disebut sebagai sopir bus.

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:

hijau
sumber
3
Uhm ... Saya tidak berpikir driver sebenarnya memiliki gagasan tentang arti dari tombol yang saya tekan pada keyboard saya. Beberapa perangkat hotkey khusus di notebook mungkin memerlukan driver untuk ini - tetapi ini tidak mencakup hotkey multimedia biasa seperti "volume naik". Ini harus dicakup dalam area yang lebih umum dari kernel / X / DE. Saya juga berpikir referensi sangat luas tentang pemrograman driver perangkat Linux kerner.
gertvdijk
Saya pikir untuk kebanyakan keyboard modern Ubuntu menggunakan evdevdriver, tapi saya tidak melihat bagaimana itu akan membantu di sini ...
Gerhard Burger