{"id":37222,"date":"2019-10-31T22:16:26","date_gmt":"2019-10-31T19:16:26","guid":{"rendered":"https:\/\/prohoster.info\/blog\/obzor-emulyatorov-terminala\/"},"modified":"2019-10-31T22:16:26","modified_gmt":"2019-10-31T19:16:26","slug":"obzor-emulyatorov-terminala","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/obzor-emulyatorov-terminala","title":{"rendered":"Przegl\u0105d emulator\u00f3w terminali","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><i>Kilka s\u0142\u00f3w od naszego biura t\u0142umacze\u0144: zazwyczaj wszyscy staraj\u0105 si\u0119 t\u0142umaczy\u0107 najnowsze materia\u0142y i publikacje, i my nie jeste\u015bmy wyj\u0105tkiem. Ale terminale to nie co\u015b, co aktualizuje si\u0119 co tydzie\u0144. Dlatego przet\u0142umaczyli\u015bmy artyku\u0142 Antoine\u2019a Bopr\u00e9, opublikowany wiosn\u0105 2018 roku: mimo solidnego jak na dzisiejsze czasy \u201ewieku\u201d, naszym zdaniem materia\u0142 wci\u0105\u017c ma aktualne znaczenie. Ponadto orygina\u0142 to seria dw\u00f3ch artyku\u0142\u00f3w, ale postanowili\u015bmy po\u0142\u0105czy\u0107 je w jeden du\u017cy post.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Przegl\u0105d emulator\u00f3w terminali\" src=\"\/wp-content\/uploads\/2019\/08\/23b2893d4d23ee402f42f8d686fec788.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTerminale zajmuj\u0105 szczeg\u00f3lne miejsce w historii komputer\u00f3w, ale w ostatnich dziesi\u0119cioleciach by\u0142y dos\u0142ownie zmuszone do przetrwania obok linii polece\u0144 w erze powszechnie rozwijaj\u0105cych si\u0119 interfejs\u00f3w graficznych. <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Terminal_emulator\">Emulatory terminali<\/a><\/noindex> zast\u0105pi\u0142y swoich <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Computer_terminal\">sprz\u0119towych odpowiednik\u00f3w<\/a><\/noindex>, kt\u00f3re z kolei by\u0142y modyfikacj\u0105 system\u00f3w opartych na kartach perforowanych i przeka\u017anikach. Nowoczesne dystrybucje dostarczane s\u0105 z ca\u0142\u0105 gam\u0105 emulator\u00f3w terminali w r\u00f3\u017cnych kszta\u0142tach i kolorach. I podczas gdy wielu zadowala si\u0119 standardowym terminalem, kt\u00f3ry oferuje ich \u015brodowisko robocze, niekt\u00f3rzy z dum\u0105 korzystaj\u0105 z wyra\u017anie egzotycznego oprogramowania do uruchamiania swojej ulubionej pow\u0142oki lub edytora tekstu. Ale, jak zobaczymy w tym artykule, nie wszystkie terminale zosta\u0142y stworzone na jedno podobie\u0144stwo: r\u00f3\u017cni\u0105 si\u0119 znacznie pod wzgl\u0119dem funkcjonalno\u015bci, rozmiaru i wydajno\u015bci.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Niekt\u00f3re terminale maj\u0105 wr\u0119cz zaskakuj\u0105ce luki w bezpiecze\u0144stwie, a wi\u0119kszo\u015b\u0107 z nich posiada zupe\u0142nie r\u00f3\u017cny zestaw funkcji, od wsparcia dla interfejsu z zak\u0142adkami po skrypty. Chocia\u017c my <noindex><a rel=\"nofollow\" href=\"https:\/\/lwn.net\/Articles\/88161\/\">zajmowali\u015bmy si\u0119 emulatorami terminali w odleg\u0142ej przesz\u0142o\u015bci<\/a><\/noindex>, ten artyku\u0142 jest aktualizacj\u0105 poprzedniego materia\u0142u, kt\u00f3ry pomo\u017ce czytelnikom zdecydowa\u0107, kt\u00f3rego terminala u\u017cywa\u0107 w 2018 roku. W pierwszej cz\u0119\u015bci artyku\u0142u por\u00f3wnane s\u0105 funkcje, a w drugiej oceniana jest wydajno\u015b\u0107.<\/p>\n<p>Oto terminale, kt\u00f3re rozwa\u017ca\u0142em:<\/p>\n<p><img decoding=\"async\" alt=\"Przegl\u0105d emulator\u00f3w terminali\" src=\"\/wp-content\/uploads\/2019\/08\/be76032ca4392c23dd0c111a36b199ef.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMo\u017cliwe, \u017ce to nie s\u0105 najnowsze wersje, poniewa\u017c opiera\u0142em si\u0119 na stabilnych wydaniach w momencie pisania materia\u0142u, kt\u00f3re uda\u0142o mi si\u0119 zainstalowa\u0107 na Debianie 9 lub Fedora 27. Jedynym wyj\u0105tkiem jest Alacritty. Jest to nast\u0119pca terminali z przyspieszeniem GPU i zosta\u0142 napisany w nietypowym i nowym dla tego zadania j\u0119zyku \u2013 Rust. Wykluczy\u0142em ze swojego przegl\u0105du terminale webowe (w tym na <noindex><a rel=\"nofollow\" href=\"https:\/\/electronjs.org\/\">Electron<\/a><\/noindex>), poniewa\u017c wst\u0119pne testy pokaza\u0142y ich niezwykle nisk\u0105 wydajno\u015b\u0107.<\/p>\n<h4>Wsparcie dla Unicode<\/h4>\n<p>\nSwoje testy zaczyna\u0142em od wsparcia dla Unicode. Pierwszym testem terminali by\u0142o wy\u015bwietlenie linii o Unicode z <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Unicode#Web\">artyku\u0142u na Wikipedii<\/a><\/noindex>: \u201e\u00e9, \u0394, \u0419, \u05e7, \u0645, \u0e57, \u3042, \u53f6, \u8449 i \ub9d0\u201d. Ten prosty test pokazuje, czy terminal mo\u017ce poprawnie dzia\u0142a\u0107 na ca\u0142ym \u015bwiecie. Terminal xterm nie wy\u015bwietla arabskiego znaku <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Mem\">Mem<\/a><\/noindex> w konfiguracji domy\u015blnej:<\/p>\n<p><img decoding=\"async\" alt=\"Przegl\u0105d emulator\u00f3w terminali\" src=\"\/wp-content\/uploads\/2019\/08\/92e1b9f6e7f3129a55d09cd48310c699.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDomy\u015blnie xterm u\u017cywa klasycznej \u201esta\u0142ej\u201d czcionki, kt\u00f3ra, wed\u0142ug <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Open-source_Unicode_typefaces\">tego samego WIKI<\/a><\/noindex>, ma \u201eistotne wsparcie dla Unicode od 1997 roku\u201d. W tej czcionce dzieje si\u0119 co\u015b, co powoduje, \u017ce znak wy\u015bwietla si\u0119 jako pusta ramka, a dopiero po zwi\u0119kszeniu rozmiaru tekstu do 20+ punkt\u00f3w, znak zaczyna prawid\u0142owo si\u0119 wy\u015bwietla\u0107. Jednak taki \u201efix\u201d psuje wy\u015bwietlanie innych znak\u00f3w Unicode:<\/p>\n<p><img decoding=\"async\" alt=\"Przegl\u0105d emulator\u00f3w terminali\" src=\"\/wp-content\/uploads\/2019\/08\/4300f72d87bb9b729d4c682e876b4998.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTe zrzuty ekranu zosta\u0142y zrobione na Fedora 27, poniewa\u017c to ona dawa\u0142a lepsze wyniki ni\u017c Debian 9, gdzie niekt\u00f3re starsze wersje terminali (konkretnie \u2013 mlterm) nie mog\u0142y dzia\u0142a\u0107 poprawnie z czcionkami. Na szcz\u0119\u015bcie to zosta\u0142o naprawione w p\u00f3\u017aniejszych wersjach.<\/p>\n<p>Zwr\u00f3\u0107 uwag\u0119 na wy\u015bwietlanie linii w xterm. Okazuje si\u0119, \u017ce znak Mem i nast\u0119pny po nim Semitic <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Qoph\">Qoph<\/a><\/noindex> nale\u017c\u0105 do skrypt\u00f3w rysowania RTL (<noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Right-to-left\">od prawej do lewej<\/a><\/noindex>), dlatego technicznie powinny by\u0107 wy\u015bwietlane od prawej do lewej. Przegl\u0105darki internetowe, takie jak Firefox 57, poprawnie obs\u0142uguj\u0105 powy\u017csz\u0105 lini\u0119. Prostszym przyk\u0142adem tekstu RTL jest s\u0142owo \u201e<noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Sarah\">Sara<\/a><\/noindex>\u201d po hebrajsku (<noindex><a rel=\"nofollow\" href=\"https:\/\/he.wikipedia.org\/wiki\/%D7%A9%D7%A8%D7%94\">\u05e9\u05e8\u05d4<\/a><\/noindex>). <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Bi-directional_text\">Strona WIKI o tekstach dwukierunkowych<\/a><\/noindex> m\u00f3wi nast\u0119puj\u0105co:<\/p>\n<blockquote><p>\u201eWiele program\u00f3w komputerowych nie mo\u017ce poprawnie wy\u015bwietla\u0107 tekstu dwukierunkowego. Na przyk\u0142ad hebrajskie imi\u0119 \u201eSara\u201d sk\u0142ada si\u0119 z liter syn (\u05e9) (kt\u00f3ry pojawia si\u0119 z prawej), nast\u0119pnie resz (\u05e8) i w ko\u0144cu che (\u05d4) (kt\u00f3ry powinien pojawia\u0107 si\u0119 z lewej)\u201d.<\/p><\/blockquote>\n<p>\nWiele terminali nie przechodzi tego testu: Alacritty, terminale oparte na VTE z Gnome i XFCE, urxvt, st oraz xterm wy\u015bwietlaj\u0105 \u201eSara\u201d w odwrotnej kolejno\u015bci, jakby\u015bmy zapisywali to imi\u0119 jako \u201eAras\u201d.<\/p>\n<p><img decoding=\"async\" alt=\"Przegl\u0105d emulator\u00f3w terminali\" src=\"\/wp-content\/uploads\/2019\/08\/9decee6d198bd9d3e4f4883a8f2b0da6.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nInnym problemem tekst\u00f3w dwukierunkowych jest to, \u017ce trzeba je jako\u015b wyr\u00f3wna\u0107, szczeg\u00f3lnie w przypadku mieszania tekst\u00f3w RTL i LTR. Scenariusze RTL powinny zaczyna\u0107 z prawej strony okna terminala, ale co powinno si\u0119 wydarzy\u0107 w terminalach, kt\u00f3re domy\u015blnie dzia\u0142aj\u0105 w LTR po angielsku? Wi\u0119kszo\u015b\u0107 z nich nie posiada specjalnych mechanizm\u00f3w i wyr\u00f3wnuje ca\u0142y tekst do lewej (w tym w Konsole). Wyj\u0105tkiem s\u0105 pterm i mlterm, kt\u00f3re przestrzegaj\u0105 standard\u00f3w i wyr\u00f3wnuj\u0105 takie linie do prawej.<\/p>\n<p><img decoding=\"async\" alt=\"Przegl\u0105d emulator\u00f3w terminali\" src=\"\/wp-content\/uploads\/2019\/08\/a32675d44e7cadce6d197d6eb5c8d9e2.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h4>Ochrona przed wklejaniem<\/h4>\n<p>\nNast\u0119pn\u0105 krytyczn\u0105 cech\u0105, kt\u00f3r\u0105 dla siebie okre\u015bli\u0142em, jest ochrona przed wklejaniem. Cho\u0107 powszechnie wiadomo, \u017ce polecenia typu:<\/p>\n<pre><code class=\"plaintext\">$ curl http:\/\/example.com\/ | sh<\/code><\/pre>\n<p>\ns\u0105 komendami wykonawczymi, niewiele os\u00f3b wie, \u017ce ukryte komendy mog\u0105 przedosta\u0107 si\u0119 do konsoli przy kopiowaniu-wklejaniu z przegl\u0105darki, nawet po dok\u0142adnym sprawdzeniu. <noindex><a rel=\"nofollow\" href=\"http:\/\/thejh.net\/misc\/website-terminal-copy-paste\">Strona kontrolna Janna Horna<\/a><\/noindex> doskonale pokazuje, jak wygl\u0105daj\u0105ca na poz\u00f3r nieszkodliwa komenda:<\/p>\n<pre><code class=\"plaintext\">git clone git:\/\/git.kernel.org\/pub\/scm\/utils\/kup\/kup.git<\/code><\/pre>\n<p>\nprzekszta\u0142ca si\u0119 podczas wklejania z strony Horna w co\u015b tak nieprzyjemnego:<\/p>\n<pre><code class=\"plaintext\">git clone \/dev\/null;\n\tclear;\n\techo -n \"Cze\u015b\u0107 \";\n\twhoami|tr -d 'n';\n\techo -e '!nTo by\u0142 z\u0142y pomys\u0142. Nie kopiuj kodu z nieznanych stron! \n\tOto pierwsza linia twojego \/etc\/passwd: ';\n\thead -n1 \/etc\/passwd\n\tgit clone git:\/\/git.kernel.org\/pub\/scm\/utils\/kup\/kup.git<\/code><\/pre>\n<p>\nJak to dzia\u0142a? Z\u0142o\u015bliwy kod jest wydobyty z bloku <b><span><\/b>, kt\u00f3ry jest przenoszony z pola widzenia u\u017cytkownika za pomoc\u0105 CSS.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/cirw.in\/blog\/bracketed-paste\">Tryb wklejania w klamrach<\/a><\/noindex> jest wyra\u017anie zaprojektowany w celu neutralizacji podobnych atak\u00f3w. W tym trybie terminale otaczaj\u0105 wklejany tekst par\u0105 specjalnych sekwencji escape, aby poinformowa\u0107 pow\u0142ok\u0119 o pochodzeniu tego tekstu. W ten spos\u00f3b pow\u0142oka otrzymuje sygna\u0142, \u017ce mo\u017ce zignorowa\u0107 specjalne znaki, kt\u00f3re mo\u017ce zawiera\u0107 wklejany tekst. Wszystkie terminale, a\u017c po szanowanego xterm, obs\u0142uguj\u0105 t\u0119 funkcj\u0119, ale wklejanie w trybie w klamrach wymaga wsparcia pow\u0142oki lub aplikacji uruchomionej w terminalu. Na przyk\u0142ad, oprogramowanie u\u017cywaj\u0105ce <noindex><a rel=\"nofollow\" href=\"https:\/\/tiswww.case.edu\/php\/chet\/readline\/rltop.html\">GNU Readline<\/a><\/noindex> (ten sam Bash), potrzebuje pliku <b>~ \/.inputrc<\/b>:<\/p>\n<pre><code class=\"plaintext\">set enable-bracketed-paste on<\/code><\/pre>\n<p>\nNiestety, testowa strona Horna r\u00f3wnie\u017c pokazuje, jak obej\u015b\u0107 t\u0119 ochron\u0119 poprzez samo formatowanie tekstu i przedwcze\u015bnie zako\u0144czy\u0107 stosowanie trybu Bracketed. Dzia\u0142a to, poniewa\u017c niekt\u00f3re terminale b\u0142\u0119dnie filtruj\u0105 sekwencje escape przed dodaniem swoich w\u0142asnych. Na przyk\u0142ad, w moich pr\u00f3bach nie uda\u0142o mi si\u0119 pomy\u015blnie zako\u0144czy\u0107 test\u00f3w Konsole, nawet przy poprawnej konfiguracji. <b>.inputrc<\/b> plik. Oznacza to, \u017ce z \u0142atwo\u015bci\u0105 mo\u017cesz uszkodzi\u0107 konfiguracj\u0119 systemu z powodu nieobs\u0142ugiwanej aplikacji lub \u017ale skonfigurowanej pow\u0142oki. Jest to szczeg\u00f3lnie niebezpieczne podczas logowania si\u0119 do zdalnych serwer\u00f3w, gdzie staranna obr\u00f3bka konfiguracji zdarza si\u0119 rzadziej, zw\u0142aszcza je\u015bli masz wiele takich zdalnych maszyn.<\/p>\n<p>Dobrym rozwi\u0105zaniem tego problemu jest wtyczka do potwierdzenia wklejania dla terminala <b>urxvt<\/b>, kt\u00f3ra po prostu prosi o zgod\u0119 na wklejenie dowolnego tekstu zawieraj\u0105cego nowe linie. Nie znalaz\u0142em bardziej zabezpieczonej opcji dla opisywanego przez Horna ataku tekstowego.<\/p>\n<h4>Karty i profile<\/h4>\n<p>\nPopularn\u0105 funkcj\u0105 obecnie jest wsparcie interfejsu z kartami, kt\u00f3re definiujemy jako jedno okno terminala zawieraj\u0105ce kilka terminali. Dla r\u00f3\u017cnych terminali ta funkcja r\u00f3\u017cni si\u0119, i chocia\u017c tradycyjne terminale typu xterm w og\u00f3le nie obs\u0142uguj\u0105 kart, bardziej nowoczesne wcielenia terminala w postaci Xfce Terminal, GNOME Terminal i Konsole t\u0119 funkcj\u0119 maj\u0105. Wsparcie kart posiada r\u00f3wnie\u017c Urxvt, ale tylko pod warunkiem u\u017cycia wtyczki. Jednak z punktu widzenia wsparcia kart bezsprzecznym liderem jest Terminator: nie tylko obs\u0142uguje karty, ale tak\u017ce mo\u017ce uk\u0142ada\u0107 terminale w dowolnej kolejno\u015bci (patrz obrazek poni\u017cej).<\/p>\n<p><img decoding=\"async\" alt=\"Przegl\u0105d emulator\u00f3w terminali\" src=\"\/wp-content\/uploads\/2019\/08\/5ac2cdbdd969420cd7c19597d20c8c35.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKolejn\u0105 cech\u0105 Terminatora jest mo\u017cliwo\u015b\u0107 \u201egrupowania\u201d tych kart razem i wysy\u0142ania tych samych naci\u015bni\u0119\u0107 klawiszy do kilku terminali jednocze\u015bnie, co zapewnia prosty instrument do wykonywania masowych operacji na kilku serwerach jednocze\u015bnie. Podobna funkcja jest r\u00f3wnie\u017c zrealizowana w Konsole. Aby skorzysta\u0107 z tej funkcji w innych terminalach, nale\u017cy u\u017cy\u0107 oprogramowania stron trzecich, takiego jak <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/duncs\/clusterssh\">Cluster SSH<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"http:\/\/hea-www.harvard.edu\/~fine\/Tech\/xlax.html\">xlax<\/a><\/noindex> lub <noindex><a rel=\"nofollow\" href=\"https:\/\/tmux.github.io\/\">tmux<\/a><\/noindex>.<\/p>\n<p>Zak\u0142adki szczeg\u00f3lnie dobrze dzia\u0142aj\u0105 w po\u0142\u0105czeniu z profilami: na przyk\u0142ad mo\u017cesz mie\u0107 jedn\u0105 zak\u0142adk\u0119 do poczty elektronicznej, drug\u0105 do czatu itd. Jest to dobrze wspierane przez terminale Konsole i GNOME Terminal. Oba pozwalaj\u0105 ka\u017cdej zak\u0142adce na automatyczne uruchamianie swojego profilu. Terminator r\u00f3wnie\u017c wspiera profile, ale nie mog\u0142em znale\u017a\u0107 sposobu na automatyczne uruchamianie okre\u015blonych program\u00f3w przy otwieraniu konkretnej zak\u0142adki. Inne terminale w og\u00f3le nie maj\u0105 poj\u0119cia o 'profilu'.<\/p>\n<h4>Falbany<\/h4>\n<p>\nOstatni\u0105 rzecz\u0105, kt\u00f3r\u0105 om\u00f3wi\u0119 w pierwszej cz\u0119\u015bci tego artyku\u0142u, jest wygl\u0105d terminali. Na przyk\u0142ad GNOME, Xfce i urxvt wspieraj\u0105 przezroczysto\u015b\u0107, ale ostatnio wycofano wsparcie dla obraz\u00f3w t\u0142a, co spowodowa\u0142o, \u017ce niekt\u00f3rzy u\u017cytkownicy przeszli na inny terminal. <noindex><a rel=\"nofollow\" href=\"https:\/\/gnunn1.github.io\/tilix-web\/\">Tilix<\/a><\/noindex>. Osobi\u015bcie mi to odpowiada i jest po prostu <b>Xresources<\/b>, kt\u00f3ry ustawia podstawowy zestaw kolor\u00f3w t\u0142a dla urxvt. Jednak niestandardowe motywy kolor\u00f3w mog\u0105 powodowa\u0107 problemy. Na przyk\u0142ad, <noindex><a rel=\"nofollow\" href=\"http:\/\/ethanschoonover.com\/solarized\">Solarized<\/a><\/noindex> <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/altercation\/solarized\/issues\/220\">nie dzia\u0142a<\/a><\/noindex> z aplikacjami <noindex><a rel=\"nofollow\" href=\"http:\/\/hisham.hm\/htop\/\">htop<\/a><\/noindex> i <noindex><a rel=\"nofollow\" href=\"http:\/\/iptraf.seul.org\/\">IPTraf<\/a><\/noindex>, poniewa\u017c ju\u017c u\u017cywaj\u0105 swoich kolor\u00f3w.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/VT100\">Oryginalny terminal VT100<\/a><\/noindex> nie wspiera\u0142 kolor\u00f3w, a nowe cz\u0119sto by\u0142y ograniczone do palety 256 kolor\u00f3w. Dla zaawansowanych u\u017cytkownik\u00f3w, kt\u00f3rzy stylizuj\u0105 swoje terminale, pro\u015bby o pow\u0142ok\u0119 lub linie stanu w spos\u00f3b z\u0142o\u017cony mog\u0105 sta\u0107 si\u0119 nieprzyjemnym ograniczeniem. <noindex><a rel=\"nofollow\" href=\"https:\/\/gist.github.com\/XVilka\/8346728\">Gist<\/a><\/noindex> \u015bledzi, kt\u00f3re terminale maj\u0105 wsparcie dla 'True Color'. Moje testy potwierdzaj\u0105, \u017ce st, Alacritty i terminale oparte na VTE doskonale wspieraj\u0105 True Color. Inne terminale w tym zakresie wypadaj\u0105 do\u015b\u0107 s\u0142abo i w rzeczywisto\u015bci nie wy\u015bwietlaj\u0105 nawet 256 kolor\u00f3w. Poni\u017cej mo\u017cesz zobaczy\u0107 r\u00f3\u017cnic\u0119 w wsparciu True Color w terminalach GNOME, st i xterm, kt\u00f3re dobrze spe\u0142niaj\u0105 to zadanie za pomoc\u0105 swojej 256-kolorowej palety, i urxvt, kt\u00f3ry nie tylko nie przechodzi testu, ale nawet pokazuje migaj\u0105ce symbole zamiast nich.<\/p>\n<p><img decoding=\"async\" alt=\"Przegl\u0105d emulator\u00f3w terminali\" src=\"\/wp-content\/uploads\/2019\/08\/bc6ceac84a1918b9bfa14a5cadd28746.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNiekt\u00f3re terminale r\u00f3wnie\u017c analizuj\u0105 tekst pod k\u0105tem wzorc\u00f3w URL, aby uczyni\u0107 linki klikalnymi. Dotyczy to wszystkich terminali pochodnych od VTE, podczas gdy urxvt wymaga specjalnego modu\u0142u wtyczki, aby przekszta\u0142ca\u0107 adresy URL po klikni\u0119ciu lub za pomoc\u0105 skr\u00f3tu klawiaturowego. Inne terminale, kt\u00f3re testowa\u0142em, wy\u015bwietlaj\u0105 adresy URL w inny spos\u00f3b.<\/p>\n<p>Wreszcie nowym trendem terminali jest opcjonalno\u015b\u0107 bufora przewijania. Na przyk\u0142ad w st nie ma bufora przewijania; zak\u0142ada si\u0119, \u017ce u\u017cytkownik b\u0119dzie korzysta\u0142 z multiplexer\u00f3w terminalowych, takich jak tmux i <noindex><a rel=\"nofollow\" href=\"https:\/\/www.gnu.org\/software\/screen\/\">GNU Screen<\/a><\/noindex>.<\/p>\n<p>W Alacritty r\u00f3wnie\u017c brakuje bufor\u00f3w przewijania wstecz, ale <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/jwilm\/alacritty\/issues\/124\">wkr\u00f3tce zostanie dodana<\/a><\/noindex> jego obs\u0142uga z powodu \u00abobszernej informacji zwrotnej\u00bb na ten temat od u\u017cytkownik\u00f3w. Opr\u00f3cz tych nowo\u015bci ka\u017cdy terminal, kt\u00f3ry uda\u0142o mi si\u0119 znale\u017a\u0107, obs\u0142uguje wsteczne przewijanie.<\/p>\n<h4>Podsumowanie po\u015brednie<\/h4>\n<p>\nW drugiej cz\u0119\u015bci materia\u0142u (<i>w oryginale by\u0142y to dwa r\u00f3\u017cne artyku\u0142y, \u2014 przyp. red.<\/i>) por\u00f3wnamy wydajno\u015b\u0107, zu\u017cycie pami\u0119ci i op\u00f3\u017anienie. Ju\u017c teraz widzimy, \u017ce niekt\u00f3re z omawianych terminali maj\u0105 powa\u017cne wady. Na przyk\u0142ad, u\u017cytkownicy regularnie pracuj\u0105cy z skryptami RTL mog\u0105 zwr\u00f3ci\u0107 uwag\u0119 na mlterm i pterm, poniewa\u017c lepiej radz\u0105 sobie z takimi zadaniami. Konsole r\u00f3wnie\u017c dobrze si\u0119 spisuje. U\u017cytkownicy, kt\u00f3rzy nie pracuj\u0105 z skryptami RTL, mog\u0105 wybra\u0107 co\u015b innego.<\/p>\n<p>Z punktu widzenia ochrony przed wstawianiem z\u0142o\u015bliwego kodu urxvt wyr\u00f3\u017cnia si\u0119 z powodu swojej szczeg\u00f3lnej implementacji ochrony przed tym rodzajem atak\u00f3w, co uwa\u017cam za z pewno\u015bci\u0105 wygodne. Osoby szukaj\u0105ce jakichkolwiek udogodnie\u0144 powinny spojrze\u0107 na Konsole. Na koniec warto zauwa\u017cy\u0107, \u017ce VTE to doskona\u0142a baza dla terminali, kt\u00f3ra gwarantuje wsparcie dla kolor\u00f3w, rozpoznawanie URL itd. Na pierwszy rzut oka domy\u015blny terminal dostarczany z twoim ulubionym \u015brodowiskiem mo\u017ce spe\u0142nia\u0107 wszystkie wymagania, ale pozostawimy to pytanie otwarte, dop\u00f3ki nie przeanalizujemy wydajno\u015bci.<\/p>\n<p><i><\/p>\n<h4>Kontynuujemy rozmow\u0119<\/h4>\n<p><\/i><br \/>\nOg\u00f3lnie wydajno\u015b\u0107 terminali mo\u017ce wydawa\u0107 si\u0119 wymy\u015blonym problemem, jednak jak si\u0119 okaza\u0142o, niekt\u00f3re z nich wykazuj\u0105 zaskakuj\u0105co du\u017c\u0105 latencj\u0119 dla oprogramowania tego podstawowego typu. Dalsze rozwa\u017cania b\u0119d\u0105 dotyczy\u0107 tego, co tradycyjnie nazywa si\u0119 \u201eszybko\u015bci\u0105\u201d (w rzeczywisto\u015bci chodzi o szybko\u015b\u0107 przewijania) oraz zu\u017cycia pami\u0119ci przez terminal (z uwagi na to, \u017ce obecnie nie jest to tak krytyczne jak dziesi\u0119ciolecia temu).<\/p>\n<h4>Op\u00f3\u017anienie<\/h4>\n<p>\nPo dok\u0142adnym zbadaniu wydajno\u015bci terminali doszed\u0142em do wniosku, \u017ce najwa\u017cniejszym parametrem w tej kwestii jest wielko\u015b\u0107 op\u00f3\u017anienia (ping). W swoim artykule <noindex><a rel=\"nofollow\" href=\"https:\/\/pavelfatin.com\/typing-with-pleasure\/\">\u201eDrukujemy z przyjemno\u015bci\u0105\u201c<\/a><\/noindex> Pawe\u0142 Fatin przyjrza\u0142 si\u0119 op\u00f3\u017anieniom r\u00f3\u017cnych edytor\u00f3w tekstu i zasugerowa\u0142, \u017ce terminale w tym wzgl\u0119dzie mog\u0105 dzia\u0142a\u0107 wolniej od najszybszych edytor\u00f3w tekstu. To w\u0142a\u015bnie ta sugestia doprowadzi\u0142a mnie ostatecznie do uruchomienia w\u0142asnych test\u00f3w i napisania tego artyku\u0142u.<\/p>\n<p>Ale czym jest op\u00f3\u017anienie i dlaczego jest tak wa\u017cne? W swoim artykule Fatin zdefiniowa\u0142 je jako \u201eop\u00f3\u017anienie mi\u0119dzy naci\u015bni\u0119ciem klawisza a odpowiednim aktualizowaniem ekranu\u201d i zacytowa\u0142 <noindex><a rel=\"nofollow\" href=\"https:\/\/books.google.com\/books\/about\/Handbook_of_Human_Computer_Interaction.html?id=WuQbERgXR10C&amp;redir_esc=y\">\u201ePodr\u0119cznik interakcji cz\u0142owieka z komputerem\u201d<\/a><\/noindex>, w kt\u00f3rym m\u00f3wi si\u0119: \u201eOp\u00f3\u017anienie w wizualnym sprz\u0119\u017ceniu zwrotnym na ekranie komputera ma istotny wp\u0142yw na zachowanie operatora i jego satysfakcj\u0119\u201d.<\/p>\n<p>Fatin wyja\u015bnia, \u017ce to op\u00f3\u017anienie ma g\u0142\u0119bsze konsekwencje ni\u017c tylko satysfakcja: \u201episanie staje si\u0119 wolniejsze, pojawia si\u0119 wi\u0119cej b\u0142\u0119d\u00f3w, ro\u015bnie napi\u0119cie oczu i mi\u0119\u015bni\u201d. Innymi s\u0142owy, wi\u0119ksze op\u00f3\u017anienie mo\u017ce prowadzi\u0107 do liter\u00f3wek oraz obni\u017cenia jako\u015bci kodu, poniewa\u017c zwi\u0119ksza dodatkowe obci\u0105\u017cenie poznawcze m\u00f3zgu. Ale co gorsza, op\u00f3\u017anienie \u201ezwi\u0119ksza napi\u0119cie oczu i mi\u0119\u015bni\u201d, co najwyra\u017aniej implikuje <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Repetitive_strain_injury\">rozw\u00f3j uraz\u00f3w zawodowych<\/a><\/noindex> w przysz\u0142o\u015bci (<i>najwyra\u017aniej autor ma na my\u015bli problemy z mi\u0119\u015bniami oczu, plecami, r\u0119kami i, oczywi\u015bcie, wzrokiem - przyp. red.<\/i>) spowodowane powtarzaj\u0105cym si\u0119 napi\u0119ciem.<\/p>\n<p>Niekt\u00f3re z tych efekt\u00f3w s\u0105 znane od dawna, a wyniki <noindex><a rel=\"nofollow\" href=\"https:\/\/doi.org\/10.1080\/00140137608931531\">bada\u0144<\/a><\/noindex>, opublikowanego ju\u017c w 1976 roku w czasopi\u015bmie Ergonomics, m\u00f3wi\u0105, \u017ce op\u00f3\u017anienie wynosz\u0105ce 100 milisekund \u201eznacz\u0105co pogarsza pr\u0119dko\u015b\u0107 pisania\u201d. Ca\u0142kiem niedawno w podr\u0119czniku u\u017cytkownika GNOME wprowadzono <noindex><a rel=\"nofollow\" href=\"https:\/\/developer.gnome.org\/hig-book\/3.12\/feedback-response-times.html.en\">akceptowalny czas reakcji<\/a><\/noindex> wynosz\u0105cy 10 milisekund, a je\u015bli chodzi o idea\u0142y, to <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=vOvQCPLkPt4\">Microsoft Research<\/a><\/noindex> pokazuje, \u017ce idea\u0142em jest 1 milisekunda.<\/p>\n<p>Fatin przeprowadzi\u0142 swoje testy na edytorach tekstowych; stworzy\u0142 przeno\u015bne narz\u0119dzie o nazwie <noindex><a rel=\"nofollow\" href=\"https:\/\/pavelfatin.com\/typometer\">Typometer<\/a><\/noindex>, kt\u00f3ry u\u017cywa\u0142em do testowania pingu w emulatorach terminala. Nale\u017cy pami\u0119ta\u0107, \u017ce test by\u0142 przeprowadzany w trybie symulacji: w rzeczywisto\u015bci musimy uwzgl\u0119dni\u0107 r\u00f3wnie\u017c op\u00f3\u017anienie wej\u015bcia (klawiatura, kontroler USB itd.) oraz wyj\u015bcia (bufor karty graficznej, monitor). Wed\u0142ug Fatina w typowych konfiguracjach wynosi ono oko\u0142o 20 ms. Przy u\u017cyciu sprz\u0119tu gamingowego mo\u017cna osi\u0105gn\u0105\u0107 wynik zaledwie 3 milisekund. Poniewa\u017c ju\u017c mamy taki szybki sprz\u0119t, aplikacja nie powinna wprowadza\u0107 dodatkowego op\u00f3\u017anienia. Celem Fatina jest doprowadzenie op\u00f3\u017anienia aplikacji do 1 milisekundy lub wr\u0119cz osi\u0105gni\u0119cie zestawu bez <noindex><a rel=\"nofollow\" href=\"https:\/\/blog.jetbrains.com\/idea\/2015\/08\/experimental-zero-latency-typing-in-intellij-idea-15-eap\/\">mierzalnego op\u00f3\u017anienia<\/a><\/noindex>, jak w <noindex><a rel=\"nofollow\" href=\"https:\/\/confluence.jetbrains.com\/display\/IDEADEV\/IDEA+15+EAP\">IntelliJ IDEA 15<\/a><\/noindex>.<\/p>\n<p>Poni\u017cej wyniki moich pomiar\u00f3w oraz niekt\u00f3re wyniki Fatina, aby pokaza\u0107, \u017ce m\u00f3j eksperyment jest zgodny z jego testami:<\/p>\n<p><img decoding=\"async\" alt=\"Przegl\u0105d emulator\u00f3w terminali\" src=\"\/wp-content\/uploads\/2019\/08\/d7ae46c8309e9cfd517164d5fed093f7.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPierwsz\u0105 rzecz\u0105, kt\u00f3ra mnie zaskoczy\u0142a, jest lepszy czas reakcji w starszych programach, takich jak xterm i mlterm. Przy najgorszym op\u00f3\u017anieniu rejestru (2,4 ms) osi\u0105gn\u0119\u0142y one rezultat lepszy ni\u017c najszybszy nowoczesny terminal (10,6 ms dla st). \u017baden nowoczesny terminal nie spada poni\u017cej progu 10 milisekund. W szczeg\u00f3lno\u015bci Alacritty nie spe\u0142nia wymaga\u0144 \u201enajszybszego z istniej\u0105cych emulator\u00f3w terminala\u201d, chocia\u017c jego wyniki poprawi\u0142y si\u0119 od pierwszej kontroli w 2017 roku. Rzeczywi\u015bcie, autorzy projektu <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/jwilm\/alacritty\/issues\/673\">s\u0105 \u015bwiadomi sytuacji<\/a><\/noindex> i pracuj\u0105 nad popraw\u0105 wydajno\u015bci. Nale\u017cy r\u00f3wnie\u017c zauwa\u017cy\u0107, \u017ce Vim, u\u017cywaj\u0105cy GTK3, jest znacznie wolniejszy od swojego odpowiednika GTK2. Z tego mo\u017cna wywnioskowa\u0107, \u017ce GTK3 wprowadza dodatkowe op\u00f3\u017anienie, a to wp\u0142ywa na wszystkie inne terminale, kt\u00f3re go u\u017cywaj\u0105 (Terminator, Xfce4 Terminal i GNOME Terminal).<\/p>\n<p>Jednak r\u00f3\u017cnice mog\u0105 by\u0107 niewidoczne dla oka. Jak t\u0142umaczy Fatin: \u201eniekoniecznie trzeba by\u0107 \u015bwiadomym op\u00f3\u017anienia, aby mia\u0142o ono na ciebie wp\u0142yw\u201d. Fatin ostrzega r\u00f3wnie\u017c przed odchyleniem standardowym: \u201ejakiekolwiek zak\u0142\u00f3cenia w czasie op\u00f3\u017anienia (drganie) generuj\u0105 dodatkowe obci\u0105\u017cenie z powodu ich nieprzewidywalno\u015bci.\u201d<\/p>\n<p><img decoding=\"async\" alt=\"Przegl\u0105d emulator\u00f3w terminali\" src=\"\/wp-content\/uploads\/2019\/08\/e128a7e6c32a1517c98ffc612fe09128.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nWykres powy\u017cej zosta\u0142 uzyskany na czystym Debianie 9 (stretch) z <noindex><a rel=\"nofollow\" href=\"https:\/\/i3wm.org\/\">mened\u017cerem okien i3<\/a><\/noindex>To \u015brodowisko zapewnia najlepsze wyniki w testach op\u00f3\u017anienia. Okaza\u0142o si\u0119, \u017ce GNOME generuje dodatkowe op\u00f3\u017anienie wynosz\u0105ce 20 ms we wszystkich pomiarach. Mo\u017cliwe wyja\u015bnienie tego to obecno\u015b\u0107 program\u00f3w z synchronicznym przetwarzaniem zdarze\u0144 wej\u015bciowych. Fatin przywo\u0142uje taki przypadek jako przyk\u0142ad <noindex><a rel=\"nofollow\" href=\"http:\/\/www.workrave.org\/\">Workrave<\/a><\/noindex>, kt\u00f3ry dodaje op\u00f3\u017anienie, przetwarzaj\u0105c wszystkie zdarzenia wej\u015bciowe synchronicznie. Domy\u015blnie GNOME wyposa\u017cony jest tak\u017ce w mened\u017cera okien <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Mutter_(software)\">Mutter<\/a><\/noindex>, kt\u00f3ry tworzy dodatkowy poziom buforowania, co wp\u0142ywa na ping i dodaje co najmniej 8 milisekund op\u00f3\u017anienia.<\/p>\n<p><img decoding=\"async\" alt=\"Przegl\u0105d emulator\u00f3w terminali\" src=\"\/wp-content\/uploads\/2019\/08\/3585d1edf4cee214d7a53858943b1845.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h4>Szybko\u015b\u0107 przewijania<\/h4>\n<p>\nNast\u0119pnym testem jest tradycyjna kontrola \u00bbszybko\u015bci\u00ab lub \u00bbprzepustowo\u015bci\u00ab, kt\u00f3ra mierzy, jak szybko terminal mo\u017ce przewija\u0107 stron\u0119, wy\u015bwietlaj\u0105c du\u017c\u0105 ilo\u015b\u0107 tekstu na ekranie. Mechanika testu r\u00f3\u017cni si\u0119; oryginalny test polega\u0142 na prostym generowaniu tej samej linii tekstu za pomoc\u0105 polecenia seq. Inne testy obejmuj\u0105 sprawdzenie Thomasa E. Dicka (towarzysz\u0105cego xterm), w ramach kt\u00f3rego wielokrotnie <noindex><a rel=\"nofollow\" href=\"https:\/\/invisible-island.net\/xterm\/xterm.faq.html#scroll_speed\">zrzucany jest plik terminfo.src<\/a><\/noindex>. W jeszcze jednym przegl\u0105dzie wydajno\u015bci terminali <noindex><a rel=\"nofollow\" href=\"https:\/\/danluu.com\/term-latency\/\">Den Liu<\/a><\/noindex> u\u017cywa ci\u0105gu losowych bajt\u00f3w w kodowaniu base32, kt\u00f3ry jest wy\u015bwietlany w terminalu za pomoc\u0105 cat. Liu uwa\u017ca ten test za \u00bbtak bezu\u017cyteczny wzorzec, jak to tylko mo\u017cliwe\u00ab i proponuje zamiast tego u\u017cy\u0107 reakcji terminala jako g\u0142\u00f3wnego wska\u017anika. Dick r\u00f3wnie\u017c okre\u015bla sw\u00f3j test jako wprowadzaj\u0105cy w b\u0142\u0105d. Niemniej jednak obaj autorzy przyznaj\u0105, \u017ce przepustowo\u015b\u0107 okna terminala mo\u017ce by\u0107 problemem. Liu odkry\u0142 zawieszanie si\u0119 Emacs Eshell przy wy\u015bwietlaniu du\u017cych plik\u00f3w, a Dick zoptymalizowa\u0142 terminal, aby pozby\u0107 si\u0119 wizualnego op\u00f3\u017anienia xterm. Dlatego ten test ma jeszcze pewien sens, ale poniewa\u017c proces renderowania znacznie r\u00f3\u017cni si\u0119 w zale\u017cno\u015bci od terminala, mo\u017cna go wykorzysta\u0107 r\u00f3wnie\u017c jako komponent testowy do sprawdzania innych parametr\u00f3w.<\/p>\n<p><img decoding=\"async\" alt=\"Przegl\u0105d emulator\u00f3w terminali\" src=\"\/wp-content\/uploads\/2019\/08\/3231877fdcd7725c3248fb393185ece4.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTutaj widzimy, \u017ce rxvt i st przoduj\u0105 w\u015br\u00f3d konkurencji, a za nimi plasuje si\u0119 znacznie nowszy Alacritty, opracowywany z my\u015bl\u0105 o wydajno\u015bci. Dalej s\u0105 Xfce (rodzina VTE) i Konsole, kt\u00f3re dzia\u0142aj\u0105 prawie dwa razy szybciej. Na ko\u0144cu jest xterm, kt\u00f3ry jest pi\u0119\u0107 razy wolniejszy ni\u017c rxvt. W trakcie testu xterm cz\u0119sto miga\u0142, a przechodz\u0105cy tekst by\u0142 trudny do dostrze\u017cenia, nawet je\u015bli chodzi\u0142o o t\u0119 sam\u0105 lini\u0119. Konsole okaza\u0142 si\u0119 szybki, ale czasami \u201eoszukiwa\u0142\u201d: wy\u015bwietlacz od czasu do czasu zawiesza\u0142 si\u0119, pokazuj\u0105c tekst cz\u0119\u015bciowo lub w og\u00f3le go nie wy\u015bwietlaj\u0105c. Inne terminale wy\u015bwietla\u0142y linie wyra\u017anie, w tym st, Alacritty i rxvt.<\/p>\n<p>Diki wyja\u015bnia, \u017ce r\u00f3\u017cnice w wydajno\u015bci s\u0105 zwi\u0105zane z projektowaniem bufor\u00f3w przewijania w r\u00f3\u017cnych terminalach. W szczeg\u00f3lno\u015bci obwinia rxvt i inne terminale o to, \u017ce \u201enie przestrzegaj\u0105 og\u00f3lnych zasad\u201d:<\/p>\n<blockquote><p>\u201eW przeciwie\u0144stwie do xterm, rxvt nie pr\u00f3bowa\u0142 wy\u015bwietli\u0107 wszystkich aktualizacji. Je\u015bli si\u0119 sp\u00f3\u017ania\u0142, rezygnowa\u0142 z niekt\u00f3rych aktualizacji, aby nadrobi\u0107 zaleg\u0142o\u015bci. Mia\u0142o to wi\u0119kszy wp\u0142yw na pozorn\u0105 szybko\u015b\u0107 przewijania, ni\u017c na organizacj\u0119 pami\u0119ci wewn\u0119trznej. Jedn\u0105 z wad by\u0142o to, \u017ce animacja ASCII by\u0142a nieco niedok\u0142adna\u201d.<\/p><\/blockquote>\n<p>\nAby naprawi\u0107 t\u0119 pozorn\u0105 wolno\u015b\u0107 xterm, Diki sugeruje u\u017cycie zasobu <noindex><a rel=\"nofollow\" href=\"https:\/\/invisible-island.net\/xterm\/manpage\/xterm.html#VT100-Widget-Resources:fastScroll\">fastScroll<\/a><\/noindex>, kt\u00f3ry pozwala xterm na pomijanie niekt\u00f3rych aktualizacji ekranu, aby nie pozostawa\u0142 w tyle za strumieniem. Moje testy potwierdzaj\u0105, \u017ce fastScroll zwi\u0119ksza wydajno\u015b\u0107 i sprawia, \u017ce xterm osi\u0105ga poziom z rxvt. Jest to jednak do\u015b\u0107 prymitywne obej\u015bcie, jak sam wyja\u015bnia Diki: \u201eczasami xterm \u2014 podobnie jak konsole \u2014 wydaje si\u0119 zatrzymywa\u0107, poniewa\u017c czeka na nowy zestaw aktualizacji ekranu po tym, jak niekt\u00f3re z nich zosta\u0142y usuni\u0119te\u201d. W tym kontek\u015bcie wydaje si\u0119, \u017ce inne terminale znalaz\u0142y najlepszy kompromis mi\u0119dzy szybko\u015bci\u0105 a integralno\u015bci\u0105 wy\u015bwietlania.<\/p>\n<h4>Zu\u017cycie zasob\u00f3w<\/h4>\n<p>\nBez wzgl\u0119du na to, na ile sensowne jest rozwa\u017canie pr\u0119dko\u015bci przewijania jako wska\u017anika wydajno\u015bci, ten test pozwala na symulacj\u0119 obci\u0105\u017cenia terminali, co z kolei pozwala nam mierzy\u0107 inne parametry, takie jak wykorzystanie pami\u0119ci lub dysku. Metryki uzyskano poprzez uruchomienie podanego testu <b>seq<\/b> pod monitorowaniem procesu Python. Zbiera\u0142 dane licznik\u00f3w <noindex><a rel=\"nofollow\" href=\"http:\/\/man7.org\/linux\/man-pages\/man2\/getrusage.2.html\">getrusage ()<\/a><\/noindex> do <b>ru_maxrss<\/b>, sumy <b>ru_oublock<\/b> i <b>ru_inblock<\/b> i prosty timer czasu.<\/p>\n<p><img decoding=\"async\" alt=\"Przegl\u0105d emulator\u00f3w terminali\" src=\"\/wp-content\/uploads\/2019\/08\/df378c145a559ed4aad98fa70b58c72c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nW te\u015bcie ST zajmuje pierwsze miejsce z najmniejszym \u015brednim zu\u017cyciem pami\u0119ci wynosz\u0105cym 8 MB, co nie jest zaskakuj\u0105ce, bior\u0105c pod uwag\u0119, \u017ce g\u0142\u00f3wn\u0105 ide\u0105 projektu jest prostota. Nieco wi\u0119cej pami\u0119ci konsumuj\u0105 mlterm, xterm i rxvt - oko\u0142o 12 MB. Kolejnym znacz\u0105cym wynikiem jest Alacritty, kt\u00f3ry do dzia\u0142ania potrzebuje 30 MB. Nast\u0119pnie s\u0105 terminale z rodziny VTE z wynikami od 40 do 60 MB, co jest stosunkowo du\u017co. Takie zu\u017cycie mo\u017cna wyja\u015bni\u0107 tym, \u017ce te terminale korzystaj\u0105 z bibliotek wy\u017cszego poziomu, takich jak GTK. Konsole zajmuje ostatnie miejsce z gigantycznym zu\u017cyciem 65 MB pami\u0119ci podczas test\u00f3w, cho\u0107 mo\u017cna to usprawiedliwi\u0107 jej bardzo szerokim zestawem funkcji.<\/p>\n<p>W por\u00f3wnaniu do wcze\u015bniejszych wynik\u00f3w uzyskanych dziesi\u0119\u0107 lat temu, wszystkie programy zacz\u0119\u0142y zu\u017cywa\u0107 zauwa\u017calnie wi\u0119cej pami\u0119ci. Kiedy\u015b Xterm wymaga\u0142 4 MB, a teraz - 15 MB tylko na uruchomienie. Podobny wzrost zu\u017cycia odnotowano w przypadku rxvt, kt\u00f3ry teraz z pude\u0142ka wymaga 16 MB. Terminal Xfce zajmuje 34 MB, co jest trzy razy wi\u0119cej ni\u017c wcze\u015bniej, natomiast GNOME Terminal wymaga tylko 20 MB. Oczywi\u015bcie, wszystkie poprzednie testy przeprowadzano na architekturze 32-bitowej. Na LCA 2012 Rasty Russell <noindex><a rel=\"nofollow\" href=\"https:\/\/lwn.net\/Articles\/477155\/\">opowiedzia\u0142<\/a><\/noindex>, \u017ce istnieje wiele bardziej subtelnych przyczyn, kt\u00f3re mog\u0105 wyja\u015bni\u0107 wzrost zu\u017cycia pami\u0119ci. Mimo to \u017cyjemy w czasach, gdy mamy ca\u0142e gigabajty pami\u0119ci, wi\u0119c jako\u015b sobie poradzimy.<\/p>\n<p>Niemniej jednak nie mog\u0119 si\u0119 pozby\u0107 wra\u017cenia, \u017ce przydzielenie wi\u0119kszej ilo\u015bci pami\u0119ci tak podstawowemu oprogramowaniu, jak terminal, to marnotrawstwo zasob\u00f3w. Te programy powinny by\u0107 najmniejsze z najmniejszych, powinny by\u0107 w stanie dzia\u0142a\u0107 na ka\u017cdej \u201epude\u0142ku\u201d, nawet na obuwiu, je\u015bli kiedykolwiek dojdziemy do tego, \u017ce b\u0119d\u0105 musia\u0142y by\u0107 wyposa\u017cone w systemy Linux (a wiecie, \u017ce tak b\u0119dzie). Ale przy tych liczbach u\u017cycie pami\u0119ci stanie si\u0119 w przysz\u0142o\u015bci problemem w ka\u017cdej okolicy przy uruchamianiu kilku terminali, poza sytuacj\u0105, w kt\u00f3rej b\u0119d\u0105 tylko kilka najl\u017cejszych i ograniczonych w mo\u017cliwo\u015bci. Aby to zrekompensowa\u0107, GNOME Terminal, Konsole, urxvt, Terminator i Xfce Terminal maj\u0105 tryb Daemon, kt\u00f3ry pozwala zarz\u0105dza\u0107 wieloma terminalami za pomoc\u0105 jednego procesu, co ogranicza ich zu\u017cycie pami\u0119ci.<\/p>\n<p><img decoding=\"async\" alt=\"Przegl\u0105d emulator\u00f3w terminali\" src=\"\/wp-content\/uploads\/2019\/08\/65ade9cc81284f24f0c44322eec73ef0.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPodczas swoich test\u00f3w doszed\u0142em do kolejnego zaskakuj\u0105cego wniosku dotycz\u0105cego odczytu i zapisu na dysku: spodziewa\u0142em si\u0119, \u017ce nie zobacz\u0119 tutaj zupe\u0142nie nic, ale okaza\u0142o si\u0119, \u017ce niekt\u00f3re terminale zapisuj\u0105 na dysku najwi\u0119ksze dane. Biblioteka VTE faktycznie przechowuje na dysku bufor przewijania (ta cecha <noindex><a rel=\"nofollow\" href=\"https:\/\/bugzilla.gnome.org\/show_bug.cgi?id=631685\">zosta\u0142a dostrze\u017cona ju\u017c w 2010 roku<\/a><\/noindex>, i trwa to do dzi\u015b). Jednak w przeciwie\u0144stwie do wcze\u015bniejszych implementacji, obecnie przynajmniej te dane s\u0105 szyfrowane przy u\u017cyciu AES256 GCM (<noindex><a rel=\"nofollow\" href=\"https:\/\/bugzilla.gnome.org\/show_bug.cgi?id=664611#c48\">od wersji 0.39.2<\/a><\/noindex>). Ale rodzi si\u0119 uzasadnione pytanie, co takiego wyj\u0105tkowego w bibliotece VTE, \u017ce wymaga ona tak niestandardowego podej\u015bcia do implementacji\u2026<\/p>\n<h4>Podsumowanie<\/h4>\n<p>\nW pierwszej cz\u0119\u015bci artyku\u0142u odkryli\u015bmy, \u017ce terminale oparte na VTE maj\u0105 dobry zestaw funkcji, ale teraz widzimy, \u017ce wi\u0105\u017ce si\u0119 to z pewnymi kosztami zapewnienia ich wydajno\u015bci. Obecnie pami\u0119\u0107 nie jest problemem, poniewa\u017c wszystkie terminale VTE mo\u017cna zarz\u0105dza\u0107 przez proces Daemon, kt\u00f3ry ogranicza ich apetyt. Niemniej jednak starsze systemy, maj\u0105ce fizyczne ograniczenia dotycz\u0105ce ilo\u015bci pami\u0119ci RAM i bufora j\u0105dra, mog\u0105 wci\u0105\u017c potrzebowa\u0107 wcze\u015bniejszych wersji terminali, poniewa\u017c zu\u017cywaj\u0105 znacznie mniej zasob\u00f3w. Chocia\u017c terminale VTE dobrze spisa\u0142y si\u0119 w testach przepustowo\u015bci (przewijanie), ich op\u00f3\u017anienie wy\u015bwietlania danych na ekranie przekracza ustalony pr\u00f3g w podr\u0119czniku u\u017cytkownika GNOME. Prawdopodobnie deweloperzy VTE powinni to uwzgl\u0119dni\u0107. Bior\u0105c pod uwag\u0119, \u017ce nawet dla pocz\u0105tkuj\u0105cych u\u017cytkownik\u00f3w Linuxa spotkanie z terminalem jest nieuniknione, mog\u0105 uczyni\u0107 go bardziej przyjaznym dla u\u017cytkownika. Dla do\u015bwiadczonych zapale\u0144c\u00f3w przej\u015bcie z domy\u015blnego terminala mo\u017ce oznacza\u0107 nawet zmniejszenie obci\u0105\u017cenia wzroku i mo\u017cliwo\u015b\u0107 unikni\u0119cia zawodowych uraz\u00f3w i chor\u00f3b w przysz\u0142o\u015bci z powodu d\u0142ugotrwa\u0142ych sesji pracy. Niestety, tylko stare xterm i mlterm prowadz\u0105 nas do magicznego progu pingu wynosz\u0105cego 10 milisekund, co dla wielu jest nie do przyj\u0119cia.<\/p>\n<p>Pomiar kontrolny r\u00f3wnie\u017c wykaza\u0142, \u017ce w wyniku rozwoju graficznych \u015brodowisk Linux programi\u015bci musieli p\u00f3j\u015b\u0107 na szereg kompromis\u00f3w. Niekt\u00f3rzy u\u017cytkownicy powinni spojrze\u0107 na klasyczne mened\u017cery okien, poniewa\u017c zapewniaj\u0105 one znaczne obni\u017cenie op\u00f3\u017anienia. Niestety, nie uda\u0142o si\u0119 zmierzy\u0107 op\u00f3\u017anienia w Waylandzie: program Typometer, kt\u00f3rego u\u017cywa\u0142em, zosta\u0142 stworzony po to, aby to, co Wayland mia\u0142 zapobiega\u0107 - szpiegostwu za innymi oknami. Mam nadziej\u0119, \u017ce kompozycja w Waylandzie b\u0119dzie lepsza wydajno\u015bciowo ni\u017c w X.org, a tak\u017ce mam nadziej\u0119, \u017ce w przysz\u0142o\u015bci kto\u015b znajdzie spos\u00f3b, aby oceni\u0107 poziom op\u00f3\u017anienia w tym \u015brodowisku.<br \/>\n<br \/>\u0179r\u00f3d\u0142o: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/itsumma\/blog\/463785\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0430\u0440\u0430 \u0441\u043b\u043e\u0432 \u043e\u0442 \u043d\u0430\u0448\u0435\u0433\u043e translate-\u0431\u044e\u0440\u043e: \u043e\u0431\u044b\u0447\u043d\u043e \u0432\u0441\u0435 \u0441\u0442\u0440\u0435\u043c\u044f\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u0442\u044c \u0441\u0430\u043c\u044b\u0435 \u0441\u0432\u0435\u0436\u0438\u0435 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b \u0438 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438, \u0438 \u043c\u044b \u043d\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435. \u041d\u043e \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044b \u2014 \u044d\u0442\u043e \u043d\u0435 \u0442\u043e, \u0447\u0442\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0440\u0430\u0437 \u0432 \u043d\u0435\u0434\u0435\u043b\u044e. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u043f\u0435\u0440\u0435\u0432\u0435\u043b\u0438 \u0434\u043b\u044f \u0432\u0430\u0441 \u0441\u0442\u0430\u0442\u044c\u044e \u0410\u043d\u0442\u0443\u0430\u043d\u0430 \u0411\u043e\u043f\u0440\u0435, \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u0432\u0435\u0441\u043d\u043e\u0439 2018 \u0433\u043e\u0434\u0430: \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0441\u043e\u043b\u0438\u0434\u043d\u044b\u0439 \u043f\u043e \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c \u043c\u0435\u0440\u043a\u0430\u043c \u00ab\u0432\u043e\u0437\u0440\u0430\u0441\u0442\u00bb, \u043d\u0430 \u043d\u0430\u0448 \u0432\u0437\u0433\u043b\u044f\u0434, \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043d\u0435 \u043f\u043e\u0442\u0435\u0440\u044f\u043b [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":27911,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-37222","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0430\u0440\u0430 \u0441\u043b\u043e\u0432 \u043e\u0442 \u043d\u0430\u0448\u0435\u0433\u043e translate-\u0431\u044e\u0440\u043e: \u043e\u0431\u044b\u0447\u043d\u043e \u0432\u0441\u0435 \u0441\u0442\u0440\u0435\u043c\u044f\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u0442\u044c \u0441\u0430\u043c\u044b\u0435 \u0441\u0432\u0435\u0436\u0438\u0435 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b \u0438 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438, \u0438 \u043c\u044b \u043d\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435. \u041d\u043e \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044b \u2014 \u044d\u0442\u043e \u043d\u0435 \u0442\u043e, \u0447\u0442\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0440\u0430\u0437 \u0432 \u043d\u0435\u0434\u0435\u043b\u044e.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/obzor-emulyatorov-terminala\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"pl_PL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041e\u0431\u0437\u043e\u0440 \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u043e\u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0430\u0440\u0430 \u0441\u043b\u043e\u0432 \u043e\u0442 \u043d\u0430\u0448\u0435\u0433\u043e translate-\u0431\u044e\u0440\u043e: \u043e\u0431\u044b\u0447\u043d\u043e \u0432\u0441\u0435 \u0441\u0442\u0440\u0435\u043c\u044f\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u0442\u044c \u0441\u0430\u043c\u044b\u0435 \u0441\u0432\u0435\u0436\u0438\u0435 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b \u0438 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438, \u0438 \u043c\u044b \u043d\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435. \u041d\u043e \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044b \u2014 \u044d\u0442\u043e \u043d\u0435 \u0442\u043e, \u0447\u0442\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0440\u0430\u0437 \u0432 \u043d\u0435\u0434\u0435\u043b\u044e.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/obzor-emulyatorov-terminala\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:16:26+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:16:26+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Przegl\u0105d emulator\u00f3w terminala | ProHoster","description":"Kilka s\u0142\u00f3w od naszego biura t\u0142umacze\u0144: zazwyczaj wszyscy d\u0105\u017c\u0105 do t\u0142umaczenia najnowszych materia\u0142\u00f3w i publikacji, i my nie jeste\u015bmy wyj\u0105tkiem. Jednak terminale to nie to, co aktualizuje si\u0119 co tydzie\u0144.","canonical_url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/obzor-emulyatorov-terminala","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pl_PL","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041e\u0431\u0437\u043e\u0440 \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u043e\u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430 | ProHoster","og:description":"\u041f\u0430\u0440\u0430 \u0441\u043b\u043e\u0432 \u043e\u0442 \u043d\u0430\u0448\u0435\u0433\u043e translate-\u0431\u044e\u0440\u043e: \u043e\u0431\u044b\u0447\u043d\u043e \u0432\u0441\u0435 \u0441\u0442\u0440\u0435\u043c\u044f\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u0442\u044c \u0441\u0430\u043c\u044b\u0435 \u0441\u0432\u0435\u0436\u0438\u0435 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b \u0438 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438, \u0438 \u043c\u044b \u043d\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435. \u041d\u043e \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044b \u2014 \u044d\u0442\u043e \u043d\u0435 \u0442\u043e, \u0447\u0442\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0440\u0430\u0437 \u0432 \u043d\u0435\u0434\u0435\u043b\u044e.","og:url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/obzor-emulyatorov-terminala","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:16:26+00:00","article:modified_time":"2019-10-31T19:16:26+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"37222","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-23 16:48:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:31:24","updated":"2026-01-23 16:48:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/37222","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/comments?post=37222"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/37222\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media\/27911"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=37222"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=37222"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=37222"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}