Burada iki katman vardır: KEYCODE - KEYSYM eşleme ve KEYSYM - metin eşleme. AT Klavye tarama kodlarını bir XT stili KEYCODE veya bir USB Klavye HID kodunu bir KEYCODE ile eşleştirmek zorunda olan çekirdeği sayarsanız daha fazla katman vardır. Bir KEYCODE, bir İşletim Sisteminin çekirdeğinin X11 sunucusuna geçirdiği 8 bit işaretsiz bir tamsayıdır. Linux ve Solaris gibi İşletim Sistemleri arasında değişiklik gösterebilir. Linux'ta, bu ANAHTAR KODLAR genellikle eski XT PC Klavyelerinde kullanılanla aynı sayıdır. AT, PS / 2 veya USB klavyeye sahip daha yeni bilgisayarlar, hayatı basitleştirmek için genellikle bu klavyeleri eski XT koduyla eşler.
İster XT, AT, PS / 2, ister USB olsun, ham klavye kodları klavyedeki fiziksel bir konumu temsil eder. XT klavyesi, bir tuşa basıldığında veya bırakıldığında yalnızca tek bir 8 bitlik sayı gönderir. ABD / İngiliz XT klavyesindeki q tuşu 16 sayısını gönderir. Bir Fransız klavyesinde aynı fiziksel tuşun a olarak etiketlendiği halde yine de 16 gönderir. Bir XT klavyesinde bir tuş bırakıldığında, aynı tuş kodu artı 128 gönderilir. Bu örnekte, q tuşuna basıldığında bir 16 gönderilir, ancak bırakıldığında 142 (16 + 128) sayısı gönderilir. AT Klavyeler, bir dizi sayı olan ve oldukça uzayabilen tarama kodlarını kullanır. Anahtar sürümleri ek kodlar ekler. Örneğin, Duraklat için tarama kodu E1, 1D, 45, E1, 9D, C5'tir. DOS, Windows, Linux, FreeBSD, BIOS tüm harita tarama kodlarını çok daha basit XT tarzı tarama kodlarına dönüştürür. Ayrıca, HID kodları gönderen USB Klavyeler gibi farklı kodlar kullanan daha yeni klavyeleri desteklemeyi de kolaylaştırır. Tüm kodlar, X11 veya uygulama bunları görmeden önce İşletim Sistemi tarafından aynı tutarlı kod kümesine eşlenir.
X11, sürecin bu bölümü hakkında bilgisizdir, sadece KEYCODE'u çekirdekten alır ve KEYCODE'u bir KEYSYM'ye dönüştürmek için kendi eşlemesini uygular. Xmodmap bu eşlemeyi kontrol etmek için standart bir araçtır. Klavye eşlemesinin davranışlarının çoğu yapılandırılabilir, ancak Num Lock, Mod Anahtarı ve X11'e sabit kodlanmış Caps Lock / Shift Lock gibi birkaç özel durum vardır. Shift gibi diğer yönler aslında yapılandırılabilir. Mod Anahtarı veya Num Lock'tan farklı olarak, herhangi bir tuş kaydırma işlevi gösterecek şekilde eşlenebilir.
KEYCODE'lar, İşletim Sisteminin çekirdeği tarafından gönderilen fiziksel anahtarları temsil eder. Her KEYCODE, 8 olası KEYSYM ile eşleşebilir. Sadece 4 tanesi kullanılır ve bazen seviye 1-4 olarak adlandırılır. Seviye 1, aktif değiştirici olmadığında basılan KEYSYM'yi belirtir. Bunlar genellikle küçük harfler ve rakamlardır. Değiştiriciler, değiştirici etkinken (basılı veya açık konuma getirildiğinde) diğer KEYCODE'ler tarafından oluşturulan KEYSYM'i değiştiren KEYCODE'lerdir. Değiştirici anahtar kodları da Xmodmap üzerinden kontrol edilir. Seviye 2, vites değiştiriciye basıldığında gönderilecek bir KEYSYM belirtir. KEYSYM Mod Anahtarına her basıldığında Seviye 3 etkinleştirilir. Seviye 4, hem bir kaydırma tuşu hem de Mod Anahtarı etkin olduğunda etkinleştirilir.
Bir KEYSYM oluşturulduktan sonra, bu doğrudan yorumlanabilir, ancak çoğu zaman metne dönüştürülür. Tüm KEYSYM'ler metne dönüşmez veya yalnızca gelecekteki bir KEYSYM'yi etkileyebilir. Bir örnek, elbette, metin temsili olmayan Shift_L'dir, ancak başka bir karakter oluşturmak için kullanılan bir dizi KEYSYM de vardır. Sistemimdeki bir liste altında /usr/share/X11/locale/en_US.UTF-8/Compose
. Böyle bir örnek, basıldığında sonraki KEYSYM'yi akut aksanlı bir harfe dönüştürmeye çalışacak olan dead_acute KEYSYM'dir. KEYSYM'leri Unicode'a dönüştürmek için standart bir eşleme vardır .
Şimdi tüm bunlar söylendiğine göre, Xmodmap'ın eski olduğunu ve yerini çok daha karmaşık olan XKB ile değiştirdiğini unutmayın. Bu, KEYCODE'lerin KEYSYM'lerle nasıl eşlendiğini etkiler, ancak çekirdeğin KEYCODE'leri nasıl oluşturduğunu veya KEYSYM'lerin metne nasıl dönüştürüldüğünü veya aynı şekilde oluşturulduğunu etkilemez. XmB, Xmodmap davranışı geri yüklenerek devre dışı bırakılabilir. Ayrıca Xmodmap'ı desteklemek için bir uyumluluk katmanı vardır, ancak tamamen uyumlu olmadığı için sorunları olabilir. XKB kuralları altındadır /usr/share/X11/xkb/
ve çok daha karmaşıktır. Başka yerlerde KEYCODE'ları KEYSYM'lerle eşleştirmek için klavye düzenleri oluşturma konusunda bazı iyi belgeler var.
Linux konsoluna gelince /usr/share/keymaps
, loadkeys
komutta saklanan ve yüklenen kendi klavye düzenlerine sahiptir . BIOS ve GRUB2 dahil önceki önyükleme yükleyicisi aşamalarındayken, klavye eşlemesi, BIOS'un anahtarı eşlemeye karar verdiği sayıdır.