Portál AbcLinuxu, 3. května 2025 15:50
Úvod do problematiky vstupních metod. Jak do počítače zadávat znaky, které nejsou na klávesnici. Jak fungují vstupní metody, jaký software existuje pro Linux, pro které jazyky jsou vstupní metody k dispozici, jaké jsou možnosti konfigurace, využití v programech a integrace do desktopových prostředí.
Důvodem, proč tento článek (možná seriál) vzniká, je nedostatek informací, ať už se to týká nastavování, nebo využití vstupních metod. Informace o vstupních metodách sice dostupné jsou, ale je potřeba hledat, hledat a hledat. Navíc, protože je problematika vstupních metod zajímavá především pro národy píšící jinými znaky než latinkou, jsou informace pro neznalé těchto jazyků prakticky nedostupné. Jedno z mála míst na internetu, kde lze nějaké informace získat, je wiki distribuce Mandriva, ovšem část týkající se vstupních metod je pouze ve francouzštině.
Vysvětelní názvů metod:
Pokud píšeme na klávesnici text, funguje to asi následujícím způsobem: Na klávesnici stiskneme klávesu, operační systém vyhodnotí, která klávesa je stisknutá, a znak příslušný pro danou klávesu je poslán programu. A program na základě přijetí tohoto znaku provede nějakou akci. Pokud například píšeme text, tak se znak odpovídající stisknuté klávese objeví na místě kurzoru. Celkem jednoduché. Pokud píšeme anglicky, je to dostatečné řešení, pokud píšeme česky, neplatí to až tak úplně. Často používaná písmena s diakritikou mají samostatnou klávesu, ale jsou písmena, která samostatnou klávesu nemají, jako třeba písmena ó nebo ň. K jejich napsání je nutné stisknout klávesu pro vložení háčku nebo čárky a následně stisknout klávesu O nebo N.
Samotná klávesa pro vložení háčku nebo čárky neprovede žádný úkon, ale následný stisk jiné klávesy provede jiný úkon než stisk této klávesy bez předcházejícího stisknutí klávesy pro vložení háčku nebo čárky. Toto má na svědomí právě vstupní metoda. Úkolem vstupní metody je tedy transformace posloupnosti stisknutých kláves na znaky. Vstupní metoda vyhodnotí, zda má tento znak poslat programu nebo počkat na přijetí dalšího znaku a po přijetí dalšího znaku je na základě posloupností přijatých znaků vyslán znak, který odpovídá této posloupnosti. Například posloupnosti znaků ˇ a n odpovídá znak ň, posloupnosti znaků ´ a o odpovídá znak ó nebo posloupnosti znaků ˇ a r odpovídá znak ř.
Zde si dovolím drobnou odbočku. Není vždy nutné, aby pro vkládání znaků byla použita vstupní metoda jako samostatný program. Takto jednoduchá vstupní metoda může být součástí ovladače klávesnice; v linuxových systémech se k vkládání znaků v latince s diakritickými znaménky v současné době používá vstupní metoda XIM. Pokud používáte třeba vstupní metodu GCIN, nejspíše jste si všimli, že i při nastavené české klávesnici a stisknutí posloupnosti kláves ˇ a n, se nezobrazí znak ň, ale posloupnost znaků ˇn. Zřejmě také není nemožné vstupní metody zřetězit, to je nastavit systém tak, aby vstupní metoda nepředávala znaky programům, ale následující vstupní metodě, která provede další zpracování.
Ve světě linuxových systémů je používáno mnoho vstupních metod, některé jsou jednoúčelové, například pouze pro zápis vietnamské abecedy (vietnamská abeceda se skládá z písmen a, ă, â, b, c, d, đ, e, ê, g, h, i, k, l, m, n, o, ô, ơ, p, q, r, s, t, u, ư, v, x, y a používá diakritická znaménka pro vyznačení tónů. Takže znaky pro samohlásky s diakritickými znaménky mohou vypadat například jako ằ, ẳ, ổ, ĩ, ỗ, ứ nebo ỵ), jako je metoda VIQR. Jiné jsou univerzální, umožňující vkládání znaků různých jazyků, jako je metoda SCIM.
Kromě vstupní metody SCIM existují ještě univerzální metody UIM a IBUS. IBUS je metoda nová, která má nahradit SCIM, a v současné době je obsažena v distribuci Ubuntu od verze 9.10 a v distribuci Fedora od verze 11. V Mandrivě 2010 je v základní instalaci varianty Free stále metoda SCIM. Jelikož metoda SCIM nemá dobrou podporu tradiční čínštiny, je v Mandrivě obsažena metoda GCIN, která podporuje především tradiční čínštinu. Dále jsou zde k dispozici například vstupní metody amharština (EZ+), Cédille, cyrilice (transliterovaná), Inuktitut (transliterovaný), IPA, Multipress, TamilVP (TSCI), TamilVP (UNICODE), thajština-laoština, Tigriňa-Eritrea (EZ+), Tigriňa-Etiopie (EZ+), vietnamština (TELEX), vietnamština (VIQR) nebo vietnamština VNI. Dále je zde k dispozici ještě vstupní metoda SCIM-BRIDGE. Další známé vstupní metody jsou metody XCIN, IM-JA nebo IIIMF.
Volba jednoúčelové vstupní metody se obvykle projeví pouze při psaní, volba univerzální vstupní metody nebo metody, která umožňuje více režimů vkládání znaků, má obvykle za následek zobrazení ikony v panelu grafického prostředí.
Obr. 1 – SCIM a GCIN v panelu KDE4
Volba režimu vkládání znaků je obvykle možná pouze v případě, kdy se očekává vkládání textů (bliká textový kurzor). Na univerzálních vstupních metodách, které mají svoji ikonu v panelu, je také vidět, kdy je vstupní metoda spuštěna. Vstupní metoda může být spuštěna jednorázově, když se objeví první požadavek na její použití, a může běžet až do odhlášení uživatele od počítače nebo může být metoda spuštěna po dobu, kdy ji nějaký program využívá, a pokud je tento program ukončen nebo pokud je pro vstup znaků vybrána jiná vstupní metoda, je původní vstupní metoda ukončena.
Většina vstupních metod podporuje GTK+ (všechny výše uvedené), několik metod i Qt (z výše uvedených pouze XIM, GCIN a SCIM-BRIDGE), takže pokud chcete psát v jazyce, který používá jiné písmo než latinku, máte větší šanci při používání programů založených na GTK+ (OpenOffice.org nebo Firefox jsou aplikace založené na GTK+).
Další text se bude týkat především vstupních metod SCIM (včetně SCIM-BRIDGE) a GCIN v distribuci Mandriva 2010 (a také 2009).
Pokud SCIM ještě není v systému, je potřeba jej nainstalovat. Pokud pracujete v prostředí Gnome, stačí nainstalovat balíček scim-gtk nebo balíček scim-bridge-gtk, je možné nainstalovat i oba. Pokud pracujete v KDE4, je nutné nainstalovat balíček scim-bridge-qt4. Protože vstupní metoda SCIM je univerzální vstupní metoda, sama o sobě nemá žádný tzv. IMEnginge (vlastní konvertor sekvence stisknutých kláves na znaky) a je nutné také nějaký nainstalovat. Pro naše účely vyzkoušení funkcí SCIMu nezáleží na tom, který to bude, takže jako příklad si vybereme IMEngine Anthy, který je určen pro japonštinu. Jeho balíček se jmenuje scim-anthy. Také můžeme nainstalovat balíček scim-input-pad, což je virtuální klávesnice, umožňující zadat všechny znaky Unicode (kromě některých speciálních znaků).
Pokud nemáme nainstalované fonty (v mém případě to nehrozí, protože při čisté instalaci Mandriva Linuxu vždy volím podporu všech jazyků), je nutné je nainstalovat také (měl by stačit balíček fonts-ttf-japanese). Tím bychom měli mít vše potřebné v počítači. Pokud tedy zadáme v příkazové řádce příkaz scim, měla by se v systémové části lišty objevit ikona klávesnice (viz obr. 1). Pokud na tuto ikonu klávesnice klikneme levým tlačítkem myši, zatím se nic nestane, pokud na ni klikneme pravým tlačítkem myši, objeví se následující menu:
Obr. 2 – Menu SCIMu po kliknutí pravým tlačítkem myši na ikonu SCIMu
Obr. 3 – Ukázka Input padu (virtuální klávesnice), zde tlačítka umožňující
vkládání znaků dvou japonských slabičných abeced: hiragany a katakany
Pokud v tomto menu zvolíme možnost Input Pad, zobrazí se virtuální klávesnice jako na obr. 3, kde si můžeme vybrat, jaké znaky můžeme vkládat do textu. Ovšem po kliknutí na jakoukoliv virtuální klávesu se stále nic neděje, i když máme třeba spuštěný textový editor.
Obr. 4 – Volba vstupní metody v programu Gedit (GTK+ aplikace)
Obr. 5 – Volba vstupní metody v programu Kontact (Qt aplikace)
Abychom pomocí metody SCIM mohli psát, musíme tuto metodu vybrat jako aktivní. Například v programu Gedit jako zástupce GTK+ aplikací. To můžeme provést stisknutím pravého tlačítka na pracovní ploše programu a zvolením možnosti Vstupní metody a výběrem buď SCIM Input Method (pokud máme nainstalován balíček scim-gtk) nebo SCIM Bridge Input Method (pokud máme nainstalován balíček scim-bridge-gtk), viz obr. 4. Protože program Kwrite jako zástupce Qt aplikací neumožňuje volbu vstupní metody, je jako ukázka použit program Kontact. Postup výběru vstupní metody je zde stejný, pravým tlačítkem klikneme na pracovní ploše programu, zvolíme možnost Vybrat vstupní metodu a výběrem možnosti scim-bridge (viz obr. 5).
Obr. 6 – Menu SCIMu po kliknutí levým tlačítkem myši na ikonu SCIMu
Pokud jsme si vybrali jako aktivní vstupní metodu SCIM a tento program je aktivní, můžeme na ikonu SCIMu kliknout levým tlačítkem a objeví se podobný seznam jako na obr. 6 (pokud máme nainstalovaný pouze IMEngine Anthy, nabídka nebude tak bohatá jako na obr. 6 a volba Anthy nebude vnořená do nabídky japonština). Vybráním Anthy se změní ikona SCIMu v liště z klávesnice na korunku a na obrazovce se objeví panel tohoto IMEnginu.
Obr. 7 – Ikona IMEngine Anthy
Obr. 8 – Panel IMEnginu Anthy
Obr. 9 – Anthy – napsány jsou znaky watashi wa genk (slabiky, odpovídají slabikám v japonštině jsou převedy do hiragany)
Během psaní se napsané slabiky budou měnit ve znaky hiragany (jedna ze dvou japonských slabičných abeced).
Obr. 10 – Napsána je celá věta, zobrazuje se v hiraganě
Když dopíšeme větu, stiskneme mezerník, který způsobí, že se slova, která mají jednoznačný zápis, převedou na znaky kanji (čínské znaky používané v japonštině), nebo zůstanou zapsány hiraganou nebo se převedou na znaky katakany (druhá japonská slabičná abeceda).
Obr. 11 – Po stisknutí mezerníku se zobrazí nabídka, jak převést text do kanji případně katakany
Pokud má nějaká část věty víc než jeden způsob zápisu, vyznačí se a pomocí šipky nahoru a šipky dolů můžeme pro vybranou část zvolit zápis. V našem případě vybereme první možnost (možnosti jsou seřazeny podle četnosti jejich výskytu v japonštině).
Obr. 12 – Stiskem klávesy Enter se napsaný text vloží do dokumentu, podtržení zmizí
Máme-li vybraný správný zápis, stiskneme klávesu Enter a japonská věta je dokončena.
Pokud dále nechceme psát v japonštině, klikneme levým tlačítkem na ikonu vstupní metody SCIM a vybereme z nabídky možnost Angličtina/klávesnice (obvykle bývá jako poslední nabídka úplně dole). Nebo můžeme použít kombinaci kláves Ctrl+Mezerník, která přepíná mezi psaním prostřednictvím posledního zvoleného IMEnginu a prostřednictvím klávesnice.
Ne všechny programy nabízejí možnost volby vstupní metody. Už byl zmíněn program Kwrite. Dalšími jsou třeba Mozilla Firefox nebo OpenOffice.org. Pokud chceme psát pomocí SCIMu přímo v těchto programech, je nutné nastavit SCIM nebo SCIM-BRIDGE jako standardní metodu. V distribuci Mandriva 2009 se toto provedlo přidáním
GTK_IM_MODULE=scim QT_IM_MODULE=scim XIM_PROGRAM="scim -d" XMODIFIERS=@im=SCIM
do souboru /etc/sysconfig/i18n. Tento postup v Mandrivě 2010 nefunguje, a je proto nutné zvolit postup mírně odlišný. V Mandrivě 2010 funguje pouze úprava souboru ~/i18n. Po přidání těchto řádků, odhlášení a opětném přihlášení zjistíme, že se nezobrazila ikona SCIMu. Nicméně po stisku Ctrl+Mezerník se objeví panel vstupní metody (jak už bylo napsáno, toto ale funguje pouze pokud stiskneme Ctrl+Mezerník v případě, kdy je očekáváno vkládání textu).
Druhá věc, kterou zjistíme, je, že vstupní metoda je nastavena pouze pro GTK+ aplikace. Pro Qt aplikace nastavena není, protože Qt vstupní metodu SCIM nevidí, Qt vidí pouze metodu SCIM-BRIDGE, proto musíme proměnné QT_IM_MODULE přiřadit hodnotu scim-bridge (Tuto hodnotu je možné přidat i proměnné GTK_IM_MODULE, pokud jste nenainstalovali balíček scim-gtk, ale pouze scim-bridge-gtk). Dále není nutný řádek XIM_PROGRAM="scim -d". Jeho odstraněním zajistíme, že u GTK+ aplikací se najednou začne objevovat ikona SCIMu v některých případech. Protože používám kromě SCIMu ještě GCIN a SCIM potřebuji především v OpenOffice.org a Firefoxu a v ostatních programech je příliš nepoužívám, do souboru ~/i18n jsem přidal pouze řádek
GTK_IM_MODULE=scim
a vše funguje podle mých představ (GTK+ aplikace mají jako standardní vstupní metodu SCIM, Qt aplikace mají jako standardní vstupní metodu XIM). Co se týká rozdílů mezi SCIM a SCIM-BRIDGE, tak se jedná o stejné vstupní metody, pouze podle mých zkušeností se aplikace SCIM pro GTK+ chová líp než SCIM-BRIDGE, proto ho preferuji.
GCIN jsem nainstaloval společně s instalací celého systému, takže o instalaci pouze stručně. Na instalačním médiu jsou balíčky gcin a gcin-qt4. Balíček gcin je vlastní vstupní metoda a obsahuje rozhraní pro GTK+, balíček gcin-qt4 je rozhraní mezi GCINem a Qt.
Konfigurace vstupní metody je celá v čínštině, takže se zde příliš neorientuji. Zde popsané funkce jsem zjistil pomocí experimentů.
Obr. 13 – Konfigurace vstupní metody GCIN
Důležité je čtvrté tlačítko shora, které vyvolá konfiguraci ovládání, a je zde také seznam režimů práce GCINu.
Obr. 14 – Seznam režimů vstupní metody GCIN (Okno není kompletní, dole jsou ještě tlačítka Budiž a Zrušit)
V prvním sloupci je název vstupního režimu, ve druhém je zobrazena ikona režimu, která se po jeho aktivaci zobrazí místo ikony GCINu s písmeny EN. Ve třetím sloupci je uvedena klávesová zkratka, která v případě, kdy je GCIN aktivní, přepne do konkrétního režimu (například kombinace Ctrl+Alt+[ přepne do režimu vkládání znaků latinky s diakritickými znaménky – vkládání funguje podobně jako převod hiragany na kanji v případě SCIMu. V pátém sloupci je možné vybrat, zda má být metodou procházeno při postupném stisknutí kombinace kláves Ctrl+Shift, a v šestém sloupci je možné vybrat, který vstupní režim metody má být aktivován jako první. V prvním řádku pod touto tabulkou je možné nastavit, kterou klávesou nebo kombinací kláves se přepíná mezi klasickou klávesnicí a vstupní metodou GCIN (standardně je to opět kombinace kláves Ctrl+Mezerník).
Obr. 15 – Ukázka vkládání znaků latinky s diakritikou pomocí GCINu, právě je stisknuto písmeno a, čeká se na výběr varianty.
Cílem tohoto článku je ukázat možnosti psaní jiných znaků, než jsou znaky latinky, a uvést zájemce do problematiky vstupních metod. Na příkladech je ukázáno použití vstupních metod SCIM, SCIM-BRIDGE a GCIN. Také je ukázáno, jak nastavit zvolenou metodu jako standardní vstupní metodu.
Článek není špatný, ale chtělo by to více teorie nebo alespoň podrobnější vysvětlení, na co je jaká konfigurace dobrá, a ujasnit si názvosloví.
Za prvé vstupní metoda není xim nebo gcim nebo scim, ale prostě algoritmus pro zadávání znaků. gcim je jen konkrétní implementace (program) algoritmu, scim je sjednocující kontejner pro různé implementace metod (proto se do něj instalují tabulky definující vstupní metody) a xim je protokol X input vrstvy.
Tady totiž chybí teorie, že možnost využít vstupní metody je přímo zabudovaná do X11 a to skrze protokol xim. Tudíž máme-li implementaci vstupní metody, která tento protokol umí (například scim), můžeme zadávat složené znaky do „libovolné“ xové aplikace.
Proto se definuje proměnná XMODIFIERS, která říká, že aplikace může skrze libX11 přefiltrovat vstupní symboly přes vstupní metodu a nechat si unést okno programem implementujícím metodu (například XMODIFIERS=@im=SCIM xterm
).
Výše jsem použil uvozovky, protože xim má svoje omezení a mimo jiné sada widgetů aplikace musí trochu spolupracovat. (Vývojáři Xorg si toho jsou vědomi a hodlají spolu s opuštěním příšerné definice klasických rozvržení klávesnice xkeyboard-config vytvořit nový způsob, který bude lépe řešit i vstupní metody.)
Proto také velké knihovny widgetů jako GTK nebo Qt mají vlastní rozhraní pro vstupní metody a implementace vstupních metod implementují i jiné rozhraní než xim.) Proto je třeba definovat proměnné GTK_IM_MODULE a QT_IM_MODULE.
Zatímco GTK (GTK_IM_MODULE=scim gtk-demo
) je v tomto směru stabilní, Qt s přechodem na verzi 4 věci překopalo. Qt3 fungovalo přes protokol scimu a nefungovalo s ximem, Qt4 funguje jenom s xim. Protože Qt4 obsahuje emulaci Qt3, je asi na pořadu dne používat XMODIFIERS=@im=SCIM QT_IM_MODULE=xim qtconfig
(QT_IM_MODULE je možné odstranit).
Nakonec je třeba vysvětlit, že řetězec SCIM identifikuje program implementující vstupní metodu, proměnná XMODIFIERS se používá i na jiné věci než na vstupní metody, proto ten @im=.
Když říkám, že proměnné identifikují implementaci, tak to znamená že jich může běžet (ve smyslu procesu operačního systému) více na jednou a že je dobé mít nějakou puštěnou už od začátku desktopové relace (aby nebyl uživatel zdržován jejich spouštěním). Například scim se pouští jako démon scim -d
.
Ještě je třeba upozornit, že scim má (měl?) svéráznou konfiguraci, která vyžaduje, aby locale aplikace měl vyjmenovanou ve volbě /SupportedUnicodeLocales v konfiguračním souboru /etc/scim/global (například /SupportedUnicodeLocales = en_US.UTF-8,cs_CZ.UTF-8
) a aby samotný démon scim byl spouštěn v locale podporujícím všechny zamýšlené znaky (tedy stačí jakýkoliv s UTF-8).
Pro úplnost uvedu, že existují různé vstupní metody, některé jsou zazděné patenty, pro náruživé texniky existuje pro scim modul s texovými makry pro matematické symboly, takže mohou v libovolném textovém editoru například napsat \exists\alpha\in\Re
a dostanou ∃α∈ℜ.
[c] type=advanced filetype=C items=printf printf=button;printf;;thorn printf_template=printf((problém je, že v menu sa bude zobrazovať len p a nie <alt_r>p, ale inak to funguje)
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.