Soluții - PC Magazine Romania, Septembrie 2003
Rețeta Linux:
Pinguinul cu mămăliguță sau autohtonizarea și internaționalizarea Linux-lui
Konstantin Klyagin
Motto: "Câte limbi știi, de atâtea ori ești un om."
cineva dintre ce mari
Dar dacă este vorba de un pinguin? Unul anume, numindu-se Linux. Dacă numărăm toate limbile în care se poate face instalarea RedHat-ului, aflăm că, în cazul acestei distribuții, Linux-ul este un om... adică, pinguin de 100 de ori! Unii dintre noi se pot lăuda, deoarece cunosc câteva dintre ele. Dar lucrând în consola text, uneori nu se pot bucura de toate capacitățile lingvistice, mai ales dacă, cele pe care ar vrea să le folosească au alfabete diferite. Pe de altă parte, nu aveți cum să nu doriți să lucrați în mod grafic, de vreme ce configurarea unei console utf-8 poate fi dificilă și are destule probleme. De asemenea, vi s-ar părea incorect și incomod să "transliterați" caracterelele sau să uitați de diacritice, bătându-vă joc de limbi. În acest articol se va descrie cum se poate ușura utilizarea Linux-ului în mod text de către poligloți.
Soluția noastră, se bazează pe două utilitare: "consolechars" și
"loadkeys", amândouă făcând parte din pachetul "console-tools",
domiciliat la adresa http://lct.sourceforge.net/
inclus în mai toate distribuțiile majore.
Mai întâi vom rula primul dintre cele două utilitare, el fiind responsabil de ecran, respectiv font-uri și translația unor caractere în altele, dacă este necesar. Dacă "consolechars" este rulat fără parametri, imediat vom vedea o listă cu toate explicațiile necesare. Fișierele care pot fi folosite de acest utilitar se află în directorul standard /lib/kbd/ în subdirectoarele "consolefonts" și "consoletrans".
Pentru limba română, precum și pentru alte limbi, cum ar fi bosniana, croata, ceha, maghiara, poloneza, sârba, slovaca și slovena, se folosește setul de caractere iso-8859-2. Pentru a-l încărca în consola text locală în Linux, presupunând că ne interesează dimensiunea 80x25, rulăm următoarea comandă:
$ consolechars -f lat2u-16 -m iso02
După ce comanda a fost executată se pot viziona orice texte scrise cu diacritice românești. Cât despre tastatură, o vom autohtoniza curând. Mai întâi aruncăm o privire în directorul /lib/kbd/keymaps/i386/qwerty, deoarece probabil ne interesează felul qwerty de tastatură. Aici găsim numai un singur fișier de mapare a tastelor, ro.kmap (sau ro.kmap.gz) care însă este de ajuns în majoritatea cazurilor. Rulăm loadkeys.
$ loadkeys ro
Loading ro.kmap.gz
$
Perfect. Dacă ați avut experiența suportului pentru tastatura românească în Windows, cu siguranță vă veți bucura de ușurința cu care se pot scrie caracterele românești în Linux. Nu trebuie să schimbați maparea actuală a tastelor, diacriticele se obțin prin apăsarea literelor asemănătoare împreună cu AltGr-ul (Alt-ul din dreapta). La majuscule se adaugă, respectiv, și Shift-ul. Astfel avem:
ș -> AltGr+s
ț -> AltGr+t
ă -> AltGr+a
î -> AltGr+i
â -> AltGr+`
Unele distribuții au doar, sau și, un fișier ro_win.map.gz care mapează tastele asemănător mapării tastaturii în Windows, cu singura diferență, care de altfel este și majoră, că permite totodată și tastarea caracterelor "[]\´;}{|":" întrucât caracterele "ăâîșț" se compun prin apăsarea simultană a tastelor corespunzătoare împreună cu AltGr-ul. Pentru majuscule este valabilă aceeași regulă. Astfel avem:
ș -> AltGr+;
ț -> AltGr+´
ă -> AltGr+[
î -> AltGr+]
â -> AltGr+\
Pentru a încărca această mapare se va rula loadkeys astfel:
$ loadkeys ro_win
Loading ro_win.map.gz
$
Simplu. Dar totuși ce facem pentru a avea posibilitatea de a scrie în mai multe limbi? Imediat trecem și la tema aceasta.
Este clar că, folosind aceste utilitare nu vom reuși să folosim câteva alfabete în același timp, fiindcă pur și simplu ele nu vor încăpea în cele 255 poziții disponibilile pentru caractere în placa video în mod text. Rămâne singura variantă: schimbarea manuală a unor seturi de caractere, care se poate face, de exemplu, din linia de comandă de fiecare dată când este nevoie.
Să ne uităm la o limbă care folosește litere ceva diferite față de cele latine, aceasta fiind rusa. Din cunoscutul document Cyrillic-HOWTO fără a depune mari eforturi se poate afla că, pentru a încărca alfabetul chirilic precum și tastatura, de un mare folos ne vor fi următoarele două comenzi:
$ consolechars -f Cyr_a8x16
$ loadkeys ru1
După accea imediat putem viziona orice texte în această limbă (codare koi8-r) precum și să scriem în ea. Schimbarea set-ului de caractere pentru tastatură se face cu ajutorul aceleași taste, AltGr care în ru1 nu trebuie ținută apăsată. O apăsare va schimba set-ul cu cel rusesc, iar încă una îl va întoarce la litere latine. Simplu.
Folosind ambele (sau mai multe) limbi simultan, rularea deasă a patru comenzi poate reprezenta o problemă, ele fiind lungi și nu prea ușoare de reținut. Astfel, cei care vor să se înarmeze cu această abordare, vor fi nevoiți să se gândească și la un fel de automatizare, ca să minimalizeze eforturile necesare pentru a trece dintr-o limbă în alta. Eu zic că, pentru aceasta, prietenul nostru cel bun, este bash-ul, el având suport pentru alias-uri de comenzi, sub care, se pot grupa lansări în execuție ale unor programe (inclusiv și pe cea succesivă), cu oricâți parametri.
Un bash alias simplu se setează în mod următor:
$ alias a="ls | grep a"
După care, imediat, comanda "a" fiind rulată în linie de comanda, va executa ceea ce are asociat.
La fel se poate face și pentru cele două limbi, alias-uri pe care pentru a nu le seta de fiecare dată, să le introducem în "~/.bashrc", unde le este locul. Așadar:
alias ro="consolechars -d; consolechars
-f lat2u-16 -m iso02;
loadkeys ro"
alias ru="consolechars -d; consolechars -f Cyr_a8x16; loadkeys ru1"
După relogin (ca să se activeze noile setări ale bash-ului) sau pentru cei mai comozi ce nu doresc să se deconecteze fiind apoi nevoiți să reintroducă numele de login și parola, sau care nu pot suporta să se dezlipească de un prompt bash nici în ruptul capului, după rularea comenzii "source ~/.bashrc" sau idem dar mai simplu ". ~/.bashrc", putem schimba limbile prin rularea comenzilor "ro" și respectiv "ru", sau ce altceva a hotărât imaginația dumneavoastră. Un apel la "consolechars" cu parametrul "-d" la începutul fiecărei secvențe de comenzi asigură că, înaintea schimbării set-ului de caractere, consola va fi resetată la starea prestabilită, cum era înainte de a încărca manual orice font sau mapare de tastatură.
Totuși să nu uităm și acele distribuții care folosesc pentru pentru acest scop utilitarul "setfont" din pachetul "kbd" care se găsește la adresa http://freshmeat.net/ projects/kbd/, pentru încărcarea fișierului ce mapează tastatura folosindu-se aceeași comanda "loadkeys", diferențele constând în folosirea comenzii "setfont" pentru încărcarea fonturilor, comanda ale carei opțiuni le puteți afla rulând-o cu parametrul "-h". Rularea utilitarului "setfont" fără parametri asigura resetarea consolei la starea prestabilită, înaintea încărcării manuale a fonturilor. Pentru limba română se va încărca fontul folosind următoarea comandă:
$ setfont lat2-16 -m 8859-2
Pentru limba rusă:
$ consolechars -f Cyr_a8x16 -m koi2alt
Astfel alias-urile noastre vor fi:
alias ro="setfont ; setfont lat2-16
-m 8859-2 ; loadkeys ro"
alias ru="setfont ; setfont Cyr_a8x16 -m koi2alt ; loadkeys ru1"
Înainte să închei, cîteva ponturi privind folosirea acestei soluții:
1. Alias-urile "ro" și "ru" nu vor funcționa ("consolechars" respectiv "setfont" în speță) dacă încercați să le rulați în "xterm" sau fiind logat la distanță, de la un alt calculator. În acest caz veți primi un mesaj de eroare "set_kernel_font: Operation not permitted", sau "putfont: KDFONTOP: Operation not permitted".
2. Datorită diferențelor dintre tabelele de caractere, după schimbare se pot
vedea prost inscripțiile deja afișate (mai ales pseudografica) în alte console
locale. Cum majoritatea programelor pentru consolă suportă combinația Ctrl-L,
folosiți-o pentru a redesena ecranul.
|