Klavye düzeni ve xmodmap ilişkisi


12

Xubuntu kullanıyorum. Giriş yapmadan önce bir klavye düzeni seçebilirim. xmodmapBazı anahtarları yeniden eşlemek için kullanıyorum .

İki şeyle ilgileniyorum:

  1. Dizüstü bilgisayarı açtığımda klavye eşlemesinin durumunun nasıl değiştiği (a), (b) önyükleme işlemi sırasında ve (c) sisteme giriş (bu üç aşamada) ve sistemle çalışırken (oturum açıldığında).
  2. Tek tek aşamalarda ekranda hangi sembollerin (ve gönderilen kontrol tuşlarının) görüntülenmesine neden olur. Bir tuşa bastığımda, klavye sürücüsüne (?) Bir miktar sinyal gönderir ve ardından hangi sembollerin görüntüleneceğini belirleyen bazı karar süreçleri (uygulamalar ve yapılandırma dosyaları) olmalıdır. Bu sorunun cevabı, bu yapılandırma dosyalarının uygulamalarının ve yollarının listesi olmalıdır (özellikle Ubuntu (Debian tabanlı sistem) ile ilgileniyorum, ancak başka bir sistemi tanımlayabilirsiniz, ancak Ubuntu tercih edilir).

Yanıtlar:


25

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, loadkeyskomutta 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.


Harika bir açıklama ve yeni bilgiler için teşekkür ederiz. Önyükleme işleminde hangi uygulamaların başlatıldığını (uptart veya initscript) biliyor musunuz, bu da klavyeden karar veriyor ve girişte neler olacağını aşamada düzenini seçebilirim. Hangi program onunla etkileşime giriyor ve dosya sisteminde nerede saklanıyor? Giriş yaptıktan sonra xmodmap veya xkb giriş işleminde seçilen varsayılan yerleşimin üzerine yazılır mı?
xralf

Dediğim gibi çekirdek tuş eşlemi, loadkeysinit komut dosyalarından biri tarafından yüklenir . grep loadkeys /etc/init.d/*dosyayı gösterir keymap.sh. X11, geleneksel olarak Xsession başlangıç ​​komut dosyalarından birinden çalışan Xmodmap tarafından yüklenen kendi tuş eşlemesine sahiptir. Günümüzde, Xmodmap yerine XKB kullanıldığında, varsayılan tuş eşleme Xorg.conf dosyasında çeşitli Xkb seçenekleri veya HAL aracılığıyla ayarlanır. Gnome veya KDE Display yöneticisi yüklendikten sonra, setxkbmapkomutla kendi düzenlerini yükleyebilirler . Bir kullanıcının masaüstü ortamı oturum açarken farklı bir düzen de ayarlayabilir.
penguen359

Ben komut çalıştı grep loadkeys /etc/init.d/*ve locate keymap.shve hiçbir şey bulunamadı. Xorg.conf dosyası da bulunamadı. 10.04 olan Ubuntu sürümüme bağlı mı?
xralf

Pencere ne tür bir etkinlik alacak? KEYSYM ve daha sonra uygulama ile bir olay KEYSYM metne, ne şekilde dönüştürmek? Xorg, uygulamaların KEYSYM'i metne dönüştürmesi için bir IPC / RPC arayüzü sağlıyor mu? Veya uygulama tamamen kendi başına yapmak zorunda mı?
德里克 薯条 德里克
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.