Hubungan tata letak keyboard dan xmodmap


12

Saya menggunakan Xubuntu. Sebelum masuk saya bisa memilih tata letak keyboard. Saya menggunakan xmodmapuntuk memetakan kembali beberapa tombol.

Saya tertarik pada dua hal:

  1. Bagaimana keadaan pemetaan keyboard berubah (a) ketika saya menyalakan laptop, (b) selama proses boot dan (c) login ke sistem (dalam tiga fase ini) dan ketika bekerja dengan sistem (login).
  2. Apa yang menyebabkan simbol mana yang akan ditampilkan di layar (dan tombol kontrol dikirim) selama masing-masing fase. Ketika saya menekan beberapa tombol, itu mengirimkan beberapa sinyal ke driver keyboard (?) Dan kemudian harus ada beberapa proses keputusan (aplikasi dan file konfigurasi) menentukan simbol apa yang akan ditampilkan. Jawaban untuk pertanyaan ini haruslah daftar aplikasi dan jalur ke file-file konfigurasi (saya terutama tertarik pada Ubuntu (sistem berbasis Debian), tetapi Anda dapat menggambarkan beberapa sistem lain, tetapi Ubuntu lebih disukai).

Jawaban:


24

Ada dua lapisan di sini, pemetaan KEYCODE ke KEYSYM dan pemetaan KEYSYM ke teks. Ada lebih banyak layer jika Anda menghitung kernel, yang harus memetakan scancodes Keyboard AT ke KEYCODE gaya-XT atau kode HID Keyboard USB ke KEYCODE. KEYCODE hanyalah bilangan bulat 8-bit yang tidak ditandatangani yang dikirimkan kernel dari Sistem Operasi ke server X11. Ini dapat bervariasi antara Sistem Operasi seperti Linux dan Solaris. Di Linux, KEYCODEs ini biasanya nomor yang sama dengan yang digunakan pada Keyboard XT PC lama. Komputer yang lebih baru dengan keyboard AT, PS / 2, atau USB biasanya hanya memetakan keyboard tersebut ke kode XT lama agar kunci tersebut tetap sederhana.

Kode keyboard mentah, apakah itu XT, AT, PS / 2, atau USB mewakili lokasi fisik pada keyboard. Keyboard XT hanya mengirimkan satu nomor 8-bit saat ditekan atau dilepaskannya kunci. Tombol q pada papan ketik XT AS / Inggris mengirimkan angka 16. Pada papan ketik Prancis tombol fisik yang sama diberi label a, tetapi masih mengirimkan 16. Lapisan yang lebih tinggi dalam sistem operasi yang memberikan arti sebenarnya. Ketika kunci dilepaskan pada keyboard XT, kode kunci yang sama dikirim ditambah 128. Untuk contoh ini, ketika q ditekan, 16 dikirim, tetapi pada rilis, nomor 142 (16 + 128) dikirim. AT Keyboard menggunakan scancode yang merupakan serangkaian angka dan bisa menjadi cukup lama. Rilis kunci menambahkan kode tambahan. Misalnya, scancode untuk Pause adalah E1, 1D, 45, E1, 9D, C5. Sebagian besar Sistem Operasi termasuk DOS, Windows, Linux, FreeBSD, dan BIOS semua peta scancode menjadi scancodes gaya XT yang lebih sederhana. Ini juga membuatnya lebih mudah untuk mendukung keyboard baru yang menggunakan kode berbeda seperti USB Keyboard yang mengirim kode HID. Semua kode dipetakan ke set kode yang konsisten yang sama oleh Sistem Operasi sebelum X11 atau aplikasi melihatnya.

X11 tidak mengetahui bagian dari proses ini, ia hanya mendapatkan KEYCODE dari kernel dan menerapkan pemetaannya sendiri untuk mengubah KEYCODE itu menjadi KEYSYM. Xmodmap adalah alat standar untuk mengendalikan pemetaan itu. Sebagian besar perilaku pemetaan keyboard dapat dikonfigurasi, tetapi ada beberapa kasus khusus seperti Num Lock, Mode Switch, dan Caps Lock / Shift Lock yang sulit dikodekan ke X11. Aspek lain seperti Shift sebenarnya dapat dikonfigurasi. Tombol apa saja dapat dipetakan untuk bertindak sebagai shift, tidak seperti Mode Switch atau Num Lock.

KEYCODEs mewakili kunci fisik yang dikirim oleh kernel Sistem Operasi. Setiap KEYCODE dapat memetakan hingga 8 kemungkinan KEYSYM. Hanya 4 yang digunakan dan kadang-kadang disebut level 1-4. Level 1 menentukan KEYSYM yang akan dicetak ketika tidak ada pengubah yang aktif. Ini sering huruf kecil dan digit. Pengubah adalah KEYCODE yang memodifikasi KEYSYM yang dihasilkan oleh KEYCODE lain ketika pengubah aktif (ditekan atau diaktifkan). Kode pengubah juga dikontrol melalui Xmodmap. Level 2 menentukan KEYSYM yang akan dikirim ketika pengubah shift ditekan. Level 3 diaktifkan setiap kali Mode Switch KEYSYM ditekan. Level 4 diaktifkan ketika tombol shift dan Mode Switch aktif.

Setelah KEYSYM dibuat, ini dapat ditafsirkan secara langsung, tetapi paling sering akan dikonversi menjadi teks. Tidak semua KEYSYM berubah menjadi teks atau hanya dapat memengaruhi KEYSYM mendatang. Salah satu contohnya adalah Shift_L, tentu saja, yang tidak memiliki representasi tekstual, tetapi ada juga sejumlah KEYSYM yang digunakan untuk membuat karakter lain. Daftar mereka di sistem saya ada di bawah /usr/share/X11/locale/en_US.UTF-8/Compose. Salah satu contohnya adalah dead_acute KEYSYM yang, ketika ditekan, akan berusaha mengubah KEYSYM berikutnya menjadi huruf beraksen akut. Ada pemetaan standar untuk mengubah KEYSYMs menjadi Unicode.

Sekarang semua ini telah dikatakan, perhatikan bahwa Xmodmap sudah usang dan digantikan oleh XKB yang jauh lebih canggih. Ini memengaruhi bagaimana KEYCODE dipetakan ke KEYSYMs, tetapi tidak bagaimana kernel menghasilkan KEYCODEs atau bagaimana KEYSYM dikonversi menjadi teks atau komposisi yang masih sama. XKB dapat dinonaktifkan mengembalikan perilaku Xmodmap. Ini juga memiliki lapisan kompatibilitas untuk mendukung Xmodmap, tetapi dapat memiliki masalah karena tidak sepenuhnya kompatibel. Aturan XKB berada di bawah /usr/share/X11/xkb/dan jauh lebih canggih. Ada beberapa dokumentasi yang baik di tempat lain tentang cara menghasilkan layout keyboard untuk memetakan KEYCODE ke KEYSYMs.

Sedangkan untuk konsol Linux, ia memiliki tata letak keyboard sendiri yang disimpan /usr/share/keymapsdan dimuat dengan loadkeysperintah. Ketika di BIOS dan tahapan boot loader sebelumnya, termasuk GRUB2, pemetaan keyboard adalah berapa pun angka yang diputuskan BIOS untuk memetakan kunci.


Terima kasih atas penjelasan dan informasi baru. Apakah Anda tahu aplikasi apa yang dimulai dalam proses boot (pemula atau initcript) yang membuat keputusan atas keyboard dan apa yang terjadi saat login pada tahap saya dapat memilih tata letak. Program mana yang berinteraksi dengannya dan di mana ia disimpan dalam sistem file? Setelah login xmodmap atau xkb akan menimpa layout default yang dipilih pada proses login?
xralf

Kernel keymap, seperti yang saya katakan dimuat loadkeysoleh salah satu skrip init. grep loadkeys /etc/init.d/*mengungkapkan file keymap.sh. X11 memiliki keymapingnya sendiri yang secara tradisional telah dimuat oleh Xmodmap yang dijalankan dari salah satu skrip start-up Xsession. Saat ini, dengan XKB digunakan sebagai ganti Xmodmap, keymaping default diatur baik di Xorg.conf melalui berbagai opsi Xkb atau melalui HAL. Setelah manajer Tampilan Gnome atau KDE dimuat, mereka dapat memuat tata letak mereka sendiri melalui setxkbmapperintah. Lingkungan desktop pengguna juga dapat mengatur tata letak yang berbeda saat masuk.
penguin359

Aku mencoba perintah grep loadkeys /etc/init.d/*dan locate keymap.shdan tidak ada yang ditemukan. File Xorg.conf tidak ditemukan juga. Apakah ini tergantung pada versi Ubuntu saya yang 10,04?
xralf

Acara apa yang akan diterima jendela? Suatu peristiwa dengan KEYSYM dan kemudian aplikasi mengubah KEYSYM menjadi teks, dengan cara apa? Apakah Xorg menyediakan antarmuka IPC / RPC untuk aplikasi untuk mengonversi KEYSYM ke teks? Atau aplikasi harus melakukannya sendiri?
炸鱼 薯条 德里克
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.