Nekoliko riječi iz našeg prevodilačkog biroa: obično svi nastoje prevesti najnovije materijale i publikacije, i mi nismo izuzetak. Ali terminali nisu nešto što se ažurira jednom sedmično. Stoga smo za vas preveli članak Antoinea Beaupréa, objavljen u proljeće 2018.: unatoč svojoj značajnoj „starosti“ prema modernim standardima, po našem mišljenju, materijal nije nimalo izgubio na važnosti. Osim toga, ovo je prvobitno bila serija od dva članka, ali smo ih odlučili spojiti u jedan veliki post.
Terminali imaju posebno mjesto u istoriji računara, ali su poslednjih decenija bili primorani da opstanu uz komandnu liniju jer su grafički interfejsi postali sveprisutni.
Neki terminali imaju potpuno iznenađujuće sigurnosne rupe, plus većina ima potpuno drugačiji skup funkcija, od podrške za interfejs sa karticama do skriptovanja. Iako mi
Evo terminala koje sam pregledao:
Ovo možda nisu najnovije verzije, budući da sam bio ograničen na stabilne verzije u vrijeme pisanja, koje sam mogao izbaciti na Debian 9 ili Fedora 27. Jedini izuzetak je Alacritty. Potomak je GPU-ubrzanih terminala i napisan je na neobičnom i novom jeziku za ovaj zadatak - Rust. Izuzeo sam web terminale iz svog pregleda (uključujući one na
Unicode podrška
Počeo sam svoje testove sa podrškom za Unicode. Prvi test terminala bio je da se prikaže Unicode string iz
Podrazumevano, xterm koristi klasični "fiksni" font, koji, prema
Ovi snimci ekrana su napravljeni u Fedori 27, jer je dao bolje rezultate od Debiana 9, gdje neke starije verzije terminala (posebno mlterm) nisu mogle pravilno rukovati fontovima. Srećom, ovo je popravljeno u kasnijim verzijama.
Sada primijetite kako je linija prikazana u xtermu. Ispostavilo se da je simbol Mem i sljedeći semitski
“Mnogi kompjuterski programi ne mogu ispravno prikazati dvosmjerni tekst. Na primjer, hebrejsko ime "Sarah" sastoji se od znakova sin (ש) (koji se pojavljuje na desnoj strani), zatim resh (ר) i na kraju on (ה) (koji bi se trebao pojaviti na lijevoj strani)."
Mnogi terminali nisu uspjeli na ovom testu: Alacritty, VTE-izvedeni Gnome i XFCE terminali, urxvt, st i xterm prikazuju "Sara" obrnutim redoslijedom, kao da smo ime napisali kao "Aras".
Drugi problem sa dvosmjernim tekstovima je taj što ih je potrebno nekako uskladiti, posebno kada je u pitanju miješanje RTL i LTR tekstova. RTL skripte bi trebale da se pokreću sa desne strane prozora terminala, ali šta bi trebalo da se desi sa terminalima koji podrazumevano koriste LTR engleski? Većina njih nema nikakve posebne mehanizme i poravnavaju sav tekst na lijevo (uključujući i Konsole). Izuzetak su pterm i mlterm, koji se pridržavaju standarda i poravnavaju takve linije udesno.
Zaštita od umetanja
Sledeća kritična karakteristika koju sam identifikovao je zaštita od umetanja. Iako je opšte poznato da su čarolije kao:
$ curl http://example.com/ | sh
su push komande za izvršavanje koda, malo ljudi zna da skrivene komande mogu da se ušunjaju u konzolu prilikom kopiranja i lijepljenja iz web pretraživača, čak i nakon pažljivog pregleda.
git clone git: //git.kernel.org/pub/scm/utils/kup/kup.git
pretvara se u takvu smetnju kada se zalijepi sa Hornove web stranice u terminal:
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
Kako radi? Zlonamjerni kod je uključen u blok , koji se pomiče iz korisničkog pogleda pomoću CSS-a.
set enable-bracketed-paste on
Nažalost, Horn-ova testna stranica također pokazuje kako zaobići ovu zaštitu kroz samo formatiranje teksta i prerano završiti primjenom načina rada u zagradama na njega. Ovo funkcionira jer neki terminali ne filtriraju ispravno izlazne sekvence prije nego što dodaju svoje. Na primjer, kod mene nikad nisam uspio uspješno završiti Konsole testove čak ni uz ispravnu konfiguraciju .inputrc fajl. To znači da možete lako oštetiti konfiguraciju sistema zbog nepodržane aplikacije ili neispravno konfigurirane ljuske. Ovo je posebno opasno kada se prijavljujete na udaljene servere, gdje je pažljiv rad na konfiguraciji manje uobičajen, posebno ako imate mnogo takvih udaljenih strojeva.
Dobro rješenje za ovaj problem je dodatak za potvrdu lijepljenja za terminal urxvt, koji jednostavno traži dozvolu da ubaci bilo koji tekst koji sadrži nove redove. Nisam pronašao sigurniju opciju za tekstualni napad koji je opisao Horn.
Kartice i profili
Popularna karakteristika sada je podrška za interfejs sa karticama, koji ćemo definisati kao jedan prozor terminala koji sadrži još nekoliko terminala. Ova funkcija se razlikuje za različite terminale, i iako tradicionalni xterm terminali uopće ne podržavaju tabove, modernije inkarnacije terminala kao što su Xfce Terminal, GNOME Terminal i Konsole imaju ovu funkciju. Urxvt također podržava kartice, ali samo ako koristite dodatak. Ali u pogledu same podrške za kartice, Terminator je neprikosnoveni lider: ne samo da podržava tabove, već može i poredati terminale bilo kojim redosledom (pogledajte sliku ispod).
Još jedna karakteristika Terminatora je mogućnost "grupisanja" ovih kartica zajedno i slanja istih pritisaka na više terminala u isto vrijeme, pružajući grubi alat za izvođenje grupnih operacija na više servera istovremeno. Slična karakteristika je takođe implementirana u Konsole. Da biste koristili ovu funkciju na drugim terminalima, morate koristiti softver treće strane kao što je
Kartice rade posebno dobro kada su uparene sa profilima: na primjer, možete imati jednu karticu za e-poštu, drugu za ćaskanje i tako dalje. Ovo je dobro podržano Konsole terminalom i GNOME terminalom. Oba omogućavaju svakoj kartici da automatski pokrene svoj profil. Terminator takođe podržava profile, ali nisam mogao pronaći način da automatski pokrenem određene programe kada se otvori određena kartica. Drugi terminali uopće nemaju koncept "profila".
Ruffles
Posljednja stvar koju ću pokriti u prvom dijelu ovog članka je izgled terminala. Na primjer, GNOME, Xfce i urxvt podržavaju transparentnost, ali su nedavno odustali od podrške za pozadinske slike, prisiljavajući neke korisnike da se prebace na terminal
Neki terminali također analiziraju tekst za URL obrasce kako bi linkovi mogli kliknuti. Ovo se odnosi na sve terminale izvedene iz VTE, dok urxvt zahtijeva poseban dodatak koji bi transformirao URL-ove na klik ili korištenjem prečice na tipkovnici. Ostali terminali Testirao sam URL-ove za prikaz na druge načine.
Konačno, novi trend u terminalima je opcionalnost bafera za pomicanje. Na primjer, st nema bafer za pomicanje; pretpostavlja se da će korisnik koristiti terminalni multiplekser kao što je tmux i
Alacrittyju također nedostaju baferi za pomicanje unazad, ali
Iznosi
U drugom dijelu materijala (u originalu su to bila dva različita članka - cca. lane) uporedićemo performanse, upotrebu memorije i kašnjenje. Ali već vidimo da neki od terminala u pitanju imaju ozbiljne nedostatke. Na primjer, korisnici koji redovno rade sa RTL skriptama možda će htjeti uzeti u obzir mlterm i pterm, jer su oni bolji u rukovanju sličnim zadacima od drugih. Konsole se također dobro pokazao. Korisnici koji ne rade sa RTL skriptama mogu izabrati nešto drugo.
Što se tiče zaštite od ubacivanja zlonamjernog koda, urxvt se izdvaja po posebnoj implementaciji zaštite od ove vrste napada, što mi se čini definitivno zgodnim. Za one koji traže nešto zvona i zviždaljki, Konsole vrijedi pogledati. Na kraju, vrijedno je napomenuti da je VTE odlična baza za terminale, koja garantuje podršku bojama, prepoznavanje URL-a i tako dalje. Na prvi pogled, podrazumevani terminal koji dolazi sa vašim omiljenim okruženjem može ispuniti sve zahteve, ali ostavimo ovo pitanje otvorenim dok ne razumemo performanse.
Nastavimo razgovor
Općenito, performanse terminala same po sebi mogu izgledati kao nategnuti problem, ali kako se ispostavilo, neki od njih pokazuju iznenađujuće veliko kašnjenje za softver tako fundamentalnog tipa. Također, sljedeće ćemo pogledati ono što se tradicionalno naziva "brzina" (u stvari, ovo je brzina skrolovanja) i potrošnju memorije terminala (uz napomenu da to danas nije toliko kritično kao prije nekoliko desetljeća).
Kašnjenje
Nakon detaljnog proučavanja performansi terminala, došao sam do zaključka da je najvažniji parametar u tom pogledu latencija (ping). U svom članku
Ali šta je latencija i zašto je toliko važna? U svom članku, Fatin je to definirao kao "kašnjenje između pritiskanja tipke i odgovarajućeg ažuriranja ekrana" i citirao
Fatin objašnjava da ovaj ping ima dublje posljedice od samog zadovoljstva: "kucanje postaje sporije, javlja se više grešaka, a napetost očiju i mišića se povećava." Drugim riječima, veliko kašnjenje može dovesti do grešaka u kucanju i niže kvalitete koda, jer dovodi do dodatnog kognitivnog opterećenja na mozgu. Ali ono što je još gore je da ping "povećava naprezanje očiju i mišića", što izgleda implicira
Neki od ovih efekata su poznati već duže vreme, a rezultati
Fatin je proveo svoje testove na uređivačima teksta; stvorio je prenosivi instrument pod nazivom
Evo rezultata mojih mjerenja, kao i nekih Fatinovih rezultata, koji pokazuju da se moj eksperiment slaže s njegovim testovima:
Prva stvar koja me je pogodila je bolje vrijeme odziva starijih programa kao što su xterm i mlterm. Sa najgorom latencijom registra (2,4 ms), radili su bolje od najbržeg modernog terminala (10,6 ms za st). Nijedan moderni terminal ne pada ispod praga od 10 milisekundi. Konkretno, Alacritty ne ispunjava tvrdnju o "najbržem dostupnom emulatoru terminala", iako su se njegovi rezultati poboljšali od njegove prve revizije 2017. Zaista, autori projekta
Međutim, razlike možda neće biti vidljive oku. Kako Fatin objašnjava, "ne morate biti svjesni kašnjenja da bi to utjecalo na vas." Fatin također upozorava na standardnu devijaciju: "svaka smetnja u latenciji (jitter) stvara dodatni stres zbog svoje nepredvidljivosti."
Gornji graf je preuzet na čistom Debianu 9 (stretch) sa
Brzina skrolovanja
Sljedeći test je tradicionalni test "brzine" ili "propusnosti", koji mjeri koliko brzo terminal može pomicati stranicu dok prikazuje velike količine teksta na ekranu. Mehanika testa varira; originalni test je bio jednostavno generiranje istog tekstualnog niza pomoću naredbe seq. Ostali testovi uključuju Thomas E. Dickey-jev (xterm održavač) test, koji se ponavlja
Ovdje vidimo rxvt i st pull ispred konkurencije, a zatim slijedi mnogo noviji Alacritty, koji je dizajniran s fokusom na performanse. Slijede Xfce (VTE porodica) i Konsole, koji su skoro duplo brži. Poslednji je xterm, koji je pet puta sporiji od rxvt. Tokom testa, xterm je takođe dosta mreškao, što je otežavalo uočavanje teksta koji je prošao, čak i ako je u pitanju isti red. Konsole je bio brz, ali je ponekad bio težak: ekran bi se s vremena na vrijeme zamrznuo, pokazujući djelomični tekst ili ga uopće ne bi. Ostali terminali jasno su prikazivali nizove, uključujući st, Alacritty i rxvt.
Dickey objašnjava da su razlike u performansama posljedica dizajna scroll bafera u različitim terminalima. Konkretno, on optužuje rxvt i druge terminale da "ne slijede opšta pravila":
“Za razliku od xterm-a, rxvt nije pokušao prikazati sva ažuriranja. Ako zaostane, odbit će neka ažuriranja kako bi ih sustigla. Ovo je imalo veći uticaj na prividnu brzinu skrolovanja nego na organizaciju interne memorije. Jedan nedostatak je bio taj što je ASCII animacija bila pomalo neprecizna."
Da bi popravio ovu uočenu sporost xterm, Dickey predlaže korištenje resursa
Potrošnja resursa
Bez obzira na to da li ima smisla uzeti u obzir brzinu skrolovanja kao metriku performansi, ovaj test nam omogućava da simuliramo opterećenje terminala, što nam zauzvrat omogućava mjerenje drugih parametara kao što su memorija ili upotreba diska. Metrike su dobijene izvođenjem navedenog testa dalje pod nadzorom Python procesa. Prikupio je podatke o brojilima
U ovom testu, ST zauzima prvo mjesto sa najnižom prosječnom potrošnjom memorije od 8 MB, što nije iznenađujuće s obzirom da je glavna ideja jednostavnost. mlterm, xterm i rxvt troše malo više - oko 12 MB. Još jedan značajan rezultat je Alacritty, kojem je za pokretanje potrebno 30 MB. Zatim tu su terminali VTE porodice sa brojkama od 40 do 60 MB, što je dosta. Ova potrošnja se može objasniti činjenicom da ovi terminali koriste biblioteke višeg nivoa, na primjer, GTK. Konsole dolazi na posljednjem mjestu sa ogromnih 65MB potrošnje memorije tokom testova, iako se to može opravdati njegovim vrlo širokim spektrom funkcija.
U poređenju sa prethodnim rezultatima dobijenim pre deset godina, svi programi su počeli da troše primetno više memorije. Xterm je nekada zahtevao 4 MB, ali sada zahteva 15 MB samo pri pokretanju. Slično je povećanje potrošnje za rxvt, koji sada zahtijeva 16 MB iz kutije. Xfce Terminal zauzima 34 MB, što je tri puta više nego ranije, ali GNOME terminalu je potrebno samo 20 MB. Naravno, svi prethodni testovi su sprovedeni na 32-bitnoj arhitekturi. Na LCA 2012 Rusty Russell
Međutim, ne mogu a da ne osjećam da je dodjela više memorije nečemu tako fundamentalnom kao što je terminal gubitak resursa. Ovi programi bi trebali biti najmanji od najmanjih, trebali bi se moći pokrenuti na bilo kojoj „kutiji“, čak i kutiji za cipele, ako ikada dođemo do tačke u kojoj treba da budu opremljeni Linux sistemima (a znate da će tako biti ) . Ali s ovim brojevima, korištenje memorije će postati problem u budućnosti u bilo kojem okruženju koje pokreće više terminala osim nekoliko najlakših i najograničenijih mogućnosti. Da bi to kompenzirali, GNOME Terminal, Konsole, urxvt, Terminator i Xfce Terminal imaju Daemon način rada koji vam omogućava da kontrolirate više terminala kroz jedan proces, ograničavajući njihovu potrošnju memorije.
Tokom testiranja, došao sam do još jednog neočekivanog rezultata u vezi čitanja i pisanja diska: očekivao sam da ovdje neću vidjeti ništa, ali se pokazalo da neki terminali zapisuju najobimnije podatke na disk. Dakle, VTE biblioteka zapravo drži bafer za pomicanje na disku (ova funkcija
zaključak
U prvom dijelu članka otkrili smo da terminali bazirani na VTE-u imaju dobar skup funkcija, ali sada vidimo da to dolazi sa određenim troškovima performansi. Sada memorija nije problem jer se svi VTE terminali mogu kontrolisati kroz Daemon proces, koji ograničava njihov apetit. Međutim, stariji sistemi koji imaju fizička ograničenja na količinu RAM-a i bafera kernela možda će i dalje trebati starije verzije terminala, jer troše znatno manje resursa. Iako su VTE terminali imali dobre rezultate u testovima propusnosti (skrolovanja), njihovo kašnjenje prikaza je iznad praga postavljenog u GNOME korisničkom vodiču. VTE programeri bi to trebali uzeti u obzir. Ako uzmemo u obzir da je čak i za početnike Linux korisnike susret s terminalom neizbježan, oni ga mogu učiniti lakšim za korištenje. Za iskusne štreberke, prelazak sa standardnog terminala može čak značiti manje naprezanje očiju i mogućnost izbjegavanja budućih ozljeda i bolesti na poslu zbog dugih radnih sesija. Nažalost, samo stari xterm i mlterm dovode nas do magičnog praga pinga od 10 milisekundi, što je za mnoge neprihvatljivo.
Benchmark mjerenja su također pokazala da su programeri zbog razvoja Linux grafičkih okruženja morali napraviti niz kompromisa. Neki korisnici će možda htjeti pogledati obične upravitelje prozora jer oni pružaju značajno smanjenje pinga. Nažalost, nije bilo moguće izmjeriti kašnjenje za Wayland: program Typometer koji sam koristio kreiran je za ono što je Wayland dizajniran da spriječi: špijuniranje drugih prozora. Nadam se da Wayland compositing radi bolje od X.org-a, a također se nadam da će u budućnosti neko naći način da izmjeri kašnjenje u ovom okruženju.
izvor: www.habr.com