Lokalizaci prostředí X Window System rozdělujeme na lokalizaci vlastního grafického prostředí a lokalizaci použitých aplikací. Základem lokalizace prostředí jsou správně nastavené locale (viz kapitola locales, instalace fontů pro naše kódování (ISO-8859-2) a instalace potřebných klávesnicových map. Nepřítomnost lokalizace nebo její špatné použití v jednotlivých aplikacích může způsobit, že v nich nepůjde vkládat české znaky nebo budou špatně zobrazovány. Tyto problémy nesouvisí se správnou lokalizací vlastního grafického prostředí.
Samostatným úkolem je lokalizace window manažerů (správců oken), případně celých grafických prostředí, jako je KDE nebo Gnome (které řeší lokalizaci svými vlastními silami).
Aplikace pod X mohou používat jak rastrové (bitmapové) tak vektorové
fonty (pokud je podporuje X-server). Starší X servery uměly jen Type1 a
Speedo fonty, dnes je možné používat i fonty TrueType (vektorové).
Jejich výhoda spočívá v tom, že je můžeme snadno zvětšovat a zmenšovat
na různé velikosti (škálovat). Škálovat sice lze i rastrové fonty, avšak
výsledek je velmi odpuzující (písmena jsou zubatá a deformovaná).
Rastrové fonty vznikají obvykle vyrastrováním škálovatelných fontů na
předem zvolené velikosti, i když je lze už od počátku navrhovat jako
bitmapy. Rastr je pak uložen jako dvoubarevná bitová mapa. 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 jsou uloženy na disku v podobě souborů (u X-terminálů mohou být uloženy i v paměti ROM) Protože jsou některé operace s fonty poměrně náročné a jejich zpracování blokovalo činnost celého X serveru, jsou v dnešní době pro jejich zpracování používány tzv fontservery (běží jako samostatný proces, zpracování fontu zablokuje pak jen jeden proces a ne celý X server). Fontserver může s X serverem komunikovat buď přes soket (pokud oba běží na stejném počítači) nebo přes síť, což může být výhodné pro pomalejší terminály nebo pro sdílení velkého množství fontů (úspora místa na discích).
Rastrové fonty jsou zpravidla distribuovány 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ší.
X server získá informaci o místě uložení fontů ze svého konfiguračního
souboru. Pro XFree86 verze 3 je to soubor /etc/X11/XF86Config
, u
verze 4 pak soubor /etc/X11/XF86Config-4
). Záznam o cestě k
fontům je uveden v řádcích FontPath v sekci Files. Následující příklad
má na prvním řádku odkaz na místní fontserver, dále pak dva adresáře s
fonty a poslední řádek odkazuje na fontserver umístěný na jiném
počítači v síti (standardní port pro fontserver je 7100). Více o
formátu konfiguračního souboru získáte v manuálové stránce
XF86Config(5x).
Section "Files"
FontPath "unix/:7100"
FontPath "/usr/X11R6/lib/X11/fonts/75dpi/"
FontPath "/usr/X11R6/lib/X11/fonts/100dpi/"
FontPath "tcp/stroj.jinde.cz:7100"
EndSection
Cestu k fontům lze za běhu X serveru ovlivňovat příkazem xset
fp
, pomocí něhož si každý uživatel může měnit konfiguraci X serveru
podle svých potřeb.
V každém adresáři s fonty musí být soubor fonts.dir
, který
vytvoříme (případně aktualizuje) příkazem
mkfontdir [ adresář ]
Protože jména fontů jsou velmi dlouhá (viz dále), lze pro ně používat i
přezdívky. Ty jsou definovány v adresářích s fonty v souborech
fonts.alias
pomocí řádků ve tvaru:
fixed -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-1
Pokud některá aplikce používá zkratku pro odkaz na font, můžeme
změnou aliasu použitý font změnit. To je výhodné zejména pro změnu
kódování fontu (poslední část jména zcela vpravo), bohužel tyto změny
jsou pak globální pro všechny aplikace běžící na tomto X serveru. Po
změně souboru s aliasy je nutné upozornit fontserver příslušným
signálem (aby si fonty znovu načetl) nebo případně upozornit X server
příkazem xset fp rehash
.
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 (jména fontů jsou uložena uvniř souboru s fontem, názvy souborů
na ně nemají vliv) --- 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í |
|
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). 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 (znaky pak lze umístit na předem danou pozici nezávisle na zvoleném fontu). 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.
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.
Protože stále trvá nedostatek kvalitních Type1 fontů, používá mnoho lidí TrueType fonty, které jsou snadněji dostupné (používají se v MS Windows). Pokud vyhovíte licenčnímu ujednání, můžete použít unicodové TrueType fonty od firmy Microsoft (první odkaz). Na Internetu nebo v obchodech (na nejrůznějších CD) pak naleznete nejrůznější další fonty nebo využijete již hotové balíčky z druhého odkazu.
Získané fonty nakopírujte do nějakého adresáře, vytvořte v něm soubor
fonts.dir
příkazem:
ttmkfdir > fonts.dir
Nakonec přidejte cestu k adresáři s fonty do konfiguračního souboru X serveru nebo font serveru.
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
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).
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ů.
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
.
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.
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.
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.