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.
|