Gure itzulpen bulegotik hitz batzuk: normalean denak ahalegintzen dira azken materialak eta argitalpenak itzultzen, eta gu ez gara salbuespena. Baina terminalak ez dira astean behin eguneratzen den zerbait. Hori dela eta, 2018ko udaberrian argitaratutako Antoine Beaupréren artikulu bat itzuli dizuegu: estandar modernoen arabera “adin” handia izan arren, gure ustez, materialak ez du batere garrantzirik galdu. Horrez gain, hasiera batean bi artikuluko seriea zen, baina mezu handi batean konbinatzea erabaki genuen.
Terminalek leku berezia dute ordenagailuen historian, baina azken hamarkadetan komando-lerroaren ondoan bizirautera behartuta egon dira interfaze grafikoak nonahikoak diren heinean.
Terminal batzuek segurtasun-zulo harrigarriak dituzte, eta gehienek funtzio multzo guztiz desberdinak dituzte, fitxadun interfazearen euskarritik hasi eta script-era arte. Guk arren
Hona hemen berrikusi ditudan terminalak:
Hauek ez dira azken bertsioak izan, idazteko garaian konpilazio egonkorrera mugatuta nengoen eta Debian 9 edo Fedora 27-n zabaldu ahal izan nituen. Salbuespen bakarra Alacritty da. GPU azeleratutako terminalen ondorengoa da eta zeregin honetarako ezohiko eta hizkuntza berri batean idatzita dago - Rust. Nire berrikuspenetik web terminalak baztertu nituen (aurrekoak barne
Unicode laguntza
Unicode laguntzarekin hasi nintzen nire probak. Terminalen lehen proba Unicode katea bistaratzea izan zen
Lehenespenez, xterm-ek letra-tipo "finko" klasikoa erabiltzen du, hau da, arabera
Pantaila-argazki hauek Fedora 27-n egin ziren, Debian 9k baino emaitza hobeak eman baitzituen, non terminalen bertsio zaharrago batzuek (zehazki mlterm) ezin baitzituzten letra-tipoak behar bezala kudeatu. Zorionez, ondorengo bertsioetan konpondu zen.
Orain konturatu lerroa xterm-en nola bistaratzen den. Gertatzen da Mem sinboloa eta ondorengo semitikoa
“Konputagailu-programa askok ezin dute bi norabideko testua behar bezala bistaratu. Adibidez, "Sarah" hebreerazko izena sin (ש) karaktereek osatzen dute (eskuinean agertzen dena), gero resh (ר) eta azkenik he (ה) (ezkerrean agertu beharko litzatekeena)."
Terminal askok huts egiten du proba hau: Alacritty, VTE-tik eratorritako Gnome eta XFCE terminalek, urxvt, st eta xterm-ek "Sara" alderantzizko ordenan bistaratzen dute, izena "Aras" bezala idatzi izan bagenu bezala.
Bi norabideko testuen beste arazo bat da nolabait lerrokatu behar direla, batez ere RTL eta LTR testuak nahasteko orduan. RTL script-ak terminal-leihoaren eskuineko aldean exekutatu beharko lirateke, baina zer gertatu beharko litzateke lehenetsita LTR ingelesa duten terminalekin? Gehienek ez dute mekanismo berezirik eta testu guztia ezkerrera lerrokatzen dute (Konsolen barne). Salbuespenak pterm eta mlterm dira, estandarrei atxikitzen zaizkienak eta eskuinera lerrokatzen dituztenak.
Txertatzeko babesa
Identifikatu dudan hurrengo ezaugarri kritikoa sartzearen aurkako babesa da. Nahiz eta oso ezaguna den honela idazten dela:
$ curl http://example.com/ | sh
kodea exekutatzeko push komandoak dira, jende gutxik daki ezkutuko komandoak kontsolara sartu daitezkeela web arakatzailetik kopiatu eta itsatsitakoan, arretaz aztertu ondoren ere.
git clone git: //git.kernel.org/pub/scm/utils/kup/kup.git
halako traba bihurtzen da Horn-en webgunetik terminalera itsatsitakoan:
git clone /dev/null;
clear;
echo -n "Hello ";
whoami|tr -d 'n';
echo -e '!nThat was a bad idea. Don'"'"'t copy code from websites you don'"'"'t trust!
Here'"'"'s the first line of your /etc/passwd: ';
head -n1 /etc/passwd
git clone git://git.kernel.org/pub/scm/utils/kup/kup.git
Nola dabil? Kode gaiztoa blokean sartzen da , erabiltzailearen ikuspegitik kanpo ateratzen dena CSS erabiliz.
set enable-bracketed-paste on
Zoritxarrez, Horn-en proba-guneak babes hori nola saihestu ere erakusten du testu-formatuaren beraren bidez eta aurretik parentesi modua aplikatzen amaitzen da. Honek funtzionatzen du terminal batzuek ez dituztelako behar bezala iragazten ihes-sekuentziak eurenak gehitu aurretik. Adibidez, nirean ez nintzen inoiz Konsoleko probak behar bezala burutu konfigurazio zuzenarekin ere .sarrera fitxategia. Horrek esan nahi du zure sistemaren konfigurazioa erraz hondatu dezakezula onartzen ez den aplikazio bat edo gaizki konfiguratutako shell baten ondorioz. Hau bereziki arriskutsua da urruneko zerbitzarietan saioa hasten denean, non konfigurazio-lan zaindua ez da hain ohikoa, batez ere horrelako urruneko makina asko badituzu.
Arazo honen konponbide ona terminalerako itsatsi berrespen plugina da urxvt, lerro berriak dituen edozein testu txertatzeko baimena besterik ez du eskatzen. Hornek deskribatutako testu-erasorako ez dut aukera seguruagorik aurkitu.
Fitxak eta profilak
Oraingo ezaugarri ezagun bat fitxadun interfazearen laguntza da, beste hainbat terminal dituen terminal-leiho gisa definituko duguna. Funtzio hau desberdina da terminal desberdinetarako, eta xterm terminal tradizionalek fitxak batere onartzen ez dituzten arren, terminal modernoagoek, hala nola, Xfce Terminal, GNOME Terminal eta Konsole funtzio hori dute. Urxvt-ek fitxak ere onartzen ditu, baina plugin bat erabiltzen baduzu bakarrik. Baina fitxen euskarria berari dagokionez, Terminator da eztabaidaezina den liderra: fitxak onartzen ditu ez ezik, terminalak edozein ordenatan antolatu ditzake (ikus beheko irudia).
Terminator-en beste ezaugarri bat fitxa hauek elkarrekin "taldekatzeko" eta aldi berean tekla sakatu berdinak hainbat terminaletara bidaltzeko gaitasuna da, hainbat zerbitzarietan aldi berean eragiketa ugari egiteko tresna gordina eskaintzen duena. Konsolen ere antzeko ezaugarri bat ezartzen da. Ezaugarri hau beste terminal batzuetan erabiltzeko, hirugarrenen softwarea erabili behar duzu, adibidez
Fitxek bereziki ondo funtzionatzen dute profilekin parekatzen direnean: adibidez, fitxa bat izan dezakezu posta elektronikorako, beste bat txateko eta abar. Konsole Terminalek eta GNOME Terminalek ondo onartzen dute. Biek aukera ematen dute fitxa bakoitzari bere profila automatikoki abiarazteko. Terminator-ek profilak ere onartzen ditu, baina ezin izan dut aurkitu fitxa zehatz bat irekitzen duzunean programa batzuk automatikoki abiarazteko modurik. Beste terminalek ez dute batere "profil" kontzeptua.
Ruffles
Artikulu honen lehen zatian azalduko dudan azken gauza terminalen itxura da. Adibidez, GNOMEk, Xfcek eta urxvt-ek gardentasuna onartzen dute, baina duela gutxi atzeko planoko irudietarako laguntza kendu dute, erabiltzaile batzuk terminalera aldatzera behartuz.
Terminal batzuek testua ere aztertzen dute URL ereduetarako, estekak klikagarriak izan daitezen. Hau VTEtik eratorritako terminal guztietan aplikatzen da, eta urxvt-ek, berriz, URLak klik batean edo teklatuko lasterbide bat erabiliz eraldatuko dituen plugin berezi bat behar du. Probatu ditudan beste terminal batzuk bistaratzeko URLak beste modu batzuetan.
Azkenik, terminalen joera berri bat desplazamendu-buffer-aren aukera da. Adibidez, st-k ez du korritze-bufferrik; erabiltzaileak tmux eta bezalako terminal-multiplexadorea erabiliko duela suposatzen da
Alacrittyk ere backscroll buffer-ak falta ditu, baina
guztizko partzialak
Materialaren bigarren zatian (jatorrizkoan bi artikulu ezberdin ziren - gutxi gorabehera. erreia) errendimendua, memoriaren erabilera eta latentzia alderatuko ditugu. Baina dagoeneko ikusten dugu aipatutako terminal batzuek gabezia larriak dituztela. Esate baterako, RTL scriptekin aldian-aldian lan egiten duten erabiltzaileek mlterm eta pterm kontuan hartu nahi dituzte, besteek baino hobeak baitira antzeko zereginak kudeatzen. Konsole ere ondo aritu zen. RTL scriptekin lan egiten ez duten erabiltzaileek beste zerbait aukeratu dezakete.
Kode maltzurren txertatzeen aurkako babesari dagokionez, urxvt-ek eraso mota honen aurkako babesaren ezarpen bereziagatik nabarmentzen da, eta hori guztiz komenigarria iruditzen zait. Kanpai eta txistu batzuen bila dabiltzanentzat, Konsolek begirada bat merezi du. Azkenik, nabarmentzekoa da VTE terminaletarako oinarri bikaina dela, koloreen euskarria, URL aitorpena eta abar bermatzen dituena. Lehen begiratuan, zure ingurune gogokoenarekin datorren terminal lehenetsiak baldintza guztiak bete ditzake, baina utz dezagun galdera hau zabalik errendimendua ulertu arte.
Jarrai dezagun elkarrizketa
Orokorrean, terminalen errendimendua berez urruneko arazoa dela dirudi, baina antza denez, horietako batzuek latentzia harrigarri handia dute oinarrizko mota horretako softwarerako. Ondoren, tradizionalki "abiadura" deitzen dena (hau da, korritze-abiadura da) eta terminalaren memoria-kontsumoa aztertuko dugu (oharra ez dela gaur egun duela hamarkada batzuk bezain kritikoa).
atzerapenik
Terminalaren errendimenduaren azterketa sakon baten ondoren, zentzu honetan parametrorik garrantzitsuena latentzia (ping) dela ondorioztatu nuen. Bere artikuluan
Baina zer da latentzia, eta zergatik da hain garrantzitsua? Bere artikuluan, Fatinek "tekla bat sakatzearen eta dagokion pantaila eguneratzearen arteko atzerapena" bezala definitu zuen eta aipatu zuen.
Fatinek azaldu duenez, ping horrek asebetetze hutsa baino ondorio sakonagoak ditu: "idazketa motelago bihurtzen da, akats gehiago gertatzen dira eta begien eta giharren tentsioa areagotzen da". Beste era batera esanda, atzerapen handi batek akatsak sor ditzake eta, gainera, kodearen kalitatea txikiagoa izan daiteke, garunean karga kognitibo gehigarria dakarrelako. Baina okerrena da ping-ak "begi eta muskuluen tentsioa areagotzen duela", eta horrek esan nahi duela dirudi.
Efektu horietako batzuk aspalditik ezagutzen dira, eta emaitzak
Fatinek testu-editoreetan egin zituen bere probak; izeneko tresna eramangarri bat sortu zuen
Hona hemen nire neurketen emaitzak, baita Fatinen emaitza batzuk ere, nire esperimentua bere probekin bat datorrela erakusteko:
Xterm eta mlterm bezalako programa zaharren erantzun-denbora hobea izan da deigarria izan ninduen lehenengo gauza. Erregistroko latentziarik txarrenarekin (2,4 ms), terminal moderno bizkorrenak baino hobeto aritu dira (10,6 ms st-rako). Ez dago terminal modernorik 10 milisegundoko atalasearen azpitik. Bereziki, Alacrittyk ez du betetzen "eskuragarri dagoen terminal-emuladore azkarrena" erreklamazioa, nahiz eta bere puntuazioak hobetu egin diren 2017an egin zuen lehen berrikuspenetik. Izan ere, proiektuaren egileak
Hala ere, baliteke desberdintasunak begien aurrean ez nabaritzea. Fatinek azaldu duenez, "ez duzu atzerapenaren berri izan behar zuregan eragina izan dezan". Fatinek desbideratze estandarrari buruz ere ohartarazten du: "latentzian (jitter) edozein asaldurak estres gehigarria sortzen du ezustekoaren ondorioz".
Goiko grafikoa Debian 9 (stretch) hutsean hartuta dago
Korritzeko abiadura
Hurrengo proba "abiadura" edo "banda-zabalera" ohiko proba bat da, eta horrek terminalak orri bat korritu dezakeen abiadura neurtzen du pantailan testu kantitate handiak erakusten dituen bitartean. Probaren mekanika aldatu egiten da; jatorrizko proba testu-kate bera sortzea besterik ez zen seq komandoa erabiliz. Beste proba batzuen artean Thomas E. Dickeyren (xterm mantentzailea) proba, behin eta berriz
Hemen rxvt eta st tiraka ikusten ditugu lehiaketaren aurretik, eta ondoren, askoz berriagoa den Alacritty, errendimenduan arreta jarrita diseinatua. Ondoren, Xfce (VTE familia) eta Konsole daude, ia bi aldiz azkarragoak. Azken xterm da, rxvt baino bost aldiz motelagoa dena. Proban zehar, xterm-ek ere asko eragin zuen, eta testua pasatzea zaila izan zen lerro bera izan arren. Konsole azkarra zen, baina delikatua zen batzuetan: pantaila izoztu egiten zen noizean behin, testu partziala erakutsiz edo ez zuen batere erakusten. Beste terminal batzuek kateak argi erakusten zituzten, st, Alacritty eta rxvt barne.
Dickeyk azaldu duenez, errendimendu desberdintasunak terminal ezberdinetako korritze-bufferen diseinuari dagozkio. Bereziki, rxvt eta beste terminal batzuei "arau orokorrak ez betetzea" leporatzen die:
"Xterm ez bezala, rxvt ez zen saiatu eguneratze guztiak bistaratzen. Atzean geratzen bada, eguneratze batzuei uko egingo die harrapatzeko. Horrek eragin handiagoa izan zuen itxurazko korritze-abiaduran barne-memoriaren antolaketan baino. Eragozpen bat izan zen ASCII animazioa zehaztasun samarra zela".
Antzemandako xterm geldotasun hori konpontzeko, Dickeyk baliabidea erabiltzea proposatzen du
Baliabideen kontsumoa
Mugimendu-abiadura errendimendu-neurri gisa kontuan hartzea zentzuzkoa den ala ez kontuan hartu gabe, proba honek terminalen karga simulatzeko aukera ematen digu, eta, aldi berean, beste parametro batzuk neurtzeko aukera ematen digu, hala nola memoria edo diskoaren erabilera. Neurri horiek zehaztutako proba eginez lortu dira sek Python prozesuen jarraipenaren pean. Kontagailuen datuak bildu zituen
Proba honetan, ST-k lehen postua hartzen du 8 MB-ko batez besteko memoria-kontsumo txikienarekin, eta hori ez da harritzekoa diseinuaren ideia nagusia sinpletasuna dela kontuan hartuta. mlterm, xterm eta rxvt-ek apur bat gehiago kontsumitzen dute - 12 MB inguru. Beste emaitza aipagarri bat Alacritty da, exekutatzeko 30 MB behar dituena. Gero, VTE familiako terminalak daude 40 eta 60 MB bitarteko zifrak, hau da, asko. Kontsumo hori terminal hauek goi-mailako liburutegiak erabiltzen dituztelako azal daiteke, adibidez, GTK. Konsole-k 65 MB-ko memoria-kontsumo izugarria du azkena probetan, nahiz eta hori bere ezaugarri sorta zabalagatik justifika daitekeen.
Duela hamar urte lortutako aurreko emaitzekin alderatuta, programa guztiak memoria nabarmen gehiago kontsumitzen hasi ziren. Xterm-ek 4 MB behar zituen, baina orain 15 MB behar ditu abiaraztean. rxvt-en kontsumoaren antzeko igoera dago, orain 16 MB behar ditu kutxatik kanpo. Xfce Terminalak 34 MB hartzen ditu, hau da, lehen baino hiru aldiz handiagoa, baina GNOME Terminalek 20 MB baino ez ditu behar. Jakina, aurreko proba guztiak 32 biteko arkitekturan egin ziren. LCA 2012 Rusty Russell-en
Hala ere, ezin dut saihestu terminala bezain oinarrizkoa den zerbaiti memoria gehiago esleitzea baliabideak xahutzea dela. Programa hauek txikienetatik txikienak izan behar dute, edozein "kutxatan" exekutatu ahal izan behar dute, baita zapata-kutxa batean ere, inoiz Linux sistemaz hornitu behar diren puntura iristen bagara (eta badakizu hala izango dela). ) . Baina zenbaki hauekin, memoriaren erabilera arazo bihurtuko da etorkizunean hainbat terminal exekutatzen dituzten inguruneetan, gaitasun arinen eta mugatuenetako batzuk ez ezik. Hori konpentsatzeko, GNOME Terminalek, Konsolek, urxvt-ek, Terminator-ek eta Xfce Terminalek Daemon modua dute, prozesu bakar baten bidez hainbat terminal kontrolatzeko aukera ematen duena, haien memoria-kontsumoa mugatuz.
Nire probetan, ustekabeko beste emaitza batera iritsi nintzen diskoaren irakurketa-idazketari dagokionez: hemen ezer ez ikustea espero nuen, baina konturatu zen terminal batzuek datu bolumentsuenak diskoan idazten dituztela. Beraz, VTE liburutegiak korritze-buffer bat gordetzen du diskoan (eginbide hau
Ondorioa
Artikuluaren lehen zatian, VTEn oinarritutako terminalek funtzio multzo ona dutela ikusi dugu, baina orain ikusten dugu horrek errendimendu kostu batzuk dakartzala. Orain memoria ez da arazo bat, VTE terminal guztiak Daemon prozesu baten bidez kontrolatu daitezkeelako, eta horrek gosea mugatzen du. Hala ere, RAM eta nukleoen buffer kopuruan muga fisikoak dituzten sistema zaharrek baliteke terminalen aurreko bertsioak behar izatea, baliabide askoz gutxiago kontsumitzen baitute. VTE terminalek errendimenduko (korritze) probetan ondo funtzionatu zuten arren, haien bistaratzeko latentzia GNOMEren Erabiltzailearen Gidan ezarritako atalasearen gainetik dago. VTE garatzaileek ziurrenik hori kontuan hartu beharko lukete. Kontuan hartzen badugu Linux erabiltzaile hasiberrientzat ere terminal batekin topo egitea saihestezina dela, erabilerrazagoa izan daitekeela. Esperientziadun geekentzat, lehenetsitako terminaletik aldatzeak begien neke gutxiago izatea eta lan saio luzeen ondorioz etorkizuneko lan-lesioak eta gaixotasunak saihesteko gaitasuna ere ekar dezake. Zoritxarrez, xterm eta mlterm zaharrak soilik 10 milisegundoko ping magikora eramaten gaituzte, askorentzat onartezina dena.
Erreferentziazko neurketek ere erakutsi zuten Linux ingurune grafikoen garapenaren ondorioz, garatzaileek hainbat konpromiso egin behar izan dituztela. Baliteke erabiltzaile batzuek leiho kudeatzaile arruntei begiratu nahi izatea, ping murrizketa nabarmena ematen baitute. Zoritxarrez, ezin izan da Wayland-en latentzia neurtu: erabili dudan Typometer programa Wayland-ek saihesteko diseinatuta dagoenerako sortu da: beste leihoak zelatatzeko. Espero dut Wayland-en konposizioak X.org-ek baino errendimendu hobea izatea, eta etorkizunean norbaitek ingurune honetan latentzia neurtzeko modua aurkitzea ere espero dut.
Iturria: www.habr.com