Keletas žodžių iš mūsų vertimų biuro: dažniausiai visi stengiasi išversti naujausią medžiagą ir publikacijas, ne išimtis ir mes. Tačiau terminalai nėra atnaujinami kartą per savaitę. Todėl išvertėme jums 2018 metų pavasarį paskelbtą Antoine'o Beaupré straipsnį: nepaisant nemažo „amžiaus“ pagal šiuolaikinius standartus, mūsų nuomone, medžiaga neprarado savo aktualumo. Be to, iš pradžių tai buvo dviejų straipsnių serija, tačiau nusprendėme juos sujungti į vieną didelį įrašą.
Kompiuterių istorijoje terminalai užima ypatingą vietą, tačiau pastaraisiais dešimtmečiais jie buvo priversti išgyventi kartu su komandų eilute, nes grafinės sąsajos tapo visur paplitusios.
Kai kuriuose terminaluose yra visiškai stebinančių saugumo spragų, be to, dauguma jų turi visiškai kitokias funkcijas – nuo sąsajos su skirtukais palaikymo iki scenarijų. Nors mes
Štai terminalai, kuriuos peržiūrėjau:
Tai gali būti ne naujausios versijos, nes rašymo metu apsiribojau stabiliomis versijomis, kurias galėjau įdiegti Debian 9 arba Fedora 27. Vienintelė išimtis yra Alacritty. Tai GPU spartintų terminalų palikuonis ir parašytas šiai užduočiai neįprasta ir nauja kalba – Rust. Iš savo apžvalgos neįtraukiau žiniatinklio terminalų (įskaitant tuos, kurie yra
Unicode palaikymas
Bandymus pradėjau naudodamas „Unicode“ palaikymą. Pirmasis terminalų bandymas buvo parodyti Unicode eilutę iš
Pagal numatytuosius nustatymus xterm naudoja klasikinį „fiksuotą“ šriftą, kuris, pasak
Šios ekrano kopijos buvo padarytos naudojant „Fedora 27“, nes ji davė geresnių rezultatų nei „Debian 9“, kur kai kurios senesnės terminalų versijos (ypač mlterm) negalėjo tinkamai apdoroti šriftų. Laimei, vėlesnėse versijose tai buvo ištaisyta.
Dabar atkreipkite dėmesį, kaip eilutė rodoma xterm. Pasirodo, kad simbolis Mem ir sekantis semitas
„Daugelis kompiuterių programų negali teisingai parodyti dvikrypčio teksto. Pavyzdžiui, hebrajiškas vardas „Sara“ susideda iš simbolių sin (ש) (jis rodomas dešinėje), tada resh (ר) ir galiausiai jis (ה) (kuris turėtų būti rodomas kairėje).
Daugelis terminalų šio testo neatlaiko: Alacritty, VTE gauti Gnome ir XFCE terminalai, urxvt, st ir xterm rodo "Sara" atvirkštine tvarka, tarsi pavadinimą būtume parašę kaip "Aras".
Kita dvikrypčių tekstų problema yra ta, kad juos reikia kažkaip lygiuoti, ypač kai reikia maišyti RTL ir LTR tekstus. RTL scenarijai turėtų paleisti iš dešinės terminalo lango pusės, bet kas turėtų nutikti terminalams, kuriuose numatytasis LTR anglų kalba? Dauguma jų neturi jokių specialių mechanizmų ir lygiuoja visą tekstą į kairę (taip pat ir Konsole). Išimtys yra pterm ir mlterm, kurios laikosi standartų ir lygiuoja tokias eilutes į dešinę.
Apsauga nuo įdėjimo
Kita svarbi funkcija, kurią nustatėu, yra apsauga nuo įterpimo. Nors plačiai žinoma, kad tokie burtai kaip:
$ curl http://example.com/ | sh
yra kodo vykdymo stūmimo komandos, nedaugelis žino, kad paslėptos komandos gali prasiskverbti į konsolę kopijuojant ir įklijuojant iš interneto naršyklės, net ir po kruopštaus patikrinimo.
git clone git: //git.kernel.org/pub/scm/utils/kup/kup.git
virsta tokiu nepatogumu, kai įklijuota iš Horno svetainės į 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
Kaip tai veikia? Kenkėjiškas kodas įtrauktas į bloką , kuris pašalinamas iš naudotojo rodinio naudojant CSS.
set enable-bracketed-paste on
Deja, „Horn“ bandymų svetainė taip pat parodo, kaip apeiti šią apsaugą naudojant patį teksto formatavimą ir per anksti jai pritaikyti skliaustų režimą. Tai veikia, nes kai kurie terminalai netinkamai filtruoja pabėgimo sekas prieš pridėdami savo. Pavyzdžiui, manojoje niekada negalėjau sėkmingai užbaigti Konsole testų net ir su teisinga konfigūracija .inputrc failą. Tai reiškia, kad galite lengvai sugadinti sistemos konfigūraciją dėl nepalaikomos programos arba netinkamai sukonfigūruoto apvalkalo. Tai ypač pavojinga prisijungiant prie nuotolinių serverių, kur kruopštus konfigūravimo darbas yra retesnis, ypač jei turite daug tokių nuotolinių mašinų.
Geras šios problemos sprendimas yra terminalo įklijavimo patvirtinimo papildinys urxvt, kuri tiesiog prašo leidimo įterpti bet kokį tekstą, kuriame yra naujų eilučių. Horno aprašytai teksto atakai saugesnio varianto neradau.
Skirtukai ir profiliai
Šiuo metu populiari funkcija yra sąsajos su skirtukais palaikymas, kurį apibūdinsime kaip vieną terminalo langą, kuriame yra keli kiti terminalai. Ši funkcija skirtingiems terminalams skiriasi ir nors tradiciniai xterm terminalai iš viso nepalaiko skirtukų, modernesni terminalų įsikūnijimai, tokie kaip Xfce Terminal, GNOME Terminal ir Konsole, turi šią funkciją. Urxvt taip pat palaiko skirtukus, bet tik tuo atveju, jei naudojate papildinį. Tačiau kalbant apie patį skirtukų palaikymą, „Terminator“ yra neabejotinas lyderis: jis ne tik palaiko skirtukus, bet ir gali išdėstyti terminalus bet kokia tvarka (žr. paveikslėlį žemiau).
Kita „Terminator“ ypatybė yra galimybė „sugrupuoti“ šiuos skirtukus ir tuo pačiu metu siųsti tuos pačius klavišų paspaudimus į kelis terminalus, o tai yra neapdorotas įrankis, leidžiantis vienu metu atlikti masines operacijas keliuose serveriuose. Panaši funkcija taip pat įdiegta Konsole. Norėdami naudoti šią funkciją kituose terminaluose, turite naudoti trečiosios šalies programinę įrangą, pvz
Skirtukai ypač gerai veikia, kai yra susieti su profiliais: pavyzdžiui, galite turėti vieną skirtuką el. paštui, kitą – pokalbiams ir pan. Tai gerai palaiko Konsole terminalas ir GNOME terminalas. Abu leidžia kiekvienam skirtukui automatiškai paleisti savo profilį. Terminatorius taip pat palaiko profilius, bet nepavyko rasti būdo, kaip automatiškai paleisti tam tikras programas, kai atidarote konkretų skirtuką. Kiti terminalai apskritai neturi „profilio“ sąvokos.
Raukiniai
Paskutinis dalykas, kurį aptarsiu pirmoje šio straipsnio dalyje, yra terminalų išvaizda. Pavyzdžiui, GNOME, Xfce ir urxvt palaiko skaidrumą, tačiau neseniai atsisakė fono vaizdų palaikymo, todėl kai kurie vartotojai turi pereiti prie terminalo.
Kai kurie terminalai taip pat analizuoja tekstą URL šablonams, kad nuorodas būtų galima spustelėti. Tai taikoma visiems VTE gautiems terminalams, o urxvt reikalingas specialus papildinys, kuris pakeistų URL spustelėjus arba naudojant spartųjį klavišą. Kiti terminalai Rodomus URL išbandžiau kitais būdais.
Galiausiai, nauja terminalų tendencija yra slinkties buferio galimybė. Pavyzdžiui, st neturi slinkties buferio; daroma prielaida, kad vartotojas naudos terminalo multiplekserį, pvz., tmux ir
„Alacritty“ taip pat neturi atgalinio slinkties buferių, tačiau
Tarpinės sumos
Antroje medžiagos dalyje (originale tai buvo du skirtingi straipsniai – apytiksliai. juosta) palyginsime našumą, atminties naudojimą ir delsą. Tačiau jau dabar matome, kad kai kurie aptariami terminalai turi rimtų trūkumų. Pavyzdžiui, vartotojai, kurie reguliariai dirba su RTL scenarijais, gali norėti apsvarstyti mlterm ir pterm, nes jie geriau atlieka panašias užduotis nei kiti. Konsole taip pat pasirodė gerai. Vartotojai, kurie nedirba su RTL scenarijais, gali pasirinkti ką nors kita.
Kalbant apie apsaugą nuo kenkėjiško kodo įterpimo, urxvt išsiskiria tuo, kad jame įdiegta ypatinga apsauga nuo tokio tipo atakų, kas man atrodo tikrai patogu. Tiems, kurie ieško varpelių ir švilpukų, verta pažvelgti į „Konsole“. Galiausiai verta paminėti, kad VTE yra puiki terminalų bazė, kuri garantuoja spalvų palaikymą, URL atpažinimą ir pan. Iš pirmo žvilgsnio numatytasis terminalas, pateikiamas su jūsų mėgstama aplinka, gali atitikti visus reikalavimus, tačiau palikime šį klausimą atvirą, kol suprasime našumą.
Tęskime pokalbį
Apskritai, terminalų veikimas pats savaime gali atrodyti kaip toli nulemta problema, tačiau, kaip paaiškėjo, kai kurie iš jų pasižymi stebėtinai dideliu tokio pagrindinio tipo programinės įrangos delsimu. Taip pat toliau apžvelgsime tai, kas tradiciškai vadinama „greičiu“ (iš tikrųjų tai yra slinkties greitis) ir terminalo atminties suvartojimą (su įspėjimu, kad šiandien tai nėra tokia svarbi, kaip prieš dešimtmečius).
Atidėti
Nuodugniai ištyręs terminalo veikimą, padariau išvadą, kad šiuo atžvilgiu svarbiausias parametras yra delsa (ping). Savo straipsnyje
Bet kas yra delsa ir kodėl ji tokia svarbi? Savo straipsnyje Fatinas tai apibrėžė kaip „delsą nuo klavišo paspaudimo iki atitinkamo ekrano atnaujinimo“ ir pacitavo
Fatinas aiškina, kad šis ping turi gilesnių pasekmių nei vien pasitenkinimas: „spausdinimas tampa lėtesnis, atsiranda daugiau klaidų, didėja akių ir raumenų įtampa“. Kitaip tariant, didelis delsimas gali sukelti rašybos klaidas ir taip pat prastesnę kodo kokybę, nes dėl to smegenims atsiranda papildoma pažinimo apkrova. Tačiau dar blogiau yra tai, kad ping „padidina akių ir raumenų įtampą“, o tai rodo
Kai kurie iš šių poveikių buvo žinomi ilgą laiką, o rezultatai
Fatinas atliko savo testus teksto rengyklėse; jis sukūrė nešiojamą instrumentą, vadinamą
Štai mano matavimų rezultatai, taip pat kai kurie Fatino rezultatai, rodantys, kad mano eksperimentas sutampa su jo bandymais:
Pirmas dalykas, kuris mane sužavėjo, buvo geresnis senesnių programų, tokių kaip xterm ir mlterm, atsako laikas. Turėdami blogiausią registro delsą (2,4 ms), jie veikė geriau nei greičiausias modernus terminalas (10,6 ms st). Nė vienas modernus terminalas nenukrenta žemiau 10 milisekundžių slenksčio. Visų pirma, „Alacritty“ neatitinka „greičiausio galimo terminalo emuliatoriaus“ reikalavimo, nors jo rezultatai pagerėjo nuo pirmosios peržiūros 2017 m. Išties, projekto autoriai
Tačiau skirtumai gali būti nepastebimi akiai. Kaip aiškina Fatinas, „jūs neturite žinoti apie vėlavimą, kad jis jus paveiktų“. Fatinas taip pat perspėja apie standartinį nuokrypį: „bet kokie delsos sutrikimai (drebėjimas) sukelia papildomą stresą dėl jų nenuspėjamumo“.
Aukščiau pateikta diagrama paimta naudojant gryną Debian 9 (ištemptą) su
Slinkties greitis
Kitas testas yra tradicinis „greičio“ arba „pralaidumo“ testas, kuris matuoja, kaip greitai terminalas gali slinkti puslapiu, ekrane rodydamas didelius teksto kiekius. Bandymo mechanika skiriasi; pradinis bandymas buvo tiesiog sugeneruoti tą pačią teksto eilutę naudojant komandą seq. Kiti testai apima Thomas E. Dickey (xterm palaikytojo) testą, kuris kartojamas
Čia matome, kad „rxvt“ ir „st“ traukia prieš konkurentus, o po to seka daug naujesnis „Alacritty“, kuris sukurtas daugiausia dėmesio skiriant našumui. Toliau rikiuojasi Xfce (VTE šeima) ir Konsole, kurios yra beveik dvigubai greitesnės. Paskutinis yra xterm, kuris yra penkis kartus lėtesnis nei rxvt. Bandymo metu xterm taip pat labai raibuliavo, todėl perduodamą tekstą sunku pamatyti, net jei tai buvo ta pati eilutė. „Konsole“ buvo greita, tačiau kartais buvo sudėtinga: ekranas retkarčiais užšaldavo, rodydamas dalinį tekstą arba jo visai nerodydamas. Kiti terminalai aiškiai rodė eilutes, įskaitant st, Alacrtty ir rxvt.
Dickey paaiškina, kad našumo skirtumai atsiranda dėl skirtingų terminalų slinkties buferių konstrukcijos. Visų pirma, jis kaltina „rxvt“ ir kitus terminalus „bendrųjų taisyklių nesilaikymu“:
„Skirtingai nei xterm, rxvt nebandė rodyti visų atnaujinimų. Jei jis atsiliks, jis atsisakys kai kurių atnaujinimų. Tai turėjo didesnį poveikį matomam slinkimo greičiui nei vidinės atminties organizavimui. Vienas trūkumas buvo tai, kad ASCII animacija buvo šiek tiek netiksli.
Dickey siūlo naudoti šaltinį, kad ištaisytų šį jaučiamą xterm vangumą
Išteklių suvartojimas
Nepriklausomai nuo to, ar prasminga slinkimo greitį laikyti našumo metrika, šis testas leidžia imituoti gnybtų apkrovą, o tai savo ruožtu leidžia išmatuoti kitus parametrus, pvz., atminties ar disko naudojimą. Metrika buvo gauta vykdant nurodytą testą punktai pagal Python proceso stebėjimą. Jis rinko skaitiklio duomenis
Šiame teste ST užima pirmąją vietą su mažiausiu vidutiniu 8 MB atminties suvartojimu, o tai nenuostabu, turint omenyje, kad pagrindinė dizaino idėja yra paprastumas. mlterm, xterm ir rxvt sunaudoja šiek tiek daugiau – apie 12 MB. Kitas pastebimas rezultatas yra „Alacritty“, kuriai paleisti reikia 30 MB. Tada yra VTE šeimos terminalai, kurių skaičiai nuo 40 iki 60 MB, o tai yra gana daug. Tokį suvartojimą galima paaiškinti tuo, kad šie terminalai naudoja aukštesnio lygio bibliotekas, pavyzdžiui, GTK. „Konsole“ yra paskutinė – bandymų metu sunaudojama milžiniška 65 MB atminties, nors tai galima pateisinti labai plačiu funkcijų spektru.
Palyginti su ankstesniais rezultatais, gautais prieš dešimt metų, visos programos pradėjo vartoti pastebimai daugiau atminties. Anksčiau „Xterm“ reikėjo 4 MB, o dabar paleidžiant reikia 15 MB. Panašiai išaugo rxvt suvartojimas, kuriam dabar reikia 16 MB. Xfce terminalas užima 34 MB, o tai yra tris kartus daugiau nei anksčiau, tačiau GNOME terminalui reikia tik 20 MB. Žinoma, visi ankstesni bandymai buvo atlikti naudojant 32 bitų architektūrą. LCA 2012 Rusty Russell
Tačiau negaliu nejausti, kad daugiau atminties skyrimas tokiam esminiam dalykui kaip terminalas yra išteklių švaistymas. Šios programos turėtų būti mažiausios iš mažiausių, turėtų veikti bet kurioje „dėžutėje“, net batų dėžėje, jei kada nors pasieksime iki taško, kad jose reikės įdiegti „Linux“ sistemas (ir jūs žinote, kad taip bus ). Tačiau atsižvelgiant į šiuos skaičius, atminties naudojimas ateityje taps problema bet kurioje aplinkoje, kurioje veikia keli terminalai, išskyrus kelis lengviausius ir ribotiausius pajėgumus. Norėdami tai kompensuoti, GNOME terminalas, Konsole, urxvt, Terminator ir Xfce terminalas turi demono režimą, kuris leidžia valdyti kelis terminalus vienu procesu, ribojant jų atminties suvartojimą.
Bandymų metu gavau dar vieną netikėtą disko skaitymo-rašymo rezultatą: tikėjausi, kad čia nieko nematysiu, bet paaiškėjo, kad kai kurie terminalai į diską įrašo didžiausius duomenis. Taigi, VTE biblioteka iš tikrųjų saugo slinkties buferį diske (ši funkcija
išvada
Pirmoje straipsnio dalyje nustatėme, kad VTE pagrįsti terminalai turi gerą funkcijų rinkinį, tačiau dabar matome, kad tai apima tam tikras našumo išlaidas. Dabar atmintis nėra problema, nes visi VTE terminalai gali būti valdomi naudojant demono procesą, kuris riboja jų apetitą. Tačiau senesnėms sistemoms, turinčioms fizinius RAM kiekio ir branduolio buferių apribojimus, vis tiek gali prireikti ankstesnių terminalų versijų, nes jos sunaudoja žymiai mažiau išteklių. Nors VTE terminalai gerai atliko pralaidumo (slinkimo) testus, jų rodymo delsa viršija GNOME vartotojo vadove nustatytą slenkstį. VTE kūrėjai tikriausiai turėtų į tai atsižvelgti. Jei atsižvelgsime į tai, kad net pradedantiesiems Linux naudotojams susidurti su terminalu yra neišvengiama, jie gali padaryti jį patogesnį. Patyrusiems geekams perjungimas iš numatytojo terminalo netgi gali reikšti mažesnį akių įtampą ir galimybę ateityje išvengti su darbu susijusių traumų ir ligų dėl ilgų darbo seansų. Deja, tik senieji xterm ir mlterm atveda mus prie stebuklingo 10 milisekundžių ping slenksčio, o tai daugeliui nepriimtina.
Lyginamieji matavimai taip pat parodė, kad dėl Linux grafinės aplinkos kūrimo kūrėjai turėjo padaryti daugybę kompromisų. Kai kurie vartotojai gali norėti pažvelgti į įprastas langų tvarkykles, nes jos žymiai sumažina ping. Deja, Wayland delsos išmatuoti nepavyko: mano naudojama programa Typometer buvo sukurta tam, kad būtų išvengta Wayland: šnipinėjimo kituose languose. Tikiuosi, kad „Wayland“ komponavimas veikia geriau nei X.org, taip pat tikiuosi, kad ateityje kas nors ras būdą, kaip išmatuoti delsą šioje aplinkoje.
Šaltinis: www.habr.com