Další Předchozí Obsah

4. Lokalizace X Window Systemu

Petr Kolář Petr.Kolar@vslib.cz; 14. 5. 1999, používání mapy cs: Peter Ivanyi Ivanyi@internet.sk: 1. 1. 1999

Základem lokalizace X Window Systemu je instalace fontů a klávesnicových map použitelných v programech v tomto prostředí. Dále je možné lokalizovat jednotlivé programy, zejména window manažery.

4.1 Fonty v X Window System

Aplikace pod X mohou používat jak rastrové (bitmapové) tak vektorové fonty, pokud je podporuje X-server (novější X-servery umí Type1 a Speedo fonty, pro TrueType fonty je nutný zvláštní fontserver). Vektorové fonty je možné snadno zvětšovat a zmenšovat na různé velikosti (škálovat); novější X-servery umí škálovat i rastrové fonty, ale výsledná kvalita je velmi odpuzující. Rastrové fonty jsou uloženy, jak název napovídá, v podobě dvoubarevných bitových map. I když je možné vytvářet fonty přímo jako bitové mapy, profesionální rastrové fonty jsou zpravidla vyrastrované škálovatelné fonty. V principu lze použít i fonty z TeXu (zkonvertované programem pk2bm), ovšem tyto fonty (zejména Computer Modern) jsou navrženy pro větší rozlišení, obsahují vlasové čáry a proto jsou při vyrastrování na rozlišení obrazovky (75 nebo 100 dpi) dosti nevzhledné.

Fonty mohou být buď uloženy přímo na disku X-serveru (nebo v paměti ROM u X-terminálů), nebo mohou být zpřístupněny po síti pomocí tak zvaného fontserveru. Hlavní výhodou fontserveru je, že poměrně velké soubory s fonty nemusí být nainstalovány na každém X-serveru; na pomalých strojích (386) může být použití vnějšího font serveru výhodné i proto, že při výpočetně náročném zpracovávání fontů dočasně zamrzne jen příslušný program a ne celý X-server. TrueType fonty jsou dostupné pouze přes fontserver.

Rastrové fonty se distribuují zpravidla v textovém formátu .bdf (Bitmap Distribution Format). X-server ovšem rychleji pracuje s fonty v binárním tvaru. Preferovaným binárním formátem fontů pro servery X11R6 a X11R5 je formát .pcf, starší X-servery (X11R4) používaly jiné binární formáty fontů (často závislé na endianitě) --- například .snf. Pro ušetření diskového prostoru bývají soubory s fonty zkomprimované programem gzip nebo compress. Pro konverzi různých formátů fontů jsou v distribuci X11 programy jako bdftopcf, bdftosnf a další.

Soubory s fonty jsou uloženy v několika adresářích, jejichž jména musí být uvedena v konfiguračním souboru X serveru (u XFree86 v řádcích FontPath v sekci Files v souboru /etc/X11/XF86Config) nebo zadána příkazem xset fp, který umožňuje, aby si uživatelé nainstalovali své vlastní fonty. V každém z adresářů musí být soubor fonts.dir, který se vytvoří (případně aktualizuje) příkazem


mkfontdir [ adresář ]

Protože jména fontů jsou velmi dlouhá (viz dále), lze používat přezdívky, které se definují v souboru fonts.alias pomocí řádků tvaru:

fixed        -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-1

V našich podmínkách je významnou vlastností možnost používání fontů v různých kódováních. Soubory s fonty pro různá kódování se zpravidla umísťují do samostatných adresářů. Přitom u některých programů záleží na pořadí, v jakém jsou adresáře uvedeny v konfiguračním souboru (je vhodné mít adresáře s ISO-8859-2 fonty na začátku). Mají-li být naopak fonty s různým kódováním v jednom adresáři, je potřeba dát pozor, aby se soubory obsahující stejné fonty v různém kódování nepřepsaly (dát jim různá jména).

Neprivilegovaný uživatel, který nemá možnost měnit konfigurační soubor X-serveru, si může nainstalovat vlastní fonty tak, že soubory s fonty umístí do libovolného adresáře, a zadá příkazy


mkfontdir adresář
xset +fp adresář
xset fp rehash

První příkaz vytvoří soubor fonts.dir, který obsahuje seznam fontů v adresáři. Příkaz xset +fp adresář zajistí přidání zadaného adresáře na začátek seznamu adresářů s fonty (alternativou je xset fp+ adresář, který přidá adresář na konec seznamu; příkaz xset -fp adresář naopak adresář ze seznamu odebere). Poslední příkaz zajistí nové načtení seznamu fontů po jejich změně bez restartování X serveru. Aby vzaly nové fonty na vědomí i jednotlivé programy, je nutné je znovu spustit.

Pro jednoznačný popis fontu se používá jméno, které se skládá ze 14 složek --- například -adobe-times-medium-r-normal--12-120-75-75-p-64-iso8859-2.


složka
příklad význam
foundry adobe výrobce (doslova písmolijna)
family times rodina
weight medium tučnost
slant r sklon
setwidth normal šířka písma
addstyle dodatečný styl
pixels 12 velikost v pixelech
points 120 velikost v desetinách tiskařského bodu
resx 75 rozlišení ve směru osy x
resy 75 rozlišení ve směru osy y
spacing p mezerování
avgwidth 64 průměrná šířka znaku v desetinách tiskařského bodu
registry iso8859 registr znakové sady
encoding 2 kódování
Složky jména fontu v X11

Název fontu vychází z toho, že jeden výrobce může dodávat více rodin písem. Rodina zpravidla obsahuje několik řezů písma v různých velikostech. Jednotlivé řezy se liší tučností (tloušťkou tahů), šířkou, sklonem, tím, zda znaky mají patičky (serif) nebo jsou bez nich (sans serif), a každý řez může být dostupný v několika velikostech.

Pro používání v X je důležitou charakteristikou písma jeho mezerování. U proporcionálních písem (spacing=p), které se běžně používají při tisku knih a časopisů, mají různé znaky různou šířku, například znak 'i' je užší než znak 'm'. Tato písma jsou vhodná například pro zobrazování WWW stránek. Pro použití v terminálových emulátorech jako je xterm je třeba používat písma pevné šířky jako u psacího stroje. Tato písma jsou vhodná například pro výpisy programů, kde je potřeba, aby znaky v různých řádcích byly pod sebou. I u písma pevné šířky mohou některé znaky přečnívat z prostoru, který je jim vymezen (spacing=m), ovšem pro xterm a další programy, které na obrazovce přepisují jednotlivá písmena, je nutné písmo, které má nejen pevnou šířku, ale jehož všechny znaky se vejdou do vymezeného prostoru, tak zvaného cellboxu (spacing=c). Přitom některá písma v X (například neskloněná písma Adobe Courier) mají chybně uvedeno spacing=m, i když ve skutečnosti vyhovují podmínkám pro spacing=c a je tedy možné je používat i jako fonty pro xterm.

Rastrové fonty pro X

X11R6 jsou standardně dodávány s několika málo nebo zcela bez ISO-8859-2 fontů. ISO-8859-2 fonty lze získat podle informací na http://www.biz.net.pl/english/x-fonts/index.html nebo na ftp://ftp.agh.edu.pl/pub/utils/x11/fonts/pl/, ve formátu *.rpm na ftp://ftp.muni.cz/pub/linux/distributions/redhat/contrib/i386/ nebo ftp://sunsite.mff.cuni.cz/MIRRORS/ftp.redhat.com/pub/contrib/i386/ soubory ftp://ftp.muni.cz/pub/linux/distributions/redhat/contrib/i386/ISO-8859-2-X11-fonts-75dpi-970301biznet-3.i386.rpm, ftp://ftp.muni.cz/pub/linux/distributions/redhat/contrib/i386/ISO-8859-2-X11-fonts-100dpi-970301biznet-3.i386.rpm a ftp://ftp.muni.cz/pub/linux/distributions/redhat/contrib/i386/ISO-8859-2-X11-fonts-basic-970301biznet-3.i386.rpm a ve formátu *.deb na ftp://ftp.debian.org/debian/hamm/hamm/binary-all/x11/xfntil2*.deb. Neproporcionální fonty z balíku misc nejsou příliš kvalitní, lepší je možné získat z balíku cs-tools z adresáře X11/fonts/xfonts. Tyto fonty ovšem údajně nejsou free.

Přestože rozlišení většiny displejů je okolo 75dpi, pokud je dostatek místa na disku, je vhodné nainstalovat i fonty v rozlišení 100dpi, zvětší se tím počet dostupných velikostí jednotlivých písem.

U mnoha programů lze parametrem -fn stanovit, jaký mají používat font:


xterm -fn '-misc-fixed-medium-r-normal--14-*-iso8859-2'

Znak hvězdička je žolík, který nahrazuje jednu nebo více složek jména. U většiny programů je možné nastavit používané fonty také pomocí atributů (resources). To může provést buď správce počítače úpravou souboru z adresáře /usr/X11R6/lib/X11/app-defaults, nebo libovolný uživatel tím, že zkopíruje soubor ze zmíněného adresáře do svého domovského adresáře, a na začátek jména souboru přidá tečku.

Vektorové fonty pro X

4.2 Klávesnice v X pomocí XKB

Pro používání české klávesnice v X Window System musíte mít nainstalované a nastavené locales (viz kapitola locales), takže první z příkazů


printenv LC_ALL
printenv LC_CTYPE
printenv LANG

který něco vypíše, musí vypsat cs_CZ, cs_CZ.kódování nebo czech (pouze v případě, že máte české locale pro kategorii LC_CTYPE v adresáři cs, může být vypsáno cs). V KDE je pro nastavení klávesnice přímo menu, v ostatních prostředích je třeba vybrat vhodnou mapu klávesnice příkazem


setxkbmap -symbols 'czsk(us_cz_qwertz)' -compat group_led

který může být umístěn v souboru $HOME/.Xclients jednotlivých uživatelů, aby se provedl automaticky při každém spuštění X. Mapa us_cz_qwertz má dva režimy činnosti. V prvním funguje americké rozložení klávesnice, ve druhém se chová jako český psací stroj. Přepínání mezi oběma režimy se provádí klávesou ScrollLock nebo současným stisknutím obou kláves Shift. Chvilkového přepnutí do opačného režimu lze dosáhnout držením pravé klávesy Alt. Klávesa = funguje jako mrtvá čárka, se Shiftem jako mrtvý háček, klávesa ` (vlevo od klávesy 1) funguje jako mrtvá přehláska a se Shiftem jako mrtvý kroužek, tj. pro napsání ň musíte stisknout Shift+= a potom n. Kromě mapy us_cz_qwertz je k dispozici ještě mapa us_cz_qwerty, která má oproti českému psacímu stroji přehozené klávesy z a y, a mapa us_cz_prog, u které horní řada kláves s číslicemi produkuje písmena s háčky a čárkami jako na českém psacím stroji, fungují obě mrtvé klávesy, ale jinak se klávesnice chová jako americká. Existují i mapy cz_us_*, které mají implicitně zapnutou jednu z uvedených českých klávesnic a lze je přepnout na americkou klávesnici. Tyto mapy ovšem působí problémy při komunikaci s nelokalizovanými počítači. Ke všem šesti mapám existují i slovenské varianty, v jejichž jméně je cs nahrazeno sk.

Pro používání výše uvedených map klávesnice musí mít sekce Keyboard souboru /etc/X11/XF86Config tento obsah:

  Protocol        "Standard"
  AutoRepeat      500 5
  XkbModel        "pc102"

--- nesmí obsahovat řádek XkbDisable, a aby bylo možné měnit mapy klávesnice příkazem setxkbmap, musí být použit řádek XkbModel (samozřejmě s uvedením správného modelu klávesnice). Přidáním řádků

  XkbKeymap       "xfree86(us_cz_qwertz)"
  XkbCompat       "group_led"

je možné zajistit zapnutí zadané mapy klávesnice při každém startu X bez použití příkazu setxkbmap.

Všechny výše uvedené mapy klávesnice jsou standardní součástí balíku XFree86 až od verze 3.3.3.1 z roku 1999, takže pokud máte starší verzi nebo X jiné produkce, budete muset tyto mapy doinstalovat (nyní jsou pravděpodobně dostupné pouze jako součást balíku XKB-czsk-forcedIM). nebo se musíte spokojit s mapou cs, která je součástí X11 již od verze R6.1 Mapa cs se zapíná příkazem setxkbmap cs -option grp:shift_toggle nebo řádky

  XkbLayout       "cs"
  XkbOptions      "grp:shift_toggle"

v souboru /etc/X11/XF86Config. Parametr grp:shift_toggle umožňuje přepnutí na americkou klávesnici současným stiskem obou Shiftů, což je nezbytné, protože mapa cs sama o sobě neumožňuje zadávat některé speciální znaky, například křížek # a zavináč @.

Verzi X je možné zjistit příkazem

X -showconfig

Možné problémy

Lokalizace klávesnice v X byla až donedávna jedním z nejtvrdších oříšků při lokalizaci Linuxu. Pokud nepoužíváte nejnovější verzi X11 (a nepoužíváte KDE, v němž je česká klávesnice už poměrně dlouho funkční), je téměř jisté, že vám klávesnice fungovat nebude, ale ani v nejnovější verzi X11 nebude fungovat v každém programu. Pokud máte tu smůlu, že vám klávesnice nefunguje vůbec nikde, použijte následující postup pro odhalení a odstranění chyb:

Zkontrolujte, zda máte správně nastavené proměnné prostředí pro locales, jak je popsáno na začátku této kapitoly, otevřete si textové terminálové okno a zkuste zapnout klávesnici příkazem


setxkbmap -symbols 'czsk(us_cz_qwertz)' -compat group_led

Pokud není příkaz setxkbmap nalezen (měl by být v /usr/bin/X11/setxkbmap), pak pravděpodobně máte velmi starou verzi X a budete muset provést upgrade nebo použít klávesnici popsanou v podkapitole Klávesnice v X pomocí xmodmap či se spokojit s počeštěním klávesnice pouze v programu xterm popsaným v kapitole Lokalizace jednotlivých aplikací. Jestliže se vypíše XKB extension not present on :0.0, znamená to, že nemáte zapnuté XKB (v souboru /etc/X11/XF86Config je nevykomentovaný řádek XkbDisable). Jestliže se vypíše Couldn't interpret _XKB_RULES_NAMES property, chybí vám v sekci Keyboard souboru /etc/X11/XF86Config řádek XkbModel nebo nemáte nainstalovány české mapy klávesnice.

Mapy klávesnice jsou součástí balíku ftp://ftp.muni.cz/pub/localization/linux/X11/XKB-czsk-forcedIM-0.04.tar.gz, který však obsahuje také knihovnu forcedIM, pro "opravu" některých aplikací nefungujících s českou klávesnicí. Tato knihovna může s některými programy a verzemi X11 způsobovat problémy. Pokud budete instalovat soubory s mapami klávesnice z tohoto balíku ručně, nezapomeňte, že po přidání souboru do některého z adresářů v /usr/X11R6/lib/X11/xkb je nutné aktualizovat příslušný .dir soubor, například takto:

cd /usr/X11R6/lib/X11/xkb/keymap
xkbcomp -llphfR '*' -o ../keymap.dir

Pokud se mapu klávesnice podařilo nastavit, nastavte proměnnou prostředí XKB_DEBUG a v okně s terminálovým emulátorem zadejte ručně příkaz


xterm &

V původním okně se musí vypsat XKEYBOARD (version 1.00/1.00) OK!. Pokud se vypíše XKEYBOARD extension not present je opět problém s XkbDisable.

Pokud se v původním okně vypíše Warning: locale not supported by C library, locale unchanged, je to chyba v nastavení locales --- některou z výše uvedených proměnných prostředí máte nastavenu na locale, které na vašem počítači není nainstalované nebo je nastavena na alias, jemuž v souboru /usr/share/locale/locale.alias není přiřazeno existující locale (v adresáři, který se vypíše příkazem localedef --help není podadresář s příslušným jménem).

Jestliže se v původní okně vypisuje Warning: locale not supported by Xlib, locale set to C není nastavené locale známé knihovně Xlib. Obvykle to je cs_CZ; konkrétní hodnotu lze zjistit ručním startem programu netscape (vypíše se něco jako netscape-navigator: locale `cs_CZ' not supported by Xlib; trying `C'.). Pro inkriminované locale je nutné doplnit nebo upravit v souboru /usr/X11R6/lib/X11/locale/locale.alias řádek

cs_CZ                   cs_CZ.ISO8859-2

Tato chyba je opravena až v XFree86 3.3.3.1. Také je chybně řádek pro czech --- správně má být

czech                   cs_CZ.ISO8859-2

ale tato chyba se při normální instalaci libc/glibc neprojeví (czech je alias na cs_CZ.ISO8859-2 a locales jsou umístěné v adresáři cs_CZ, takže X použijí cs_CZ). Řádek pro czech je opraven v X11R6.4.

Je-li vše v pořádku, přepněte se do nově otevřeného okna programu xterm, zadejte příkaz vi test, stiskněte klávesu i, a přepněte na českou klávesnici stisknutím klávesy Scroll Lock. Pokud byla mapa klávesnice nastavena s -compat group_led, měla by se kontrolka Scroll Lock rozsvěcet a zhasínat nejen při mačkání klávesy Scroll Lock, ale i stisknutím obou kláves Shift, a musí také blikat v rytmu mačkání pravé klávesy Alt. Při rozsvícené kontrolce Scroll Lock můžete zkontrolovat, zda funguje psaní českých znaků. Měly by se vypisovat háčkované znaky ěščřž, čárkované ýáíéú i znaky s akcenty po použití mrtvých kláves. Fungovat znamená, že se něco vypisuje. Jestliže se vypisují podivné znaky, bude problém v tom, že xterm nepoužívá ISO-8859-2 fonty nebo tyto fonty ani nemáte nainstalované. Řešení naleznete v kapitole Fonty v X Window System.

Pokud klávesnice funguje ve vi, ale ne v příkazovém řádku, nemáte pravděpodobně zkonfigurovaný shell pro práci s osmibitovými znaky. Náprava je popsána v podkapitolách bash a tcsh.

Pokud v nově otevřeném okně česká klávesnice funguje, ale jinde ne, zkontrolujte, zda máte potřebné proměnné prostředí nastaveny už před startem X a zda ostatní okna nepatří jinému terminálovému emulátoru než programu xterm. Jiné terminálové emulátory nemusí s českou klávesnicí pracovat.

Nefungují klávesy 'ěščřž', ale 'ýáíéú' fungují: nemáte nastavenou proměnnou prostředí LC_ALL nebo LC_CTYPE, případně LANG na czech nebo cs_CZ (než jste dočetli sem, byli jste několikrát nabádáni k jejich nastavení).

Nefungují klávesy 'ýáíéú', tyto znaky však lze napsat pomocí mrtvé klávesy čárka a 'yaieu': toto je dlouho známá chyba, která je odstraněna až v XFree86 3.3.3.1. Naštěstí ve starších verzích X je možné ji obejít úpravou textových souborů popsanou v podkapitole Nefungující áéíúý.

Kroužkované 'ů' se na programátorské klávesnici píše stisknutím mrtvé klávesy Shift+obrácený apostrof následovaným stiskem klávesy u. Pokud jste zvyklí psát kroužkované 'ů' jako mrtvý háček a 'u', přidejte do souboru /usr/X11R6/lib/X11/locale/iso8859-2/Compose řádky

<dead_caron> <U>                        : "\331"        Uring
<dead_caron> <u>                        : "\371"        uring

(velké mezery jsou vytvořeny tabelátory).

V tomto okamžiku by vám česká klávesnice v X měla v zásadě chodit. Bohužel stále existuje mnoho programů pod X, které s českou klávesnicí nepracují. Je to chyba aplikace. Řešením je chybné aplikaci opravit nebo někoho znalejšího slušně požádat o pomoc s opravou. Než bude aplikace korektně opravena, můžete se pokusit o dočasnou nápravu popsanou v podkapitole Problém mrtvých kláves a XKB. Pokud aplikace načítá české znaky, ale nepracuje s mrtvými klávesami, je též možné používat klávesnici cz-komp-qwerty nebo cz-komp-qwertz, kde se akcentované znaky píšou se stisknutým pravým Alt (například 'ó' se dostane jako AltGr-o, 'Ř' se dostane kombinací Alt-Shift-R).

Nefungující áéíúý

Tato chyba se projevuje tím, že není možné vkládat z klávesnice ne-ASCII znaky, které patří zároveň do ISO-8859-1 i do právě používané znakové sady (pro češtinu sada ISO-8859-2 a znaky áéíúý), bez použití mrtvých kláves. Vkládání pomocí mrtvé klávesy čárka následované aeiuy přitom funguje. Chyba se projevuje ve všech aplikacích v X, a je opravena až v XFree86 3.3.3.1.

Ve starších verzích je možné tuto chybu několika způsoby obejít. Pravděpodobně žádný z nich není zcela korektní, ale chybu odstraňují.

Asi nejlepší je do souboru /usr/X11R6/lib/X11/locale/iso8859-2/Compose přidat následující řádky:


<yacute>                               : "\375"        yacute
<aacute>                               : "\341"        aacute
<iacute>                               : "\355"        iacute
<eacute>                               : "\351"        eacute
<uacute>                               : "\372"        uacute

Druhou možností je opravit řádek

        ct_encoding     ISO8859-2:GR

téměř na konci souboru /usr/X11R6/lib/X11/locale/iso8859-2/XLC_LOCALE na

        ct_encoding     ISO8859-2:GR; ISO8859-1:GR

První metoda opravy je pravděpodobně o něco lepší, protože u druhé při uvedení názvu symbolu patřícího do ISO-8859-1 a ne do ISO-8859-2 v definici klávesnice bude při stisknutí příslušné klávesy načten znak s příslušným kódem, přestože se v sadě ISO-8859-2 nevyskytuje.

Starší opravy této chyby používaly v mapách klávesnice pro dotčené znaky symboly il2_* definované v souboru Compose (il2_aacute místo aacute) nebo přímo číselné kódy těchto znaků.

Problém mrtvých kláves a XKB

Další problémy s českou a slovenskou klávesnicí vznikají tím, že se pro psaní některých znaků s akcenty používají mrtvé klávesy (klávesy odpovídající samostatné čárce a háčku na psacím stroji, které vypíšou akcent bez posuvu válce, takže další napsaný znak bude na téže pozici). Na počítači je potřeba při stisknutí mrtvé klávesy pozdržet zpracování znaku až do stisknutí další klávesy, a pak například místo krátkého 'a' vrátit dlouhé 'á'. Bohužel podpora mrtvých kláves byla až do verze X11R6 záležitostí X-serveru, a některé X-servery mrtvé klávesy vůbec nepodporovaly. Standardní podpora mrtvých kláves se objevila až ve verzi X11R6.1 spolu s novým mechanismem pro práci s národními klávesnicemi zvaným X Keyboard Extension (XKB) používajícím tak zvané vstupní metody (input methods). Tyto vstupní metody musí jednotlivé aplikace inicializovat a používat, takže starší aplikace s XKB nefungují. XFree86 --- free implementace X11 používaná ve většině distribucí Linuxu podporuje mrtvé klávesy pomocí XKB od verze 3.3, do té doby bylo možné používat mrtvé klávesy pouze pomocí xmodmap.

V současnosti je stále mnoho starších aplikací, které s XKB nefungují. Koncepčním řešením je tyto aplikace upravit, aby používaly vstupní metody. Než k tomu dojde, je nutné se v neupravených programech vzdát používání národních klávesnic nebo používat různé špinavé triky, které jejich používání umožní.

Nejrozšířenějším z těchto triků je patch Stano Meduny na knihovnu libX11, známý pod názvem forcedIM. Tento patch zajistí, že pokud aplikace správně neinicializuje vstupní metody, provede jejich inicializaci přímo zmíněná knihovna. Používání patchované knihovny má však několik nevýhod:

Některé z nevýhod forcedIM odstraňuje balík http://www.fi.muni.cz/~kabi/linux/LibI18Nforce.tar.gz, který obsahuje upravené verze pouze několika málo funkcí z libX11 a navíc je možné jej používat selektivně pouze pro aplikace, které s národní klávesnicí nepracují. Takové aplikace se startují následující dávkou:


#!/bin/sh
LD_PRELOAD=LibI18N/lib/libI18Nforce.so.0.0
export LD_PRELOAD
chybna_aplikace $*

(před libI18Nforce.so.0.0 a chybna_aplikace je třeba doplnit správné cesty, pro libc5 je třeba použít libI18Nforce-c5.so.0.0). Instalace balíku spočívá v rozbalení archivu a vytvoření startovacích skriptů pro všechny X11 programy, které nefungují s mrtvými klávesami (a které s knihovnou libI18Nforce fungují). Balík neobsahuje mapy klávesnice.

Obdobným řešením je pomocná knihovna http://www.penguin.cz/~marvin/X/XKBCZ.tgz od Tomáše Zikmunda popsaná na http://www.nime.cz/suse_applix_cz.html. Toto řešení pravděpodobně napravuje chování největší skupiny programů (včetně Applixware 4.4.1), ovšem zásahy do různých konfiguračních souborů jsou poměrně velké (některé z nich budou asi i zbytečné).

Původní balík forcedIM od Stano Meduny lze získat na ftp://ftp.fi.muni.cz/pub/localization/linux/X11/XKB-czsk-forcedIM-0.04.tar.gz. Tento balík ovlivňuje všechny X11 aplikace (některé bohužel negativně). Zahrnuje v sobě starší balíky XKB-cz-X11R6.3.tar.gz s mapami klávesnic us_cz_qwertz atd., xlib-forcedIM-0.01.tar.gz (který obsahuje i přeloženou patchovanou knihovnu z  ftp://ftp.levonet.sk/pub/linux/localization/libX11.so.6.99), cs_CZ locale (už obsažené v glibc 2.0.7, ale chybějící v glibc 2.0.5), sk_SK locale a patch na soubor XLC_LOCALE. Balík by měl fungovat na všech distribucích Linuxu používajících XFree86 s XKB rozšířením (lze zjistit podle existence adresáře /usr/X11R6/lib/X11/xkb). RPM tohoto balíku je na ftp://rak.isternet.sk/pub/linux/localization/mirrors/salstar.award.sk/RPMS/XKB-czsk-forcedIM-0.04-2.i386.rpm.

Rozbalený balík se nainstaluje spuštěním skriptu install.sh. Skript je nutné spustit jako root z konzole (ne z X). Pokud váš počítač startuje přímo do X (runlevel 5), je vhodné změnit pro instalaci implicitní runlevel v řádku id:5:initdefault: v souboru /etc/inittab na 3, a hodnotu 5 vrátit až po ověření, že X skutečně fungují. Popis, jak přepínat jednotlivé mapy klávesnice, je uveden na začátku kapitoly Klávesnice v X pomocí XKB. Pro zajištění funkčnosti aplikací, které neinicializují vstupní metody, je třeba nastavit proměnnou XLIB_FORCE_I18N na hodnotu 2 nebo 1.

V případě problémů s konkrétní aplikací při používání knihovny forcedIM nastavte před spuštěním problémové aplikace proměnnou prostředí XLIB_FORCE_I18N_DEBUG na hodnotu 2 a pošlete výstup s popisem, po které akci následovaly konkrétní řádky výpisu, na adresu stano@trillian.eunet.sk.

4.3 Klávesnice v X pomocí xmodmap

Tato klávesnice je použitelná i na X-serverech, které nepodporují XKB. Aby fungovaly mrtvé klávesy, je nutná jejich podpora na X-serveru.

Řešení z cs-tools

Jedná se o zastaralé řešení, které je zde uvedeno pouze pro úplnost. Neobtěžujte prosím jeho autora ani s žádostmi o pomoc nebo radu.

Řešení je obsaženo v balíku cs-tools, v adresáři X11/Xlib-Compose-1.1. Každá klávesnicová mapa obsahuje dvě klávesnice; na druhou klávesnici je možné přepnout držením AltGr (pravá klávesa Alt) nebo přeřazovačem ScrollLock.

Řešení od Zdeňka Kabeláče

Zdeněk Kabeláč kabi@fi.muni.cz; 16. 9. 1998

Jedná se o pokračování modifikace varianty s pomocí Xmodmap (Viz např http://www.fi.muni.cz/~kabi/linux/linux.html); původní Xmodmap se nahradí novější variantou http://www.fi.muni.cz/~kabi/Xmodmap, čímž je v provozu přepínání mezi 3 klávesnicemi (zatím nevím jak to inteligentně hlásit --- svítící scroll-lock při variantě B i C není příliš srozumitelný):

Varianta A --- čistá US klávesnice Scroll-lock přepíná klávesnici --- Win95 klávesa také. (Pro zájemce přepínání Ctrl+Shift :-))

Varianta B --- moje "klasická" česká --- tj. česky pouze 2, 3, ..., 0 jinak standard (tj. včetně +/=), vše ostatní přes mrtvé klávesy - využívá jednak standardní mrtvoly rozmístěné na F9-F12 (nejsou všechny) a využívá dead_iota na PrintScrn ve spojení s hack-em Compose - nedávno publikovaném na http://www.fi.muni.cz/~pekon/Compose.

Varianta C --- hnusný škaredý ošklivý hack --- nicméně funguje - měl by umožnit vkládat české znaky tam, kde je to nezbytně nutné a program to prostě jinou cestou nepodporuje --- např. staré verze netscape aj. (lze na to použít i LD_PRELOAD s několika hacknutými patchnutými funkcemi, ale tato varianta je přece jen jednodušší). Protože v této variantě nelze používat mrtvé klávesy, musel jsem naskládat standardně česky používané klávesy na F-keys --- velká písmena se píší se shiftem --- tj. klávesnice nepíše !@#$%^&*()_ a F1-F20 --- pokud jsou potřeba tyto znaky je potřeba se přepnout, napsat je, a přepnout se zpět.

Samozřejmě nelze očekávat, že program sám od sebe neschopný pracovat s ISO-8859-2, začne tyto symboly korektně implementovat. Jde o hack, který prostě vrací místo dcaron -> idiaeresis, což je symbol ležící na stejné pozici, ale v sadě ISO-8859-1. Aby tedy bylo vidět správný výstup je potřeba špatně napsanému programu vnutit font --- což se nemusí vždy podařit - pak tedy sice budete psát správně, jenže uvidíte špatně :-)

Všem se tu omlouvám, že jsem tu publikoval tento hack --- jsem proti němu, ale je to tak jednoduché a primitivní, že by bylo škoda se o této možnosti nezmínit.

Pokud chce někdo nějaké standardní rozmístění psacího stroje, nechť si upraví Xmodmap, a pokud si myslí, že to udělal fakt sqěle, ať mi jej mailne.


Další Předchozí Obsah