Terminálkezelés

E pontban elsősorban azokkal a problémákkal foglalkozunk, amik a terminálok használatakor léphetnek fel. Általában két eset fordul elő: vagy már a bejelentkezéskor problámák vannak, mert rossz a terminálbeállítás, vagy pedig menetközben állítódik el (például bináris fájl listázása egészen kiválóan alkalmas e célra...). Az első esetben konfigurációs fájljainkban (.login, .cshrc, .profile) kell a megfelelő beállításokról gondoskodnunk, utóbbi esetben viszont parancssorból kell kiadni a megfelelő parancsokat, gyakran "vakrepülésben", minden visszajelzés nélkül.

Elsőként az stty paranccsal ismerkedjünk meg, ami a terminálbeállítások minden szintjét vezérli, s ismerete valamilyen szinten mindenképpen ajánlatos (bár nem túl élvezetes) a felhasználónak, hacsak nincs állandóan a közelben gyakorlott segítség vagy rendszergazda.

Az stty parancs

Az stty parancs neve a "set teletype" rövidítésből ered, s már maga a név is nemes patinát és időtlenséget érzékeltet, hiszen hol vannak ma már a teletype-ok? A név mindenesetre megmaradt, s vele a múltból örökölt opciók és beállítási lehetőségek tömege is.

Az stty parancs két parancssori opcióval hívható meg: a -a opció hatására az összes beállítást kilistázza, nem csak a legfontosabbakat, a -g opció hatására pedig olyan formátumban történik a kiíratás, hogy egy másik stty parancs bemenetként tudja azt használni.

A parancssorban szereplő összes többi argumentum már a konkrét stty beállításokhoz tartozik, ezeket funkcióik szerint több csoportba osztjuk. Megadásuk némiképp eltér a UNIX opciók többségétől, ugyanis e paraméterek többsége alternáló kapcsolóként üzemel, egy-egy jellemző terminálfunkciót be-, illetve kikapcsol. A func funkció bekapcsolt (engedélyezett) állapotát az

stty func

paranccsal érhetjük el, míg a kikapcsolást (letiltást) a

stty -func

paranccsal. Néhány paraméterhez másik paraméter is tartozik, ami a tényleges értéket hordozza, például

stty kill ^u

a kill funkcióhoz (teljes sor törlése) a CTRL-U karaktert rendeli.

A fenti szabályok szerint viselkedő opciók az alábbi ismertetőkben a (-)func, illetve a func (-func) jelölésekkel szerepelnek.

 

Az stty listáiban a vezérlőkarakterek a ^c megadással szerepelnek; beíráskor implementációfüggően vagy ugyanígy adhatunk meg egy vezérlőkaraktert, vagy egy backslash karaktert írunk eléje, hogy elnyomjuk esetleges speciális jelentését. A DEL billentyűt a ^?, míg az üres, értékkel nem bíró beállítást a "^'" karakterek szokták jelezni.

Az stty által szabályzott funkciók az alábbi nagy csoportokba oszthatóak: kontroll beállítások (control modes), input beállítások (input modes), output beállítások (output modes), lokális beállítások (local modes), vezérlőkarakter beállítások (control assignments) és kombinált beállítások (combination modes). Implementációtól függően más csoportok is lehetségesek, s persze platformonként más és más plusz szolgáltatások is lehetségesek, éppen ezért csak a mindenhol megtalálható, szabványosodott beállításokkal foglalkozunk.

Kontroll beállítások

Ebbe a csoportba tartoznak az általános vonali jellemzőket, sebességet, paritást, flow-controlt szabályzó paraméterek.

 

(-)parenb Paritásbit beállítása és észlelése.

(-)parodd Engedélyezése esetén páros, letiltása esetén páratlan paritást alkalmaz.

(-)parext Kiterjesztett paritásvizsgálatot engedélyez (mark és space parity).

cs5, cs6, cs7, cs8

Beállítja a megfelelő karakterméretet. (Magyar ékezetes megjelenítéshez értelemszerűen a cs8 beállítás szükséges.)

110, 300, 600, 1200, 2400, 4800, 9600, 19200, 38400

A vonali sebesség beállítása az adott értékre (baud-ban mérve). (Néha külön ispeed n és ospeed n opciókkal lehet állítani a be- és kiviteli sebességet.)

(-)hupcl Modemes kapcsolat esetén kilépéskor bontja a vonalat.

(-)cstopb Engedélyezés esetén 2, letiltás esetén 1 stopbitet használ karakterenként.

Input beállítások

E csoportba tartoznak többek között a beírt karakterek értelmezését és leképzését vezérlő opciók.

(-)ignbrk Figyelmen kívül hagyja a bemenetről érkező break karaktert (a break egy speciális hosszúságú vezérlőkarakter, többek között a vonali sebesség automatikus felismerésére és váltására használják).

(-)ignpar Figyelmen kívül hagyja a paritáshibákat.

(-)istrip Engedélyezése esetén 7 bitesre vágja le a vett karaktereket. (Magyar ékezetes szöveg esetén ezért mindig le kell tiltani ezt az opciót.)

(-)inlcr A beolvasott újsor (NL) karaktert kocsi-vissza (RETURN) karakterré képezi le.

(-)igncr A beolvasott RETURN karaktert figyelmen kívül hagyja.

(-)icrnl A beolvasott kocsi-vissza (RETURN) karaktert újsor karakterré (LF) képezi le.

(-)iuclc A beolvasott nagybetűket kisbetűkké képezi le.

(-)ixon A START/STOP kimenet vezérlési (ún. handshake protokoll) használatát engedélyezi. (A kiíratás leállítható a STOP vezérlőkarakterrel, a START vezérlőkarakter vételekor pedig folytatható.) (lásd a vezérlőkarakter beállításoknál).

(-)ixany Bármely karakter hatására folytatódik a kivitel, nem csak a START vezérlőkarakterre.

(-)ixoff A bemeneti puffer majdnem üres/majdnem teli állapotában START illetve STOP vezérlőkarakterek küldését várja.

Output beállítások

(-)opost Továbbfeldolgozás: a kimenet további feldolgozása az alábbi opciók szerint engedélyezett, letiltás esetén további feldolgozás nélkül küldi ki a karaktereket.

(-)olcuc Kisbetűket nagybetűvé konvertálja a kimeneten.

(-)onlcr Az újsor (LF) karaktert kocsi-vissza-soremelés (RETURN-LF) karakterpárrá képezi le a kimeneten.

(-)ocrnl A kocsi-visszát (RETURN) újsorrá (NL) képezi le a kimeneten.

(-)onocr Az első oszlopban lévő kurzor esetén nem küldi el kocsi-visszát (RETURN) a kimenetre.

(-)onlret Az újsor (NL) karakter hatására kocsi-vissza (RETURN) funkciót hajt végre.

Lokális beállítások

(-)isig Leellenőrzi, hogy a beolvasott karakterek nem speciális vezérlőkarakterek-e (intr, quit, swtch).

(-)icanon Engedélyezi az úgynevezett kanonikus inputot (találóbban talán soreditálásnak nevezhetnénk); ilyenkor az erase és kill karaktereket a kocsi-vissza karakter beérkezése előtt feldolgozza.

(-)xcase Kis/nagybetűs megjelenítés értelmezése.

(-)echo Visszaír a képernyőre minden begépelt karaktert.

(-)echoe A beütött erase karaktert backspace-szóköz-backspace karaktersorozatként írja vissza. (CRT terminálokon ennek hatására a törölni kívánt karakter valóban törlődik, bár speciális karakterek, tabulátorok esetén összezavarodhat a megjelenítés.)

(-)echok A kill karakter után újsor (NL) karaktert is kiír.

(-)echonl Visszaírja a képernyőre az újsor (NL) karaktert is.

(-)echoctl A vezérlőkaraktereket ^c formában jeleníti meg.

Vezérlőkarakter beállítások

control-char c A control-char funkcióhoz a c karaktert rendeli. A legelterjedtebb vezérlőfunkciók az alábbiak:

eof Fájlvége, illetve bevitel végének jelzése. Rendszerint CTRL-D.

 

erase A kurzor feletti karaktert törli. Rendszerint a DEL, a RUBOUT, illetve a BS billentyűk valamelyike, hagyományosan a # karakter.

intr Program futásának megszakítása. Rendszerint a CTRL-C, időnként a DEL karakter.

kill Teljes addig begépelt sor eldobása. Rendszerint a CTRL-U, hagyományosan a @ karakter.

start Adatkivitel (például képernyőlistázás) újraindítása. Rendszerint a CTRL-Q karakter.

stop Adatkivitel (például képernyőlistázás) leállítása. Rendszerint a CTRL-S karakter.

susp Folyamatok futásának felfüggesztése. Rendszerint a CTRL-Z karakter.

Kombinált beállítások

A kombinált módok, mint nevük is mutatja, egyfajta menü lehetőséget biztosítanak, jellemzően együtt előforduló opciók egyszerre történő beállításához. Néhány a gyakoribbak közül:

 

Név beállításkombináció

evenp, parity parenb cs7

 

-evenp, -parity -parenb cs8

 

oddp parenb parodd cs7

 

-oddp parenb parodd cs8

 

raw (-raw, cooked) -opost -isig -icanon -xcase

(Sormódú be- és kivitel: nincs kimeneti továbbfeldolgozás, az erase, kill, intr, quit, swtch és eot karaktereket se dolgozza fel.

 

nl -icrnl -onlcr

 

-nl -icrnl -onlcr _inlcr -igncr -ocrnl -onlret

 

sane A terminálparamétereket nagyjából mindenhol hasz-
nálható értékekre állítja be.

Eltérés az SVR4 és BSD stty között

Az "egységesített" UNIX-ok elterjedésével, azaz azoknál, ahol mind az SVR4, mind a BSD UNIX-ok parancsai megtalálhatóak, gyakran okoznak gondot azok a parancsok, amelyek mindkét verzióban szerepelnek, de eltérő hívási móddal, vagy működéssel. Az stty is ezek közé tartozik, s mert elég alapvető szerepet játszik, meg kell hogy emlékezzünk a két verzió legfontosabb eltéréseiről.

A legfontosabb különbség, hogy az SVR4 alapú stty esetében a vonalparaméterek állítását, illetve lekérdezését a standard inputként megadott periférián végzi, míg a BSD alapú stty ugyanezt a standard outputra hajtja végre. Ha tehát a /dev/tty23 nevű terminál vonali paramétereit állítjuk (mondjuk a karakterméretet szeretnénk a cs8 opcióra állítani), akkor SVR4 rendszer esetén az

stty cs8 </dev/tty23

parancsot kell kiadnunk, míg BSD UNIX esetén az

stty cs8 >/dev/tty23

a megfelelő beállító parancs.

További eltérés még a két verzió között, hogy a BSD változatnál néhány további opció is szokott szerepelni, többek közt parancssori opcióként a -h, aminek hatására jobban olvasható, oszlopos formátumban írja ki az opciókat és a vezérlőkarakter beállításokat.

Terminálproblémák kezelése

Mint már említettük, terminálproblémákkal leginkább két esetben találkozhatunk: egyfelől belépéskor, ha nem megfelelően beállított paraméterekkel rendelkezik a terminálunk, másfelől ha menetközben állítódik el valamilyen paraméter. A rosszul beállított terminálparaméterek esetén a megoldás kulcsa inkább az illetékes rendszeradminisztrátor kezében van, ő tudja csak módosítani a terminálok alapvető vonali paramétereit, ugyanakkor a felhasználó is beállíthat konfigurációs fájljaiban stty paranccsal állítható paramétereket. A leginkább gyakori módosítások a vezérlőkarakterek hozzárendelésében, a paritásbitek kezelésében és a karakterméret beállításban lehetségesek; végül is próbálgatással is be lehet lőni a megfelelő állapotot, de mindenképpen célszerűbb a rendszergazda segítségét kérni.

Más eset, ha menetközben állítódott el a terminál, például egy bináris állomány kilistázásakor. Ilyenkor rendszerint "se kép se hang" állapot következik be, a terminál semmilyen billentyűre sem reagál, a képernyő pedig befagy. Az alábbiakban ismertetett módon általában visszaállítható a működőképes állapot, ha nem, akkor a képernyő ki-bekapcsolását is megkísérelhetjük (egyes rendszereken ez sajnálatos módon kilépteti a felhasználót).

Ha semmilyen billentyűre nem reagál a terminál, valószínűleg a sorlezáró újsor (RETURN) karaktert nem érzékeli a terminál. Próbálkozzunk azzal, hogy a parancsok lezárásakor nem az Enter (Return, stb jelzésű) gombot nyomjuk meg, hanem a CTRL-J, illetve a CTRL-M karaktert, majd pedig egymásután mindkettőt; ha a be- és kimeneti RETURN-LF leképezések romlottak el, a fenti karakterkombinációk valamelyikére reagálni fog.

Ha a bevitelt már érzékeli a terminál, az

 

stty -a

paranccsal írassuk ki az aktuális beállításokat. Ha semmit nem látunk, valószínűleg a képernyőre történő visszaírás (echo) opciók vannak letiltva. Adjuk ki az

 

stty echo echoe echok

parancsot, ennek hatására már kell hogy visszajelzést kapjunk.

Ha már a bevitelt is érzékeli a terminál és vissza is írja a begépelt karaktereket, akkor többé-kevésbé működőképes a dolog; ha kiadjuk az

 

stty sane

parancsot, a terminálparaméterek egy nagyjából mindenhol alkalmazható kombinációra állnak be, innen már "finomhangolással" lehet az eredeti állapotot visszaállítani.

A tput parancs

A tput paranccsal egy terminál beállító paraméterei kérdezhetőek le, illetve küldhetőek ki az adott terminálnak. Egyes opcióival ezenkívül alapállapotba is helyezhető a terminál, s ez az a szolgáltatás, amire szükségünk lehet.

A tput parancs az alábbi formákban hívható:

tput [-Ttype] capname [parms...]

tput [-Ttype] init

tput [-Ttype] reset

tput [-Ttype] longname

A -Ttype megadás opcionális, a type nevű terminált, ennek hiányában a kurrens terminált használja a parancs (ennek neve a TERM shell-változóban található).

Az első megadási mód esetén a terminál adatbázisban szereplő megjelenítési funkciók értékét lehet lekérni. (A terminál adatbázis a gyakrabban használt terminálok jellemzőit tartalmazza. Az egyes funkciókhoz szabványos elnevezések (capname) tartoznak (például cup a kurzorpozicionálási funkció neve, clear a képernyőtörlésé stb), s minden ilyen funkciónál ott szerepel az a karaktersorozat, ami az adott terminálnál az adott funkciót végrehajtja.)

Mivel a lekért funkcióhoz tartozó vezérlőkaraktereket a tput a standard kimenetre (azaz a terminálra) listázza ki, ebből egyúttal az is következik, hogy ha a saját terminálunkra vonatkozó funkciókat kérdeztünk le a tput paranccsal, az adott funkciók azonnal végre is hajtódnak, hiszen a terminál a karaktersorozat megjelenítésekor neki szóló, általa értelmezhető vezérlőkaraktereket fog látni. Így például bármely típusú terminálon is jelentkeztünk be, a

 

tput clear

paranccsal törölhetjük a képernyőt.

A második és a harmadik megadási mód a terminál alapállapotba hozását, illetve inicializálását szolgálja: tput reset hatására az alapállapotba jutáshoz szükséges vezérlőszekvenciákat hajtja végre a terminál, tput init pedig a kezdeti inicializáló műveleteket hajtja végre. Ezek azok a parancsok, amiket használhatunk még megbokrosodott terminálunk helyrepofozására. Célszerű általában az stty beállítások korrigálása után kiadni őket.

A negyedik megadási mód az adott terminál nevét és alapvető jellemzőit írjaírja ki, a szokottnál részletesebb formában.

 

Tartalomjegyzék