4. Nastavenia X Window Systemu

Čokoľvek sa chystáte robiť s X Window Systemom a slovenčinou dokopy, sľubujem, že vám to nebude fungovať, ak nenastavíte totok taktok:
LC_CTYPE=sk
    

Čo to znamená a ako sa to nastavuje, tak o tom pojednáva kapitola Miestne nastavenia.

4.1. Slovenské fonty v X Window Systeme

Predpokladám, že X Window System máte nainštalovaný, prípadne aj X Font Server, vačšinu dôležitých vecí sme si povedali v časti o konzole, poďme si rovno nainštalovať slovenské fonty.

4.1.5. Strieľanie tažkostí

Ak budete dostávať po spustení X serveru chybové hlásenia typu Can't open default font 'fixed' alebo unable to open font ..., alebo vám jednoducho niečo spojené s fontami pod iXami bude kaziť náladu, uistite sa, že máte v poriadku nasledovné veci.

  1. Všetky adresáre s fontami, samotné súbory fontov a súbory, ktoré číta X Window System alebo X Font Server, musia mať nastavené rozumné prístupové práva.

  2. V adresároch, v ktorých sa nachádzajú fonty, musí existovať súbor fonts.dir. Ak nie, spustite v týchto adresároch program mkfontdir. V adresároch s TrueType fontmi musíte ešte predtým vytvoriť súbor fonts.scale tak ako je to popísane v časti Slovenské TrueType fonty.

  3. Ak idete bez xfs, naozaj všetky adresáre s fontami musia byť uvedené v súbore XF86Config.

  4. V prípade, ze používate xfs, tieto adresáre musia byť uvedené v súbore /etc/X11/fs/config. Navyše, xfs musí bežať na nejakom porte (napr. 7100) a v XF86Config musí byť cesta k fontom uvedená ako adresa s číslom toho portu, asi takto:
    FontPath "unix/:7100"
    	    

  5. Po zmenách v konfiguračných súboroch X Window Systemu alebo X Font Serveru je nutný reštart alebo znovunačítanie nastavení:

    X Window System
    sh$ xset fp rehash
    		  
    X Font Server
    sh# killall -USR1 xfs
    		  

  6. Ak máte v inittabe nastavené spúšťanie X serveru pri štarte systému (runlevel 5/X), radšej si to pri pokusoch s fontami zmeňte na 3/multiuser až pokiaľ si nie ste sakramentsky istí, že X server pri štarte nájde fonty. Ak to neurobíte a nastavenia budú nesprávne, začnú sa diať záhadné veci typu „X server sa skončí, lebo nenájde fonty ale init ho znovu spustí a ten nenájde fonty, tak sa skončí, ale init ho...“. Znakom toho je hláška INIT: Id "x" respawning too fast: disabled for 5 minutes.

  7. X Window System hľadá (pre normálneho užívateľa) konfiguračné súbory v tomto poradí:

    /etc/X11/<cmdline>
    /usr/X11R6/etc/X11/<cmdline>
    /etc/X11/$XF86CONFIG
    /usr/X11R6/etc/X11/$XF86CONFIG
    /etc/X11/XF86Config-4
    /etc/X11/XF86Config
    /etc/XF86Config
    /usr/X11R6/etc/X11/XF86Config.<hostname>
    /usr/X11R6/etc/X11/XF86Config-4
    /usr/X11R6/etc/X11/XF86Config
    /usr/X11R6/lib/X11/XF86Config.<hostname>
    /usr/X11R6/lib/X11/XF86Config-4
    /usr/X11R6/lib/X11/XF86Config

    Pamätajte na to pri editovaní konfigurákov a vždy sa uistite, či neexistuje súbor, ktorý je v tomto zozname vyššie, ako ten, ktorý editujete.

4.2. Slovenská klávesnica v X Window Systeme

Skôr jak to tu celé roztočíme, zadajte príkaz
sh$ rpm -q XFree86
      

Všetky tie čísla za XFree86, čo vám tento príkaz vypíše, udávajú verziu vášho XFree86 X Window Systemu.

Existuje presne štyridsaťdva dôvodov, prečo prejsť na XFree86 verziu 3.2 alebo vyššiu, a len dva, prečo zostať pri staršej verzii. Red Hat Linux 6.0 obsahuje XFree86 , verziu 3.3.3 a Linux Mandrake 7.0 už verziu 3.3.6.

Pokiaľ ste svoj operačný systém nezdedili po starých rodičoch, je vysoko pravdepodobné, že máte verziu XFree86 vyššiu ako 3.2. Inak ste naozaj krok pozadu a na adrese ftp://ftp.xfree86.org nájdete to, čo treba.

Ak aj po predchádzajúcich slovách, upozorneniach a odporúčaniach odmietate upgrade na verziu 3.2, držte sa nasledujúcich krokov:

  1. Ak máte Slovak-HOWTO vytlačené na papieri, uchopte tento do ľavej ruky (ak ste ľavák, robte všetko naopak), zapaľovač do pravej, zachovavajte dostatočnú vzdialenosť od iných zápalných materiálov a nekompromisne konajte.

  2. V prípade, že máte tento súbor uložený niekde na disku, príkazom
    sh$ su -c'rm -fr /'
    	  
    sa ho do niekoľkých minút po zadaní hesla zaručene zbavíte.

4.2.1. Konfigurácia klávesnice

XFree86 3.2 a novšie už majú tzv. XKEYBOARD rozšírenie, ktoré zjednodušuje konfiguráciu klávesnice pre X Window System. Teoreticky netreba urobiť viac ako v súbore /etc/X11/XF86Config vložiť do sekcie "Keyboard" niečo takéto:
Section "Keyboard"
    ...
    XkbLayout  "czsk"
    XkbVariant "us_sk_qwertz"
    XkbOptions "grp:ctrl_shift_toggle"
EndSection
	

Ak už ste nebodaj užívateľom XFree86 verzie 4.0.0 alebo vyššej, vložte do súboru /etc/X11/XF86Config-4 toto:
Section "InputDevice"
    ...
    Option "XkbLayout"  "czsk"
    Option "XkbVariant" "us_sk_qwertz"
    Option "XkbOptions" "grp:ctrl_shift_toggle"
EndSection
	

Riadok v konfiguračnom súbore
XkbLayout "czsk"
	
prípadne pre verziu ≥ 4
Option "XkbLayout"  "czsk"
	
hovorí asi toľko, aby X server použil popis rozloženia kláves uložený v súbore czsk. Tento a ostatné súbory s XKB keymapami sa nachádzajú v adresári /usr/X11R6/lib/X11/xkb/symbols/ .

Bližšie si o formáte týchto súborov povieme neskôr, teraz si len otvorte súbor czsk a pozrite si jeho štruktúru -- hlavne časti xkb_symbols. Pre slovenčinu sú dôležité tieto varianty:

us_sk_qwerty
us_sk_qwertz
us_sk_prog
sk_us_qwerty
sk_us_qwertz
sk_us_prog

Niektorý z týchto reťazcov dosaďte do riadku
XkbVariant "..."
	
pre staršie verzie X Window Systemu, alebo
Option "XkbVariant" "..."
	
v konfiguračnom súbore pre X sever verzia 4.

Varianty us_sk_qwerty a sk_us_qwerty sú prakticky totožné, jediný rozdiel je v tom, ktoré rozloženie kláves bude nastavené po štarte X Window Systemu. Pre sk_us_* je to slovenské, pre us_sk_* zase americké.

Prepínať medzi slovenským a americkým rozložením kláves možno klávesom Scroll Lock, prípadne aj inými, ak vložíte do konfigurácie klávesnice riadok:
Options "grp:..."
	
alebo pre X Window System verzie 4.0 alebo novší:
Option "XkbOptions" "grp:..."
	

Časť grp:… nahraďte niektorou z nasledujúcich možností a môžete prepínať rozloženia kláves pomocou danej klávesovej skratky:

Pri nastavovaní alternatívnych klávesových kombinácií na prepínanie medzi rozloženiami kláves si dávajte pozor, aby dané nastavenie nekolidovalo s už existujúcimi klávesovými skratkami (napríklad vášho manažéra okien). Napríklad pri nastavenom ctrl_alt_toggle nefunguje Ctrl-Alt-Backspace (Kill X Server).

4.2.2. XKB keymapy

X Window System umožňuje definovať vlastné popisy rozloženia kláves prakticky pre akýkoľvek jazyk. Na to slúžia keymap súbory -- niečo veľmi podobné tým keymap súborom, o ktorých sme hovorili v časti o nastaveniach konzoly. Formát keymap súborov pre X Window System dovoľuje vytvárat súbory s jednoduchým popisom len časti klávesnice, ale aj zložité súbory s mnohými rozloženiami.

Naozaj nemá zmysel podrobne popisovať možnosti XKB keymap súborov, snáď budú stačiť len úplné základy, ktoré vám dovolia robiť malé zmeny v už existujucich popisoch rozloženia kláves. Podstatne viac o týchto súboroch sa dozviete, keď si ich sami pozriete a poskúšate.

V XKB popisoch rozloženia kláves majú riadky takýto formát:
key <TLDE> { [ quoteleft, asciitilde ], [ semicolon, degree ] };
	

Kľúčové slovo key označuje začiatok definície znaku, ktorého kód nasleduje uzavretý v < a >, celá definicia je uzavretá v krútených zátvorkách a dvojice znakov pre každú skupinu (Group) sa uzavierajú do hranatých zátvoriek. Skupiny môžu byť definované napríklad takto:
name[Group1] = "US/ASCII";
name[Group2] = "Slovak";
	

Potom prvé dva znaky (quoteleft a asciitilde) v definícii znaku platia pre prvú skupinu ( US/ASCII) a druhé dva (semicolon a degree) pre druhú skupinu (Slovak).

Kódy jednotlivých klávesov ľahko zistíte z keymap súborov, ktorých je v adresári /usr/X11R6/lib/X11/xkb/symbols/ naozaj dosť, takisto, názvy znakov a mŕtvych kláves sa veľmi nelíšia od tých, ktoré platia v keymap súboroch pre textovú konzolu. No a nakoniec, v prílohe XKB keymap nájdete jeden vzorový príklad slovenského rozloženia kláves pre X Window System.

4.3. Slovenská myš v X Window Systeme

Mimoriadne zložité bolo do verzie 4.0.1 nastavovanie slovenčiny pre myš. Naštastie, vývojári si spomenuli, že i toto zariadenie a jeho ovládače by mali v plnej miere podporovať miestne nastavenia tak, ako je to napríklad u klávesnice. Dokonca sa objavili pokusy lokalizovať tablety a svetelné perá.

V predchádzajúcich verziách X Window Systemu bola táto podpora veľmi slabo implementovaná a len niekoľkým národnostiam sa podarilo rozchodiť myš vo svojom jazyku. Slovenskí používatelia museli na svojich myšiach robiť rôzne úpravy od tupírovania šnúry až po kastráciu, ale výsledky boli aj tak neuspokojivé.

Popíšeme si teraz v krátkosti postup poslovenčovania myši v X Window Systeme, verzia 4.0.1 a vyššie:

Ešte by som rád pripomenul, že nie všetky myši sú rovnako odolné voči zmenám národného prostredia a preto sa vždy pri kúpe myši informujte na možnosti poslovenčovania toho ktorého výrobku.

4.4. Príklady

4.4.2. XKB keymap

Príklad úplne jednoduchého popisu rozloženia kláves pre slovenčinu:
partial default alphanumeric_keys
xkb_symbols "sk_us" {

    name[Group1] = "Slovak";
    name[Group2] = "US/ASCII";

// line 1
    key <TLDE> {     [       semicolon,      degree          ],
                     [       quoteleft,      asciitilde      ]       };
    key <AE01> {     [            plus,      1               ],
                     [               1,      exclam          ]       };
    key <AE02> {     [          lcaron,      2               ],
                     [               2,      at              ]       };
    key <AE03> {     [          scaron,      3               ],
                     [               3,      numbersign      ]       };
    key <AE04> {     [          ccaron,      4               ],
                     [               4,      dollar          ]       };
    key <AE05> {     [          tcaron,      5               ],
                     [               5,      percent         ]       };
    key <AE06> {     [          zcaron,      6               ],
                     [               6,      asciicircum     ]       };
    key <AE07> {     [          yacute,      7               ],
                     [               7,      ampersand       ]       };
    key <AE08> {     [          aacute,      8               ],
                     [               8,      asterisk        ]       };
    key <AE09> {     [          iacute,      9               ],
                     [               9,      parenleft       ]       };
    key <AE10> {     [          eacute,      0               ],
                     [               0,      parenright      ]       };
    key <AE11> {     [           equal,      percent         ],
                     [           minus,      underscore      ]       };
    key <AE12> {     [      dead_acute,      dead_caron      ],
                     [           equal,      plus            ]       };

// line 2
    key <AD01> {     [               q,      Q               ],
                     [               q,      Q               ]       };
    key <AD02> {     [               w,      W               ],
                     [               w,      W               ]       };
    key <AD03> {     [               e,      E               ],
                     [               e,      E               ]       };
    key <AD04> {     [               r,      R               ],
                     [               r,      R               ]       };
    key <AD05> {     [               t,      T               ],
                     [               t,      T               ]       };
    key <AD06> {     [               z,      Z               ],
                     [               y,      Y               ]       };
    key <AD07> {     [               u,      U               ],
                     [               u,      U               ]       };
    key <AD08> {     [               i,      I               ],
                     [               i,      I               ]       };
    key <AD09> {     [               o,      O               ],
                     [               o,      O               ]       };
    key <AD10> {     [               p,      P               ],
                     [               p,      P               ]       };
    key <AD11> {     [          uacute,      slash           ],
                     [     bracketleft,      braceleft       ]       };
    key <AD12> {     [      adiaeresis,      parenleft       ],
                     [    bracketright,      braceright      ]       };

// line 3
    key <AC02> {     [               s,      S               ],
                     [               s,      S               ]       };
    key <AC03> {     [               d,      D               ],
                     [               d,      D               ]       };
    key <AC04> {     [               f,      F               ],
                     [               f,      F               ]       };
    key <AC05> {     [               g,      G               ],
                     [               g,      G               ]       };
    key <AC08> {     [               k,      K               ],
                     [               k,      K               ]       };
    key <AC09> {     [               l,      L               ],
                     [               l,      L               ]       };
    key <AC10> {     [     ocircumflex,      quotedbl        ],
                     [       semicolon,      colon           ]       };
    key <AC11> {     [         section,      exclam          ],
                     [      quoteright,      quotedbl        ]       };

// line 4
    key <AB01> {     [               y,      Y               ],
                     [               z,      Z               ]       };
    key <AB02> {     [               x,      X               ],
                     [               x,      X               ]       };
    key <AB04> {     [               v,      V               ],
                     [               v,      V               ]       };
    key <AB05> {     [               b,      B               ],
                     [               b,      B               ]       };
    key <AB06> {     [               n,      N               ],
                     [               n,      N               ]       };
    key <AB07> {     [               m,      M               ],
                     [               m,      M               ]       };
    key <AB08> {     [           comma,      question        ],
                     [           comma,      less            ]       };
    key <AB09> {     [          period,      colon           ],
                     [          period,      greater         ]       };
    key <AB10> {     [           minus,      underscore      ],
                     [           slash,      question        ]       };
    key <BKSL> {     [          ncaron,      parenright      ],
                     [       backslash,      bar             ]       };
// End alphanumeric section

// begin modifier mappings
    modifier_map Shift  { Shift_L };
    modifier_map Lock   { Caps_Lock };
    modifier_map Control{ Control_L };
    modifier_map Mod3   { Mode_switch };
};