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/keymaps
dan dimuat dengan loadkeys
perintah. Ketika di BIOS dan tahapan boot loader sebelumnya, termasuk GRUB2, pemetaan keyboard adalah berapa pun angka yang diputuskan BIOS untuk memetakan kunci.