Autor blogu: Sergej Chodarev

twitter · github · 500px

Vlastné rozloženie klávesnice v X Window

Keďže väčšinu času používam počítač na programovanie a podobné činnosti, tak používam americkú klávesnicu. Ale keď občas musím napísať niečo po slovensky nastáva problém – neviem, kde sa nachádzajú zátvorky, úvodzovky a mnohé iné znaky, musím hľadať dokonca aj slovenské znaky nadchádzajúce sa v hornom rade na klávesnici. Najhoršie je, že keď sa vrátim k americkej klávesnici, tak si znovu všetko mýlim. Takže som sa rozhodol urobiť s tým koniec a vytvoriť si vlastne rozloženie klávesnice.


Svoje rozloženie klávesnice si predstavujem ako doplnenie americkej klávesnice o znaky s diakritickými znamienkami, ktoré sa budu zadávať stlačením AltGr (pravého Alt) a príslušného znaku bez diakritiky (napríklad AltGr+a je „á“).

V tomto článku chcem opísať vytvorenie takéhoto rozloženia klávesnice. Môžete ho samozrejme upraviť podľa vlastných potrieb, alebo vytvoriť úplne iné rozloženie.

Vytvorenie rozloženia klávesnice

Takže začnime. Nastavenia klávesnice systému X Window sa väčšinou nachádzajú v adresári /etc/X11/xkb/. Nás bude zaujímať najmä adresár symbols, v ktorom sa nachádzajú definície rozložení klávesníc. Pre počítače PC je určený podadresár pc. V ňom som vytvoril súbor s mojim rozložením. Nazval som ho sk_sergejx. Definícia môjho rozloženia vyzerá tak:

partial default alphanumeric_keys 
xkb_symbols "basic" {

    name[Group1]= "Slovak by sergejx";

    include "pc/latin"

    key <AD01> {[ q,     Q,     adiaeresis,   Adiaeresis   ]};
    key <AD03> {[ e,     E,     eacute,       Eacute       ]};
    key <AD05> {[ t,     T,     tcaron,       Tcaron       ]};
    key <AD06> {[ y,     Y,     yacute,       Yacute       ]};
    key <AD07> {[ u,     U,     uacute,       Uacute       ]};
    key <AD08> {[ i,     I,     iacute,       Iacute       ]};
    key <AD09> {[ o,     O,     oacute,       Oacute       ]};
    key <AD10> {[ p,     P,     ocircumflex,  Ocircumflex  ]};
    key <AC01> {[ a,     A,     aacute,       Aacute       ]};
    key <AC02> {[ s,     S,     scaron,       Scaron       ]};
    key <AC03> {[ d,     D,     dcaron,       Dcaron       ]};
    key <AC09> {[ l,     L,     lcaron,       Lcaron       ]};
    key <AB01> {[ z,     Z,     zcaron,       Zcaron       ]};
    key <AB03> {[ c,     C,     ccaron,       Ccaron       ]};
    key <AB06> {[ n,     N,     ncaron,       Ncaron       ]};
    key <SPCE> {[ space, space, nobreakspace, nobreakspace ]};

    include "level3(ralt_switch_multikey)"
};

Poďme si vysvetliť jednotlivé časti tohto súboru. Na začiatku som dal svojmu rozloženiu meno „Slovak by sergejx“. Na ďalšom riadku je pripojenie štandardnej latinskej klávesníce (include "pc/latin"), ktorá je podobná americkej klávesnici a je základom pre väčšinu európskych klávesníc.

Ďalšie riadky už obsahujú definície kláves, význam ktorých chcem mať iný oproti pc/latin. V lomených zátvorkách sú označenia kláves, tie označujú buď polohu klávesy (napríklad <AC01> je prvé písmeno v treťom riadku (riadky sa počítajú zdola a označujú sa písmenami: A, B, C, D…)) alebo jej názov (napr. <SPCE> znamená space – medzerník). Za tým nasleduje zoznam znakov priradených danej klávese. Prvý znak je pri normálnom stlačení klávesy, druhy pri stlačenom Shift, tretí – pri stlačenom klávese „multikey“ a štvrty – pri stlačení Shift aj „multikey“. Názvy znakov sa dajú najjednoduchšie zistiť z iných rozložení (napríklad z pc/sk). Znaky s dĺžňom máju k názvu pridané „acute“, znaky s mäkčeňom – „caron“.

Na predposlednom riadku som nastavil, že „multikey“ bude AltGr (pravý Alt).

Ako vidíte znaky s diakritikou sa dajú napísať stlačením AltGr a príslušného znaku bez diakritiky (fungujú samozrejme aj veľké písmena). Výnimkou sú znaky „ô“ a „ä“, ktoré som dal na „p“ a „q“, keďže „o“ a „a“ už boli obsadené. Okrem toho som nastavil, aby medzerník pri stlačenom AltGr generoval pevnú medzeru.

Mŕtve klávesy

Mŕtvym klávesom sa nazýva kláves, ktorý generuje len diakritické znamienko, ktoré sa spojí s znakom, ktorý zadáte za nim. Na slovenskej klávesnici sú napríklad mŕtve klávesy pre dĺžeň a mäkčeň. Ja som do svojho rozloženia žiadne mŕtve klávesy nepridával, lebo som využil tie, ktoré sú definované v pc/latin. Asi najdôležitejšie z nich sú v tabuľke.

Kláves Pri stlačenom AltGr Pri stlačenom AtlGr a Shift
; dĺžeň (í) dve čiary (ű)
strieška (ô) mäkčeč (ň)
[ dve bodky (ü) krúžok (ů)

V pc/latin sú tieto klávesy definované takto:

    key <AC10> {[ semicolon, colon,    dead_acute,     dead_doubleacute]};
    key <AC11> {[apostrophe, quotedbl, dead_circumflex,dead_caron]};
    key <AD11> {[bracketleft,braceleft,dead_diaeresis, dead_abovering]};

Pridanie nového rozloženia do systému

Teraz, keď je rozloženie klávesnice už hotové, je potrebné dať systému vedieť o jeho existencii – musíme ho pridať do súboru v ktorom sú popisy rozložení. Tento súbor sa zväčša nachádza v adresári /etc/X11/xkb/rules. Pokiaľ používate server X.org tak potrebný súbor sa vola xorg.xml, v prípade, že používate XFree86, je to xfree86.xml. V danom súbore je v časti ohraničenej <layoutList> a </layoutList> potrebne pridať opis nového rozloženia, ktorý môže vyzerať takto:

<layout>
  <configItem>
    <name>sk_sergejx</name>
    <shortDescription>Skx</shortDescription>
    <description>Slovak by sergejx</description>
    <description xml:lang="sk">Slovenské od sergejx</description>
  </configItem>
  <variantList/>
</layout>

Užitočné môže byť tiež pridať opis rozloženia do súboru xorg.lst (resp. xfree86.lst), ktorý môžu používať staršie aplikácie. V tomto súbore za riadkom

! layout

nasleduje zoznam rozložení, do ktorého je potrebné pridať riadok opisujúci nové rozloženie, napríklad takýto:

  sk_sergejx    Slovak by sergejx

Teraz je potrebné už len reštartovať X server a môžeme vybrať nové rozloženie klávesnice v nastaveniach Gnome alebo KDE, alebo si ho môžete nastaviť v /etc/X11/xorg.conf (pripadne /etc/X11/XF86Config, ak používate XFree86) ako štandardné rozloženie klávesnice.

Odkazy

Aktualizácia (29.8.2006)

V X.org 7.0 sa zmenili cesty ku konfiguračným súborom. Nastavenia rozložení klávesnice sa presunuli z /etc/X11/xkb/ do /usr/share/X11/xkb/. Okrem toho tu už nie je adresár symbols/pc/ a súbory s rozloženiami sú priamo v symbols/, preto treba aj v definícii rozloženia zmeniť riadok

    include "pc/latin"

na

    include "latin"

Ďalej je potrebné zmeniť aj riadok

    include "level3(ralt_switch_multikey)"

na

    include "level3(ralt_switch)"

Môžete si stiahnuť aktualizované rozloženie aj s inštalačným skriptom. Viac informácii o inštalačnom skripte je v samostatnom článku.