Txheej txheem cej luam ntawm terminal emulators

Ob peb lo lus los ntawm peb lub chaw ua haujlwm txhais lus: feem ntau txhua tus siv zog los txhais cov ntaub ntawv tshiab thiab tshaj tawm, thiab peb tsis muaj kev zam. Tab sis terminals tsis yog ib yam dab tsi uas hloov kho ib zaug ib lub lim tiam. Yog li ntawd, peb tau txhais rau koj ib tsab xov xwm los ntawm Antoine BeauprΓ©, luam tawm nyob rau hauv lub caij nplooj ntoos hlav ntawm 2018: txawm nws "hnub nyoog" ntau npaum li cas los ntawm niaj hnub qauv, nyob rau hauv peb lub tswv yim, cov ntaub ntawv tsis tau poob nws qhov tseeb. Tsis tas li ntawd, qhov no yog Ameslikas ntawm ob kab lus, tab sis peb tau txiav txim siab los muab lawv ua ib qho loj tshaj.

Txheej txheem cej luam ntawm terminal emulators

Terminals muaj ib qho chaw tshwj xeeb hauv computer keeb kwm, tab sis nyob rau hauv xyoo tsis ntev los no lawv tau raug yuam kom muaj sia nyob nrog rau cov kab hais kom ua raws li graphical interfaces dhau los. Terminal emulators hloov lawv tus kheej hardware cov kwv tij, uas, nyob rau hauv lem, yog ib tug kev hloov kho ntawm lub tshuab raws li punched phaib thiab toggle keyboards. Kev faib tawm niaj hnub tuaj nrog ntau yam ntawm cov davhlau ya nyob twg emulators ntawm txhua daim duab thiab xim. Thiab thaum muaj coob tus neeg muaj cov ntsiab lus nrog tus qauv davhlau ya nyob twg muab los ntawm lawv qhov chaw ua haujlwm, qee tus tau zoo siab siv cov software txawv txawv los khiav lawv lub plhaub nyiam lossis cov ntawv nyeem. Tab sis, raws li peb yuav pom los ntawm tsab xov xwm no, tsis yog txhua lub terminals tau tsim nyob rau hauv tib daim duab: lawv txawv heev nyob rau hauv functionality, loj thiab kev ua tau zoo.

Qee lub terminals muaj qhov tsis txaus ntseeg qhov kev ruaj ntseg, ntxiv rau feem ntau muaj cov haujlwm sib txawv kiag li, los ntawm kev txhawb nqa rau tabbed interface mus rau scripting. Txawm tias peb ntsia lub davhlau ya nyob twg emulators yav dhau los, Kab lus no yog qhov hloov tshiab ntawm cov ntaub ntawv dhau los uas yuav pab cov neeg nyeem txiav txim siab seb lub davhlau ya nyob twg siv rau xyoo 2018. Thawj ib nrab ntawm tsab xov xwm sib piv cov yam ntxwv, thiab ib nrab thib ob ntsuas kev ua tau zoo.

Nov yog cov terminals uas kuv tau tshuaj xyuas:

Txheej txheem cej luam ntawm terminal emulators

Cov no yuav tsis yog qhov tseeb versions, txij li kuv tau txwv rau kev tsim kho ruaj khov thaum lub sijhawm sau ntawv, uas kuv tuaj yeem dov tawm ntawm Debian 9 lossis Fedora 27. Qhov tsuas yog qhov tshwj xeeb yog Alacritty. Nws yog ib tug xeeb leej xeeb ntxwv ntawm GPU-accelerated terminals thiab sau nyob rau hauv ib tug txawv txawv thiab tshiab hom lus rau txoj hauj lwm no - Rust. Kuv tsis suav nrog lub vev xaib los ntawm kuv qhov kev tshuaj xyuas (nrog rau cov nyob rau Electron), vim tias qhov kev sim ua ntej tau pom tias lawv qhov kev ua haujlwm tsis zoo heev.

Kev them nyiaj yug Unicode

Kuv pib kuv qhov kev xeem nrog kev txhawb nqa Unicode. Thawj qhov kev sim ntawm cov terminals yog los tso saib cov hlua Unicode los ntawm Wikipedia cov lus: "Γ©, Ξ”, И, OC, Ω…, XNUMX, あ, 叢, 葉 and 말." Qhov kev sim yooj yim no qhia tau hais tias lub davhlau ya nyob twg tuaj yeem ua haujlwm raug thoob ntiaj teb. xterm davhlau ya nyob twg tsis pom cov cim Arabic nco nyob rau hauv default configuration:

Txheej txheem cej luam ntawm terminal emulators

Los ntawm lub neej ntawd, xterm siv cov classic "taw" font, uas, raws li tseem yog Vicky tib yam, muaj "kev pabcuam Unicode ntau heev txij li xyoo 1997". Muaj ib yam dab tsi tshwm sim hauv daim ntawv no uas ua rau tus cwj pwm tshwm sim raws li tus ncej dawb huv thiab nws tsuas yog thaum cov ntawv nyeem tau nce mus rau 20+ cov ntsiab lus uas tus cwj pwm thaum kawg pib ua kom raug. Txawm li cas los xij, qhov "kho" no cuam tshuam cov zaub ntawm lwm cov cim Unicode:

Txheej txheem cej luam ntawm terminal emulators

Cov screenshots no tau raug coj mus rau hauv Fedora 27, vim nws tau muab cov txiaj ntsig zoo dua li Debian 9, qhov twg qee qhov qub versions ntawm terminals (tshwj xeeb mlterm) tsis tuaj yeem ua cov ntawv sau kom raug. Luckily qhov no tau kho nyob rau tom qab versions.

Tam sim no pom yuav ua li cas cov kab tau tshwm sim hauv xterm. Nws hloov tawm hais tias lub cim Mem thiab cov nram qab no Semitic qog xa mus rau RTL style scripts (txoj cai-rau-sab laug), yog li technically lawv yuav tsum tau tso tawm los ntawm sab xis mus rau sab laug. Web browsers xws li Firefox 57 lis cov kab saum toj no kom raug. Ib qho yooj yim version ntawm RTL ntawv nyeem yog lo lus "Sarah" hauv Hebrew (kev). Wiki nplooj ntawv ntawm cov ntawv bidirectional hais li no:

β€œMuaj ntau lub khoos phis tawj khoos phis tawj tsis tuaj yeem tso cov ntawv nyeem bidirectional kom raug. Piv txwv li, lub npe Hebrew "Sarah" muaj cov cim kev txhaum (sh) (uas tshwm nyob rau sab xis), ces resh ( r ) thiab thaum kawg nws (ha) (uas yuav tsum tshwm rau sab laug).

Ntau lub davhlau ya nyob twg ua tsis tiav qhov kev xeem no: Alacritty, VTE-derived Gnome thiab XFCE terminals, urxvt, st thiab xterm zaub "Sara" nyob rau hauv qhov kev txiav txim rov qab, zoo li peb tau sau lub npe li "Aras".

Txheej txheem cej luam ntawm terminal emulators

Lwm qhov teeb meem nrog cov ntawv bidirectional yog tias lawv yuav tsum tau ua raws li qee qhov, tshwj xeeb tshaj yog thaum nws los txog rau kev sib xyaw RTL thiab LTR cov ntawv. RTL scripts yuav tsum khiav ntawm sab xis ntawm lub qhov rais davhlau ya nyob twg, tab sis yuav ua li cas tshwm sim rau terminals uas ua rau LTR lus Askiv? Lawv feem ntau tsis muaj cov txheej txheem tshwj xeeb thiab ua kom tag nrho cov ntawv nyeem rau sab laug (xws li hauv Konsole). Cov kev zam yog pterm thiab mlterm, uas ua raws li cov qauv thiab txoj cai-hloov cov kab no.

Txheej txheem cej luam ntawm terminal emulators

Insertion tiv thaiv

Cov yam ntxwv tseem ceeb tom ntej uas kuv tau txheeb xyuas yog kev tiv thaiv kev ntxig ntxig. Txawm hais tias nws yog dav paub tias spells zoo li:

$ curl http://example.com/ | sh

yog cov lej ua haujlwm thawb cov lus txib, ob peb tus neeg paub tias cov lus txib zais tuaj yeem nkag mus rau hauv lub console thaum luam thiab luam tawm los ntawm lub vev xaib browser, txawm tias tom qab ua tib zoo tshuaj xyuas. Tshawb xyuas qhov chaw Gianna Horna brilliantly qhia li cas innocuous-saib cov lus txib yog:

git clone git: //git.kernel.org/pub/scm/utils/kup/kup.git

hloov mus rau hauv xws li kev ntxhov siab thaum muab los ntawm Horn lub vev xaib mus rau hauv lub davhlau ya nyob twg:

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

Nws ua haujlwm li cas? Malicious code muaj nyob rau hauv lub block , uas tau tsiv tawm ntawm tus neeg siv kev pom siv CSS.

Bracketed paste hom yog kom meej meej tsim los neutralize xws li tawm tsam. Hauv hom no, terminals muab cov ntawv sau rau hauv ib khub ntawm kev khiav tawm tshwj xeeb los qhia lub plhaub txog keeb kwm ntawm cov ntawv nyeem. Qhov no qhia lub plhaub tias nws tuaj yeem tsis quav ntsej cov cim tshwj xeeb uas cov ntawv sau yuav muaj. Tag nrho cov terminals rov qab mus rau venerable xterm txhawb qhov no, tab sis pasting nyob rau hauv Bracketed hom yuav tsum tau kev txhawb los ntawm lub plhaub los yog daim ntawv thov khiav ntawm lub davhlau ya nyob twg. Piv txwv li, siv software GNU Readline (tib yam Bash), xav tau ib cov ntaub ntawv ~/.inputrc:

set enable-bracketed-paste on

Hmoov tsis zoo, Horn qhov chaw sim kuj qhia tau hais tias yuav ua li cas hla qhov kev tiv thaiv no los ntawm cov ntawv sau nws tus kheej thiab ua ntej pib siv Bracketed hom rau nws. Qhov no ua haujlwm vim tias qee qhov terminals tsis raug lim kev khiav tawm ua ntej ntxiv lawv tus kheej. Piv txwv li, hauv kuv tus kheej kuv yeej tsis muaj peev xwm ua tiav cov kev ntsuam xyuas Konsole txawm tias muaj qhov raug teeb tsa .inputrc ntaub ntawv. Qhov no txhais tau hais tias koj tuaj yeem yooj yim tau txais koj qhov system configuration corrupted vim ib daim ntawv thov unsupported los yog ib tug incorrectly configured plhaub. Qhov no yog qhov txaus ntshai tshwj xeeb tshaj yog thaum nkag mus rau hauv cov chaw taws teeb servers, qhov chaw ua haujlwm ceev faj tsis tshua muaj tshwm sim, tshwj xeeb tshaj yog tias koj muaj ntau lub tshuab tej thaj chaw deb.

Ib qho kev daws teeb meem zoo rau qhov teeb meem no yog paste paub meej plugin rau lub davhlau ya nyob twg urxvt ua, uas tsuas yog thov kev tso cai los ntxig cov ntawv uas muaj cov kab tshiab. Kuv tsis tau pom qhov kev xaiv ruaj ntseg dua rau cov ntawv nyeem tau piav qhia los ntawm Horn.

Tabs thiab profiles

Ib tug nrov feature tam sim no yog kev txhawb nqa rau ib tug tabbed interface, uas peb yuav txhais raws li ib tug davhlau ya nyob twg qhov rais uas muaj ob peb lwm terminals. Qhov kev ua haujlwm no txawv rau cov terminals sib txawv, thiab txawm hais tias ib txwm siv xterm terminals tsis txhawb tabs txhua, ntau lub davhlau ya nyob twg incarnations xws li Xfce Terminal, GNOME Terminal thiab Konsole muaj txoj haujlwm no. Urxvt kuj txhawb tab, tab sis tsuas yog tias koj siv lub plugin. Tab sis nyob rau hauv cov nqe lus ntawm tab kev txhawb nqa nws tus kheej, Terminator yog tus thawj coj tsis muaj kev sib cav: nws tsis tsuas yog txhawb nqa tab, tab sis kuj tuaj yeem npaj cov terminals hauv ib qho kev txiav txim (saib duab hauv qab).

Txheej txheem cej luam ntawm terminal emulators

Lwm qhov tshwj xeeb ntawm Terminator yog lub peev xwm los "pab" cov tab no ua ke thiab xa tib lub keystrokes rau ntau lub terminals tib lub sijhawm, muab cov cuab yeej siv tsis zoo rau kev ua haujlwm ntau ntawm ntau lub servers ib txhij. Ib qho zoo sib xws kuj tseem siv tau hauv Konsole. Txhawm rau siv qhov tshwj xeeb no hauv lwm lub terminals, koj yuav tsum siv cov software thib peb xws li Pawg SSH, xlax los yog Tmux.

Tabs ua haujlwm zoo tshwj xeeb tshaj yog thaum ua ke nrog cov profiles: piv txwv li, koj tuaj yeem muaj ib lub tab rau email, lwm qhov rau kev sib tham, thiab lwm yam. Qhov no tau txais kev txhawb nqa zoo los ntawm Konsole Terminal thiab GNOME Terminal. Ob leeg tso cai rau txhua lub tab kom tso nws tus kheej profile. Terminator kuj txhawb nqa cov profiles, tab sis kuv nrhiav tsis tau ib txoj hauv kev kom tau txais qee qhov kev pab cuam thaum koj qhib ib lub tab. Lwm cov terminals tsis muaj lub tswv yim ntawm "profile" txhua.

Ruffles

Qhov kawg uas kuv yuav npog hauv thawj ntu ntawm tsab xov xwm no yog cov tsos ntawm cov terminals. Piv txwv li GNOME, Xfce thiab urxvt txhawb pob tshab, tab sis tsis ntev los no tau poob kev txhawb nqa rau cov duab tom qab, yuam qee cov neeg siv hloov mus rau lub davhlau ya nyob twg Tilix. Tus kheej, kuv zoo siab nrog nws thiab nws yooj yim Cov Muaj Peev Xwm, uas teeb lub hauv paus txheej xim tom qab rau urxvt. Txawm li cas los xij, cov xim tsis yog qauv kuj tuaj yeem tsim teeb meem. Piv txwv li, Hnub ci tsis work nrog kev siv htop ΠΈ IPTraf, txij li thaum lawv twb siv lawv cov xim.

Original VT100 davhlau ya nyob twg tsis txhawb xim, thiab cov tshiab feem ntau txwv rau 256-xim palette. Rau cov neeg siv siab heev uas style lawv cov terminals, lub plhaub prompts lossis cov xwm txheej tuav hauv txoj hauv kev nyuaj tuaj yeem yog qhov kev txwv tsis zoo. Gist lem uas terminals muaj "Tseeb Xim" kev txhawb nqa. Kuv qhov kev ntsuam xyuas tau lees paub tias st, Alacritty thiab VTE-based terminals txhawb True Color zoo kawg nkaus. Lwm cov terminals tsis zoo heev nyob rau hauv no hais txog thiab, qhov tseeb, tsis txawm tso saib 256 xim. Hauv qab no koj tuaj yeem pom qhov txawv ntawm qhov tseeb xim kev txhawb nqa hauv GNOME terminals, st thiab xterm, uas ua haujlwm zoo ntawm qhov no nrog lawv 256 xim palette, thiab urxvt, uas tsis tsuas yog ua tsis tiav qhov kev sim, tab sis txawm tias pom qee qhov blinking cim hloov lawv.

Txheej txheem cej luam ntawm terminal emulators

Qee cov terminals kuj txheeb xyuas cov ntawv nyeem rau URL qauv los ua cov kev sib txuas clickable. Qhov no siv tau rau txhua qhov VTE-derived terminals, thaum urxvt xav tau lub plugin tshwj xeeb uas yuav hloov URLs ntawm nias lossis siv cov keyboard shortcut. Lwm cov terminals kuv tau sim tso saib URLs lwm txoj hauv kev.

Thaum kawg, tus qauv tshiab hauv cov terminals yog qhov kev xaiv ntawm cov scroll tsis. Piv txwv li, st tsis muaj scroll buffer; nws yog xav tias tus neeg siv yuav siv lub davhlau ya nyob twg multiplexer zoo li tmux thiab GNU Screen.

Alacritty kuj tsis muaj backscroll buffers, tab sis yuav ntxiv sai sai no nws txoj kev txhawb nqa vim "kev tawm tswv yim dav" ntawm cov ncauj lus no los ntawm cov neeg siv. Sib nrug los ntawm cov upstarts no, txhua lub davhlau ya nyob twg kuv tau sim uas kuv tuaj yeem nrhiav kev txhawb nqa rov qab scrolling.

Subtotal

Hauv qhov thib ob ntawm cov khoom siv (nyob rau hauv thawj cov no yog ob yam khoom sib txawv - approx. txoj kev) Peb yuav sib piv kev ua tau zoo, kev siv nco thiab latency. Tab sis peb tuaj yeem pom tau tias qee qhov ntawm cov terminals hauv nqe lus nug muaj qhov tsis txaus siab. Piv txwv li, cov neeg siv uas niaj hnub ua haujlwm nrog RTL cov ntawv sau yuav xav xav txog mlterm thiab pterm, vim tias lawv tau zoo dua ntawm kev ua haujlwm zoo li lwm tus. Konsole kuj ua tau zoo. Cov neeg siv uas tsis ua haujlwm nrog RTL cov ntawv sau tuaj yeem xaiv lwm yam.

Nyob rau hauv cov nqe lus ntawm kev tiv thaiv kev ua phem code insertion, urxvt stands vim hais tias ntawm nws tshwj xeeb kev siv ntawm kev tiv thaiv tiv thaiv hom kev tawm tsam no, uas zoo li twv yuav raug hu yooj yim rau kuv. Rau cov neeg uas tab tom nrhiav qee lub tswb thiab xuav, Konsole tsim nyog saib. Thaum kawg, nws tsim nyog sau cia tias VTE yog lub hauv paus zoo tshaj plaws rau cov khoom siv hluav taws xob, uas lav kev txhawb nqa xim, lees paub URL, thiab lwm yam. Thaum xub thawj siab ib muag, lub default davhlau ya nyob twg los nrog koj nyiam ib puag ncig yuav ua tau raws li tag nrho cov yuav tsum tau, tab sis cia peb tawm lo lus nug no qhib kom txog thaum peb to taub qhov kev ua tau zoo.

Cia peb txuas ntxiv mus


Feem ntau, kev ua tau zoo ntawm cov terminals hauv nws tus kheej yuav zoo li qhov teeb meem nyob deb, tab sis raws li nws hloov tawm, qee qhov ntawm lawv muaj qhov xav tsis thoob siab latency rau software ntawm hom tseem ceeb. Tsis tas li ntawd tom ntej no peb yuav saib dab tsi yog ib txwm hu ua "ceev" (qhov tseeb, qhov no yog qhov nrawm nrawm) thiab nco siv lub davhlau ya nyob twg (nrog cov lus ceeb toom tias qhov no tsis yog qhov tseem ceeb niaj hnub no raws li nws tau ntau xyoo dhau los).

Ncua

Tom qab kawm tiav kev ua haujlwm ntawm lub davhlau ya nyob twg, kuv tuaj txog qhov xaus tias qhov tseem ceeb tshaj plaws hauv qhov no yog qhov latency (ping). Hauv nws tsab xov xwm "Peb luam tawm nrog kev txaus siab" Pavel Fatin tau saib qhov latency ntawm ntau cov ntawv nyeem thiab qhia tias cov terminals hauv qhov no yuav qeeb dua li cov ntawv nyeem ceev tshaj plaws. Nws yog qhov lus piv txwv no uas thaum kawg tau coj kuv mus ua kuv tus kheej cov kev xeem thiab sau cov kab lus no.

Tab sis dab tsi yog latency, thiab vim li cas nws thiaj li tseem ceeb? Hauv nws tsab xov xwm, Fatin txhais tias nws yog "qhov ncua sij hawm ntawm nias tus yuam sij thiab qhov hloov pauv hloov pauv hloov tshiab" thiab hais. "Qhia rau Human-Computer Interaction", uas tau hais tias: "Qhov kev ncua sij hawm ntawm kev pom kev pom ntawm lub khoos phis tawj muaj qhov cuam tshuam tseem ceeb rau tus cwj pwm thiab kev txaus siab."

Fatin piav qhia tias qhov ping no muaj qhov tshwm sim ntau dua li qhov kev txaus siab xwb: "kev ntaus ntawv qeeb qeeb, ntau qhov yuam kev tshwm sim, thiab qhov muag thiab cov leeg nqaij nce ntxiv." Hauv lwm lo lus, ncua sij hawm loj tuaj yeem ua rau typos thiab tseem txo cov lej zoo, vim nws ua rau kev nkag siab ntxiv ntawm lub hlwb. Tab sis qhov phem tshaj yog tias ping "nce qhov muag thiab cov leeg nqaij," uas zoo li txhais tau tias kev loj hlob ntawm kev raug mob ua hauj lwm yav tom ntej (Thaj, tus sau txhais tau tias muaj teeb meem nrog cov leeg ntawm lub qhov muag, nraub qaum, caj npab thiab, ntawm chav kawm, tsis pom kev - kwv yees. txoj kev) vim kev nyuaj siab rov qab.

Qee qhov teebmeem no tau paub ntev ntev, thiab cov txiaj ntsig kev tshawb fawb, luam tawm rov qab rau xyoo 1976 hauv phau ntawv Journal Ergonomics, tau hais tias ncua sijhawm ntawm 100 milliseconds "ua rau tsis zoo rau kev ntaus ntawv ceev." Tsis ntev los no, GNOME Tus Neeg Siv Qhia tau qhia lub sij hawm teb tau txais hauv 10 milliseconds, thiab yog tias koj mus ntxiv, ces Microsoft tshawb xyuas qhia tau tias 1 millisecond yog qhov zoo tagnrho.

Fatin tau ua nws qhov kev xeem ntawm cov ntawv nyeem; nws tsim ib lub cuab yeej cuab tam hu ua Typometer, uas kuv tau siv los sim ping hauv davhlau ya nyob twg emulators. Nco ntsoov tias qhov kev sim no tau ua nyob rau hauv hom simulation: nyob rau hauv qhov tseeb, peb yuav tsum coj mus rau hauv tus account ob lub tswv yim (keyboard, USB controller, thiab lwm yam) thiab tso zis (video card tsis, saib) latency. Raws li Fatin, nyob rau hauv ib txwm configurations nws yog hais txog 20 ms. Yog tias koj muaj cov cuab yeej ua si, koj tuaj yeem ua tiav daim duab no hauv 3 milliseconds xwb. Txij li thaum peb twb muaj xws li kho vajtse ceev, daim ntawv thov tsis tas yuav ntxiv nws tus kheej latency. Fatin lub hom phiaj yog coj daim ntawv thov latency mus rau 1 millisecond, los yog ua tiav hu tsis tau. ntsuas tau ncua, qas in IntelliJ IDEA 15.

Nov yog cov txiaj ntsig ntawm kuv qhov kev ntsuas, nrog rau qee qhov ntawm Fatin cov txiaj ntsig, los qhia tias kuv qhov kev sim pom zoo nrog nws cov kev sim:

Txheej txheem cej luam ntawm terminal emulators

Thawj qhov uas ntaus kuv yog lub sijhawm teb zoo dua ntawm cov haujlwm qub xws li xterm thiab mlterm. Nrog rau qhov kev tso npe tsis zoo tshaj plaws (2,4 ms), lawv ua tau zoo tshaj qhov ceev tshaj plaws niaj hnub davhlau ya nyob twg (10,6 ms rau st). Tsis muaj lub davhlau ya nyob twg niaj hnub poob qis dua 10 millisecond qhov pib. Tshwj xeeb, Alacritty ua tsis tau raws li "qhov ceev tshaj plaws davhlau ya nyob twg emulator muaj" thov, txawm hais tias nws cov qhab nia tau txhim kho txij li thawj zaug tshuaj xyuas hauv 2017. Tseeb, cov neeg sau ntawv ntawm qhov project paub txog qhov xwm txheej thiab tab tom ua haujlwm los txhim kho cov zaub. Nws kuj tseem yuav tsum tau muab sau tseg tias Vim siv GTK3 yog qhov kev txiav txim siab qeeb dua li nws cov GTK2 counterpart. Los ntawm qhov no peb tuaj yeem txiav txim siab tias GTK3 tsim cov latency ntxiv, thiab qhov no tau tshwm sim nyob rau hauv tag nrho lwm cov terminals uas siv nws (Terminator, Xfce4 Terminal thiab GNOME Terminal).

Txawm li cas los xij, qhov sib txawv yuav tsis pom qhov muag. Raws li Fatin piav qhia, "koj tsis tas yuav tsum paub txog qhov ncua sij hawm kom nws muaj txiaj ntsig rau koj." Fatin tseem ceeb toom txog kev sib txawv ntawm tus qauv: "txhua yam kev cuam tshuam hauv latency (jitter) tsim kev ntxhov siab ntxiv vim lawv qhov tsis tau pom dua."

Txheej txheem cej luam ntawm terminal emulators

Cov duab saum toj no yog coj los ntawm cov ntshiab Debian 9 (stretch) nrog i3 windows manager. Qhov chaw no ua rau cov txiaj ntsig zoo tshaj plaws hauv kev ntsuas latency. Raws li nws hloov tawm, GNOME tsim ib qho ntxiv ping ntawm 20 ms rau txhua qhov kev ntsuas. Qhov kev piav qhia ua tau rau qhov no yog muaj cov kev pab cuam nrog synchronous ua cov txheej xwm tawm tswv yim. Fatin muab piv txwv rau qhov xwm txheej zoo li no Workrave, uas ntxiv kev ncua los ntawm kev ua tiav tag nrho cov txheej xwm tawm tswv yim synchronously. Los ntawm lub neej ntawd, GNOME kuj tuaj nrog tus thawj tswj qhov rais mutter, uas tsim ib txheej ntxiv ntawm buffering, uas cuam tshuam ping thiab ntxiv tsawg kawg yog 8 milliseconds ntawm latency.

Txheej txheem cej luam ntawm terminal emulators

Scroll ceev

Qhov kev sim tom ntej no yog qhov kev sim "ceev" lossis "bandwidth", uas ntsuas sai npaum li cas lub davhlau ya nyob twg tuaj yeem scroll ib nplooj ntawv thaum pom cov ntawv loj ntawm lub vijtsam. Cov txheej txheem ntawm kev xeem sib txawv; qhov kev sim thawj zaug tsuas yog tsim cov kab ntawv tib yam siv cov lus txib seq. Lwm qhov kev xeem suav nrog Thomas E. Dickey's (xterm tus tuav tswj) kev xeem, uas pheej rov ua dua cov ntaub ntawv terminfo.src yog downloaded. Hauv lwm qhov kev tshuaj xyuas ntawm kev ua haujlwm ntawm lub davhlau ya nyob twg Den Luu siv ib tug base32 encoded hlua ntawm random bytes, uas yog tso zis rau lub davhlau ya nyob twg siv miv. Luu suav hais tias qhov kev sim no yog "tsis muaj txiaj ntsig zoo li ib tus neeg tuaj yeem xav txog" thiab qhia tias siv cov lus teb hauv lub davhlau ya nyob twg ua tus ntsuas thawj zaug. Dickey kuj hu nws qhov kev xeem yuam kev. Txawm li cas los xij, ob tus kws sau ntawv lees paub tias lub davhlau ya nyob twg qhov rais bandwidth tuaj yeem yog qhov teeb meem. Luu nrhiav tau Emacs Eshell khov thaum tso tawm cov ntaub ntawv loj, thiab Dickey tau kho lub davhlau ya nyob twg kom tshem tawm xtrerm qhov pom kev tsis pom kev. Yog li tseem muaj qee qhov tsim nyog rau qhov kev xeem no, tab sis txij li cov txheej txheem rendering txawv heev ntawm lub davhlau ya nyob twg mus rau lub davhlau ya nyob twg, nws kuj tseem tuaj yeem siv los ua cov khoom siv ntsuas los ntsuas lwm yam tsis muaj.

Txheej txheem cej luam ntawm terminal emulators

Ntawm no peb pom rxvt thiab st rub ua ntej ntawm kev sib tw, ua raws li Alacritty tshiab, uas yog tsim los ntawm kev tsom mus rau kev ua tau zoo. Tom ntej no yog Xfce (VTE tsev neeg) thiab Konsole, uas yuav luag ob zaug sai dua. Qhov kawg yog xterm, uas yog tsib zaug qeeb dua rxvt. Thaum lub sij hawm xeem, xterm kuj rippled ntau, ua dhau cov ntawv nyuaj kom pom txawm tias nws yog tib kab. Konsole tau nrawm, tab sis nws nyuaj rau qee lub sijhawm: cov zaub yuav khov ib ntus, qhia cov ntawv ib nrab lossis tsis qhia nws txhua. Lwm cov terminals tso tawm cov hlua kom meej, suav nrog st, Alacritty, thiab rxvt.

Dickey piav qhia tias qhov sib txawv ntawm qhov ua tau zoo yog vim qhov kev tsim ntawm scroll buffers nyob rau hauv txawv terminals. Tshwj xeeb, nws liam rxvt thiab lwm yam terminals ntawm "tsis ua raws li cov kev cai dav dav":

"Tsis zoo li xterm, rxvt tsis tau sim ua kom pom txhua qhov hloov tshiab. Yog tias nws poob qab, nws yuav tsis kam qee qhov hloov tshiab kom ntes tau. Qhov no muaj kev cuam tshuam ntau dua rau qhov pom meej scrolling nrawm dua li ntawm lub koom haum nco hauv. Ib qho teeb meem yog tias ASCII animation yog me ntsis imprecise. "

Txhawm rau txhim kho qhov pom xterm sluggishness, Dickey qhia siv cov peev txheej fastScroll, tso cai rau xterm pov tseg qee qhov kev tshuaj ntsuam tshiab kom ua raws li qhov ntws. Kuv qhov kev ntsuam xyuas paub meej tias fastScroll txhim kho kev ua tau zoo thiab nqa xterm ntawm par nrog rxvt. Qhov no yog, txawm li cas los xij, ib qho nyuaj heev, raws li Dickey nws tus kheej piav qhia: "qee zaum xterm - zoo li konsole - zoo li nyob twj ywm thaum nws tos rau cov txheej txheem tshiab ntawm kev tshuaj ntsuam tom qab qee qhov tau raug tshem tawm." Nyob rau hauv cov hlab ntsha no, nws zoo nkaus li tias lwm cov terminals tau pom qhov kev sib haum xeeb zoo tshaj plaws ntawm kev ceev thiab kev ncaj ncees.

Kev siv peev txheej

Txawm hais tias nws ua rau kev txiav txim siab los txiav txim siab nrawm raws li kev ntsuas kev ua tau zoo, qhov kev sim no tso cai rau peb simulate cov khoom thauj ntawm lub davhlau ya nyob twg, uas tso cai rau peb ntsuas lwm yam tsis xws li kev nco lossis kev siv disk. Cov metrics tau txais los ntawm kev khiav qhov kev ntsuam xyuas seb nyob rau hauv Python txheej txheem saib xyuas. Nws sau cov ntaub ntawv 'meter' tau txais ( ) rau ru_maxrss ua, nyiaj ru_oublock ΠΈ ru_inblock ua thiab timer yooj yim.

Txheej txheem cej luam ntawm terminal emulators

Hauv qhov kev sim no, ST thawj qhov chaw nrog qhov qis tshaj qhov nruab nrab nco noj ntawm 8 MB, uas tsis yog qhov xav tsis thoob xav tias lub tswv yim tseem ceeb ntawm kev tsim qauv yog qhov yooj yim. mlterm, xterm thiab rxvt haus me ntsis ntxiv - txog 12 MB. Lwm qhov txiaj ntsig tseem ceeb yog Alacritty, uas yuav tsum tau 30 MB khiav. Tom qab ntawd muaj cov terminals ntawm VTE tsev neeg nrog cov duab los ntawm 40 txog 60 MB, uas yog ntau heev. Qhov kev siv no tuaj yeem piav qhia los ntawm qhov tseeb tias cov terminals no siv cov tsev qiv ntawv siab dua, piv txwv li, GTK. Konsole los nyob rau hauv kawg nrog ib tug whopping 65MB ntawm lub cim xeeb noj thaum lub sij hawm xeem, txawm hais tias qhov no yuav ua tau ncaj ncees los ntawm nws ntau yam ntawm cov nta.

Piv nrog rau cov txiaj ntsig yav dhau los tau txais kaum xyoo dhau los, txhua qhov kev pab cuam tau pib siv lub cim xeeb ntau dua. Xterm siv los xav tau 4 MB, tab sis tam sim no nws xav tau 15 MB tsuas yog thaum pib. Muaj qhov zoo sib xws hauv kev noj rau rxvt, uas tam sim no xav tau 16 MB tawm ntawm lub thawv. Xfce Terminal siv 34 MB, uas yog peb zaug loj dua li ua ntej, tab sis GNOME Terminal yuav tsum tsuas yog 20 MB. Tau kawg, tag nrho cov kev xeem dhau los tau ua tiav ntawm 32-ntsis architecture. Ntawm LCA 2012 Rusty Russell hais, hais tias muaj ntau ntau yam tsis meej pem uas yuav piav qhia txog qhov nce hauv kev nco noj. Tau hais tias, tam sim no peb nyob hauv ib lub sijhawm uas peb muaj gigabytes ntawm kev nco, yog li peb yuav tswj hwm qee yam.

Txawm li cas los xij, kuv tsis tuaj yeem pab tab sis xav tias faib ntau lub cim xeeb rau qee yam tseem ceeb raws li lub davhlau ya nyob twg yog qhov pov tseg ntawm cov peev txheej. Cov kev pab cuam no yuav tsum yog qhov tsawg tshaj plaws ntawm qhov tsawg tshaj plaws, yuav tsum muaj peev xwm khiav ntawm ib qho "lub thawv", txawm tias lub thawv khau, yog tias peb puas tau los txog qhov lawv yuav tsum tau nruab nrog Linux systems (thiab koj paub tias nws yuav yog li ntawd. ) . Tab sis nrog cov lej no, kev siv lub cim xeeb yuav dhau los ua qhov teeb meem yav tom ntej hauv ib puag ncig uas ua haujlwm ntau lub davhlau ya nyob twg uas tsis yog ob peb lub teeb tshaj plaws thiab feem ntau txwv hauv kev muaj peev xwm. Txhawm rau them nyiaj rau qhov no, GNOME Terminal, Konsole, urxvt, Terminator thiab Xfce Terminal muaj Daemon hom uas tso cai rau koj los tswj ntau lub davhlau ya nyob twg los ntawm ib tus txheej txheem, txwv lawv lub cim xeeb noj.

Txheej txheem cej luam ntawm terminal emulators

Thaum kuv qhov kev sim, kuv tuaj rau lwm qhov kev npaj txhij txog hais txog disk nyeem-sau: Kuv xav pom tsis muaj dab tsi ntawm no, tab sis nws tau pom tias qee lub davhlau ya nyob twg sau cov ntaub ntawv ntau tshaj plaws rau disk. Yog li, lub tsev qiv ntawv VTE yeej khaws cov ntawv tsis nyob ntawm disk (qhov no feature tau pom rov qab rau xyoo 2010, thiab qhov no tseem tshwm sim). Tab sis tsis zoo li qub kev siv, tam sim no tsawg kawg cov ntaub ntawv no tau encrypted siv AES256 GCM (los ntawm version 0.39.2). Tab sis cov lus nug tsim nyog tshwm sim: dab tsi yog qhov tshwj xeeb ntawm VTE lub tsev qiv ntawv uas nws yuav tsum muaj qhov tsis zoo li no rau kev siv ...

xaus

Hauv thawj ntu ntawm tsab xov xwm, peb pom tias VTE-based terminals muaj cov txheej txheem zoo, tab sis tam sim no peb pom tias qhov no los nrog qee cov nqi ua haujlwm. Tam sim no kev nco tsis yog qhov teeb meem vim tias txhua lub VTE terminals tuaj yeem tswj tau los ntawm cov txheej txheem Daemon, uas txwv tsis pub lawv qab los noj mov. Txawm li cas los xij, cov txheej txheem qub uas muaj kev txwv lub cev ntawm RAM thiab kernel buffers tseem yuav xav tau cov qauv ua ntej ntawm cov terminals, vim lawv siv cov peev txheej tsawg dua. Txawm hais tias VTE cov davhlau ya nyob twg ua tau zoo hauv kev xeem dhau los (scrolling), lawv cov zaub latency yog siab tshaj qhov pib tau teev tseg hauv GNOME Cov Neeg Siv Khoom Qhia. VTE cov neeg tsim khoom yuav tsum xav txog qhov no rau hauv tus account. Yog hais tias peb coj mus rau hauv tus account tias txawm rau novice Linux cov neeg siv ntsib ib tug davhlau ya nyob twg yog inevitable, lawv muaj peev xwm ua rau nws ntau tus phooj ywg siv. Rau cov neeg muaj kev paub dhau los, kev hloov pauv los ntawm lub davhlau ya nyob twg yuav txhais tau tias qhov muag tsis tshua pom thiab muaj peev xwm zam kev raug mob thiab kev mob nkeeg yav tom ntej vim muaj kev ua haujlwm ntev. Hmoov tsis zoo, tsuas yog cov qub xterm thiab mlterm coj peb mus rau qhov chaw ua khawv koob ping ntawm 10 milliseconds, uas yog qhov tsis txaus ntseeg rau ntau tus.

Kev ntsuas ntsuas ntsuas kuj tau pom tias vim yog kev txhim kho ntawm Linux graphical ib puag ncig, cov neeg tsim khoom yuav tsum ua kom muaj kev cuam tshuam ntau. Qee cov neeg siv yuav xav saib cov thawj tswj qhov rais tsis tu ncua vim lawv muab ping txo qhov tseem ceeb. Hmoov tsis zoo, nws tsis tuaj yeem ntsuas latency rau Wayland: qhov kev pab cuam Typometer kuv siv tau tsim rau yam uas Wayland tsim los tiv thaiv: spying ntawm lwm qhov rais. Kuv vam tias Wayland compositing ua tau zoo dua li X.org, thiab kuv kuj vam tias yav tom ntej ib tus neeg yuav pom txoj hauv kev los ntsuas latency hauv ib puag ncig no.

Tau qhov twg los: www.hab.com

Ntxiv ib saib