Pár slov z naší překladatelské kanceláře: většinou se každý snaží překládat nejnovější materiály a publikace a my nejsme výjimkou. Ale terminály nejsou něco, co se aktualizuje jednou týdně. Proto jsme pro vás přeložili článek Antoina Beauprého, který vyšel na jaře 2018: navzdory svému značnému „stáří“ na moderní standardy podle našeho názoru materiál vůbec neztratil na aktuálnosti. Navíc se původně jednalo o sérii dvou článků, ale rozhodli jsme se je spojit do jednoho velkého příspěvku.
Terminály mají v historii počítačů zvláštní místo, ale v posledních desetiletích byly nuceny přežívat vedle příkazového řádku, protože grafická rozhraní se stávají všudypřítomnými.
Některé terminály mají přímo překvapivé bezpečnostní díry a většina z nich má úplně jinou sadu funkcí, od podpory rozhraní s kartami až po skriptování. I když my
Zde jsou terminály, které jsem zkontroloval:
Nemusí se jednat o nejnovější verze, protože jsem byl v době psaní tohoto článku omezen na stabilní sestavení, která jsem mohl zavést na Debianu 9 nebo Fedoře 27. Jedinou výjimkou je Alacritty. Je to potomek GPU-akcelerovaných terminálů a je napsán v neobvyklém a novém jazyce pro tento úkol – Rust. Ze své recenze jsem vyloučil webové terminály (včetně těch na
Podpora Unicode
Své testy jsem začal s podporou Unicode. Prvním testem terminálů bylo zobrazení řetězce Unicode z
Standardně xterm používá klasický "pevný" font, který dle
Tyto snímky obrazovky byly pořízeny ve Fedoře 27, protože poskytovala lepší výsledky než Debian 9, kde některé starší verze terminálů (konkrétně mlterm) neuměly správně pracovat s fonty. Naštěstí to bylo opraveno v pozdějších verzích.
Nyní si všimněte, jak je řádek zobrazen v xterm. Ukazuje se, že symbol Mem a následující semitský
„Mnoho počítačových programů nedokáže správně zobrazit obousměrný text. Například hebrejské jméno „Sarah“ se skládá ze znaků sin (ש) (které se objevují vpravo), potom resh (ר) a nakonec on (ה) (které by se měly objevit vlevo).“
Mnoho terminálů v tomto testu neprojde: Alacritty, terminály Gnome a XFCE odvozené od VTE, urxvt, st a xterm zobrazují „Sara“ v opačném pořadí, jako bychom jméno napsali jako „Aras“.
Dalším problémem obousměrných textů je, že je třeba je nějak zarovnat, zvláště pokud jde o míchání textů RTL a LTR. Skripty RTL by se měly spouštět z pravé strany okna terminálu, ale co by se mělo stát u terminálů, které mají výchozí angličtinu LTR? Většina z nich nemá žádné speciální mechanismy a zarovnává veškerý text doleva (včetně v Konsole). Výjimkou jsou pterm a mlterm, které dodržují standardy a zarovnávají takové čáry doprava.
Ochrana vložení
Další kritickou funkcí, kterou jsem identifikoval, je ochrana proti vložení. Ačkoli je všeobecně známo, že kouzla jako:
$ curl http://example.com/ | sh
jsou příkazy push spouštění kódu, málokdo ví, že skryté příkazy se mohou při kopírování a vkládání z webového prohlížeče vplížit do konzole, a to i po pečlivé kontrole.
git clone git: //git.kernel.org/pub/scm/utils/kup/kup.git
se při vložení z Hornova webu do terminálu změní na takovou nepříjemnost:
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
Jak to funguje? V bloku je obsažen škodlivý kód , který se pomocí CSS přesune mimo zobrazení uživatele.
set enable-bracketed-paste on
Bohužel i Hornův testovací web ukazuje, jak tuto ochranu obejít přes samotné formátování textu a předčasně skončit s aplikací Bracketed módu. Funguje to proto, že některé terminály správně nefiltrují sekvence escape před přidáním svých vlastních. Například v mém se mi nikdy nepodařilo úspěšně dokončit testy Konsole ani se správnou konfigurací .inputrc soubor. To znamená, že můžete snadno poškodit konfiguraci systému kvůli nepodporované aplikaci nebo nesprávně nakonfigurovanému shellu. To je zvláště nebezpečné při přihlašování na vzdálené servery, kde je pečlivá konfigurační práce méně běžná, zvláště pokud máte mnoho takových vzdálených počítačů.
Dobrým řešením tohoto problému je plugin pro potvrzení vložení pro terminál urxvt, který jednoduše požádá o povolení vložit jakýkoli text, který obsahuje nové řádky. Nenašel jsem bezpečnější možnost pro textový útok popsaný Hornem.
Karty a profily
Populární funkcí je nyní podpora pro rozhraní s kartami, které budeme definovat jako jedno terminálové okno obsahující několik dalších terminálů. Tato funkce se u různých terminálů liší, a přestože tradiční terminály xterm karty vůbec nepodporují, modernější inkarnace terminálů, jako je terminál Xfce, terminál GNOME a Konsole, tuto funkci mají. Urxvt také podporuje karty, ale pouze pokud používáte plugin. Ale pokud jde o samotnou podporu karet, Terminator je nesporným lídrem: nejenže podporuje karty, ale může také uspořádat terminály v libovolném pořadí (viz obrázek níže).
Další funkcí Terminatoru je možnost „seskupit“ tyto karty dohromady a odesílat stejné úhozy na více terminálů současně, což poskytuje hrubý nástroj pro provádění hromadných operací na více serverech současně. Podobná funkce je implementována také v Konsole. Chcete-li použít tuto funkci v jiných terminálech, musíte použít software třetích stran, jako je např
Karty fungují obzvláště dobře, když jsou spárovány s profily: například můžete mít jednu kartu pro e-mail, druhou pro chat a tak dále. To je dobře podporováno terminály Konsole a GNOME. Oba umožňují každé kartě automaticky spustit svůj vlastní profil. Terminátor také podporuje profily, ale nenašel jsem způsob, jak automaticky spustit určité programy, když otevřete konkrétní kartu. Jiné terminály pojem „profil“ vůbec nemají.
Volánky
Poslední věcí, kterou se budu v první části tohoto článku zabývat, je vzhled terminálů. Například GNOME, Xfce a urxvt podporují průhlednost, ale nedávno přestaly podporovat obrázky na pozadí, což některé uživatele přimělo přejít na terminál
Některé terminály také analyzují text na vzory adres URL, aby bylo možné kliknout na odkazy. To platí pro všechny terminály odvozené od VTE, zatímco urxvt vyžaduje speciální plugin, který by transformoval adresy URL kliknutím nebo pomocí klávesové zkratky. Jiné terminály Zobrazované URL jsem testoval jinými způsoby.
A konečně novým trendem v terminálech je volitelnost rolovací vyrovnávací paměti. Například st nemá vyrovnávací paměť pro posuv; předpokládá se, že uživatel bude používat terminálový multiplexer jako tmux a
Alacritty také postrádá backscroll buffery, ale
Mezisoučet
V druhé části materiálu (v originále to byly dva různé články - cca. pruh) porovnáme výkon, využití paměti a latenci. Už teď ale vidíme, že některé z dotyčných terminálů mají vážné nedostatky. Například uživatelé, kteří pravidelně pracují se skripty RTL, mohou chtít zvážit mlterm a pterm, protože zvládají podobné úkoly lépe než ostatní. Konsole si také vedla dobře. Uživatelé, kteří nepracují s RTL skripty, mohou zvolit něco jiného.
Pokud jde o ochranu před vkládáním škodlivého kódu, urxvt vyniká speciální implementací ochrany proti tomuto typu útoku, která se mi zdá rozhodně výhodná. Pro ty, kteří hledají nějaké zvonky a píšťalky, stojí za to se podívat na Konsole. Nakonec stojí za zmínku, že VTE je vynikající základna pro terminály, která zaručuje podporu barev, rozpoznávání URL a tak dále. Na první pohled může výchozí terminál dodávaný s vaším oblíbeným prostředím splňovat všechny požadavky, ale nechme tuto otázku otevřenou, dokud výkon nepochopíme.
Pokračujeme v rozhovoru
Obecně se výkon terminálů sám o sobě může zdát jako přitažený za vlasy problém, ale jak se ukazuje, některé z nich vykazují překvapivě vysokou latenci pro software tak zásadního typu. Dále se také podíváme na to, co se tradičně nazývá „rychlost“ (ve skutečnosti se jedná o rychlost rolování) a spotřebu paměti terminálu (s upozorněním, že to dnes není tak důležité jako před desítkami let).
Zpoždění
Po důkladném prostudování výkonu terminálu jsem došel k závěru, že nejdůležitějším parametrem je v tomto ohledu latence (ping). Ve svém článku
Ale co je latence a proč je tak důležitá? Fatin to ve svém článku definoval jako „prodlevu mezi stisknutím klávesy a příslušnou aktualizací obrazovky“ a citoval
Fatin vysvětluje, že tento ping má hlubší důsledky než pouhé uspokojení: „Psaní se zpomaluje, objevuje se více chyb a zvyšuje se napětí očí a svalů.“ Jinými slovy, velké zpoždění může vést k překlepům a také nižší kvalitě kódu, protože vede k dodatečné kognitivní zátěži mozku. Ale co je horší je, že ping "zvyšuje namáhání očí a svalů", což se zdá naznačovat
Některé z těchto účinků jsou známy již dlouhou dobu a výsledky
Fatin prováděl své testy na textových editorech; vytvořil přenosný nástroj tzv
Zde jsou výsledky mých měření a také některé Fatinovy výsledky, abych ukázal, že můj experiment souhlasí s jeho testy:
První, co mě zarazilo, byla lepší doba odezvy starších programů jako xterm a mlterm. S nejhorší latencí registru (2,4 ms) si vedly lépe než nejrychlejší moderní terminál (10,6 ms pro st). Žádný moderní terminál neklesne pod práh 10 milisekund. Konkrétně Alacritty nesplňuje požadavek „nejrychlejší dostupný emulátor terminálu“, ačkoli jeho skóre se od první revize v roce 2017 zlepšilo. Ostatně autoři projektu
Rozdíly však nemusí být okem patrné. Jak vysvětluje Fatin, "nemusíte si být vědomi zpoždění, aby to na vás mělo vliv." Fatin také varuje před směrodatnou odchylkou: „jakékoli poruchy latence (jitter) vytvářejí další stres kvůli své nepředvídatelnosti.
Výše uvedený graf je převzat z čistého Debianu 9 (roztáhnout).
Rychlost rolování
Dalším testem je tradiční test „rychlosti“ nebo „šířky pásma“, který měří, jak rychle může terminál posouvat stránku při zobrazení velkého množství textu na obrazovce. Mechanika testu se liší; původním testem bylo jednoduše vygenerovat stejný textový řetězec pomocí příkazu seq. Mezi další testy patří test Thomase E. Dickeyho (správce xterm), který opakovaně
Zde vidíme, že rxvt a st táhnou před konkurencí, následované mnohem novějším Alacritty, který je navržen se zaměřením na výkon. Další jsou Xfce (rodina VTE) a Konsole, které jsou téměř dvakrát rychlejší. Poslední je xterm, který je pětkrát pomalejší než rxvt. Během testu se xterm také hodně vlnil, takže procházející text bylo špatně vidět, i když šlo o stejný řádek. Konsole byla rychlá, ale občas to bylo složité: displej čas od času zamrzal, zobrazoval částečný text nebo jej nezobrazoval vůbec. Ostatní terminály zobrazovaly řetězce jasně, včetně st, Alacritty a rxvt.
Dickey vysvětluje, že rozdíly ve výkonu jsou způsobeny konstrukcí scroll bufferů v různých terminálech. Zejména obviňuje rxvt a další terminály z „nedodržování obecných pravidel“:
„Na rozdíl od xterm se rxvt nepokusil zobrazit všechny aktualizace. Pokud zaostává, odmítne některé aktualizace, aby je dohnal. To mělo větší dopad na zdánlivou rychlost rolování než na organizaci vnitřní paměti. Jednou nevýhodou bylo, že animace ASCII byla poněkud nepřesná."
K nápravě této vnímané xterm pomalosti Dickey navrhuje použít zdroj
Spotřeba zdrojů
Bez ohledu na to, zda má smysl považovat rychlost rolování za metriku výkonu, tento test nám umožňuje simulovat zatížení terminálů, což nám zase umožňuje měřit další parametry, jako je využití paměti nebo disku. Metriky byly získány provedením specifikovaného testu následující pod monitorováním procesu Pythonu. Sbíral data z měřidel
V tomto testu je ST na prvním místě s nejnižší průměrnou spotřebou paměti 8 MB, což není překvapivé vzhledem k tomu, že hlavní myšlenkou designu je jednoduchost. mlterm, xterm a rxvt spotřebují o něco více - asi 12 MB. Dalším pozoruhodným výsledkem je Alacritty, který ke spuštění vyžaduje 30 MB. Pak jsou tu terminály rodiny VTE s čísly od 40 do 60 MB, což je poměrně hodně. Tuto spotřebu lze vysvětlit tím, že tyto terminály používají knihovny vyšší úrovně, například GTK. Konsole je na posledním místě s ohromnou spotřebou paměti 65 MB během testů, i když to lze ospravedlnit velmi širokou škálou funkcí.
Ve srovnání s předchozími výsledky získanými před deseti lety začaly všechny programy spotřebovávat znatelně více paměti. Xterm dříve vyžadoval 4 MB, ale nyní vyžaduje 15 MB jen při spuštění. K podobnému nárůstu spotřeby dochází u rxvt, který nyní vyžaduje 16 MB po vybalení z krabice. Xfce Terminal zabírá 34 MB, což je třikrát více než dříve, ale GNOME Terminal vyžaduje pouze 20 MB. Všechny předchozí testy byly samozřejmě prováděny na 32bitové architektuře. Na LCA 2012 Rusty Russell
Nemohu se však ubránit dojmu, že přidělovat více paměti něčemu tak zásadnímu, jako je terminál, je plýtvání prostředky. Tyto programy by měly být nejmenší z nejmenších, měly by být schopny běžet na jakékoli „krabice“, dokonce i na krabici od bot, pokud někdy dojdeme do bodu, kdy je bude třeba vybavit systémy Linux (a víte, že to tak bude ). Ale s těmito čísly se využití paměti stane v budoucnu problémem v jakémkoli prostředí s více terminály, kromě několika nejlehčích a nejvíce omezených schopností. Aby se to kompenzovalo, terminály GNOME, Konsole, urxvt, Terminator a Xfce Terminal mají režim démona, který vám umožňuje ovládat více terminálů prostřednictvím jednoho procesu a omezovat jejich spotřebu paměti.
Během svých testů jsem došel k dalšímu nečekanému výsledku ohledně čtení a zápisu na disk: Čekal jsem, že zde neuvidím vůbec nic, ale ukázalo se, že některé terminály zapisují na disk nejobjemnější data. Knihovna VTE tedy ve skutečnosti uchovává na disku posuvnou vyrovnávací paměť (tato funkce
Závěr
V první části článku jsme zjistili, že terminály založené na VTE mají dobrou sadu funkcí, ale nyní vidíme, že to přináší určité náklady na výkon. Paměť nyní není problém, protože všechny terminály VTE lze ovládat pomocí procesu Daemon, což omezuje jejich chuť k jídlu. Starší systémy, které mají fyzická omezení týkající se množství paměti RAM a vyrovnávacích pamětí jádra, však mohou stále potřebovat starší verze terminálů, protože spotřebovávají podstatně méně prostředků. Ačkoli si terminály VTE vedly dobře v testech propustnosti (rolování), jejich latence zobrazení je nad prahovou hodnotou nastavenou v uživatelské příručce GNOME. Vývojáři VTE by s tím pravděpodobně měli počítat. Pokud vezmeme v úvahu, že i pro začínající uživatele Linuxu je setkání s terminálem nevyhnutelné, mohou jej učinit uživatelsky přívětivějším. Pro zkušené geeky může přechod z výchozího terminálu dokonce znamenat menší únavu očí a možnost vyhnout se budoucím pracovním úrazům a nemocem kvůli dlouhým pracovním sezením. Bohužel pouze starý xterm a mlterm nás přivádějí k magické hranici pingu 10 milisekund, což je pro mnohé nepřijatelné.
Benchmarková měření také ukázala, že kvůli vývoji linuxových grafických prostředí museli vývojáři přistoupit na řadu kompromisů. Někteří uživatelé se možná budou chtít podívat na běžné správce oken, protože poskytují výrazné snížení počtu pingů. Bohužel nebylo možné měřit latenci pro Wayland: program Typometer, který jsem použil, byl vytvořen pro to, čemu má Wayland zabránit: špehování jiných oken. Doufám, že Wayland compositing funguje lépe než X.org, a také doufám, že v budoucnu někdo najde způsob, jak měřit latenci v tomto prostředí.
Zdroj: www.habr.com