Portál AbcLinuxu, 6. května 2025 11:27

Dotaz: Implementace terminálu

17.3.2011 12:24 J@rys | skóre: 11 | blog: Jarduv_blog
Implementace terminálu
Přečteno: 354×
Odpovědět | Admin
Dobry den. Poustim se do projektu, jehoz cilem je implementace SSH klienta a jsem ve stavu, kdy sbiram informace o terminalech. Docetl jsem se, ze existuji standardy VT100, VT350, XTERM, apod. Klient by mel umet zobrazovat barvy a prenaset znaky s diakritikou, nejlepe UTF-8. MA s tim nekdo zkusenosti? Jak zpravne prenaset znaky z klienta na server a opacne, pripadne kde cerpat informace dal?

Dekuji.
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

17.3.2011 13:00 Sten
Rozbalit Rozbalit vše Re: Implementace terminálu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Vyberte si jeden standard a ten potom pošlete jako proměnnou TERM. Kódování se určuje v nastavení jazyka, např. „cs_CZ.UTF-8“ je čeština v UTF-8. Pro linuxovou konzoli (TERM=linux) jsou informace o řídících kódech v manuálové stránce console_codes.
17.3.2011 13:05 Ivan
Rozbalit Rozbalit vše Re: Implementace terminálu
Odpovědět | | Sbalit | Link | Blokovat | Admin
A potrebujes to pro nejakej "komercni" projekt, nebo to pises jen tak? Nejak nechapu proc bys' jinak chtel znovu vymyslet kolo. Terminaly a jejich vlastnosti ti zaberou neuveritelny mnozstvi casu. Treba zadnej terminal "xterm" neexistuje, xterm je jen alias pro xterm-r6(pokud pouzivas X11R6), ale muze to byt alias pro nejaky starsi xterm-y. Terminal vt100 (vt200, vt220) se vyrabel jako fyzicku zarizeni a je od nej spousta dokumentace(viz http://vt100.net). Pokud jde o inicializaci terminalu a alokaci pts, tak bych asi doporucil zdrojaky telnetu, tak uvudis jakej je s tom bordel a jak velkym historickym vyvojem to proslo.

Jeste se koukni na prikazy infocmp, tic, tac, toe, knihovny curses a ncurses a myslim, ze te prejde chut.

Ivan
17.3.2011 13:12 Ivan
Rozbalit Rozbalit vše Re: Implementace terminálu
Pokud by te zajimalo odkud se bere promenna TERM. Klient (telnet nebo ssh) nabidne serveru(telnetd, sshd) seznam env. promennych a jejich hodnot(typicky, TERM, COLUMNS, LINES, PAGER, EDITOR, PRINTER) server to prozene nejaky svym white-listem spusti shell s parametrem '-l' (login shell). Tomu shellu nastavi environment presmeruje mu stdin/stdout/stderr do naalokovaneho pts.
18.3.2011 07:20 J@rys | skóre: 11 | blog: Jarduv_blog
Rozbalit Rozbalit vše Re: Implementace terminálu
Spis jde o to to kolo dodelat. Nasel jsem projekt ssh klienta v jave http://www.jcraft.com/jcterm/. Soucasna implementace neobsahuje zadne zasadni diry, nedochazi zde k vyjimkam a jedine co tomu chybi je nedodelany terminal VT100. Jak jsem se docetl VT100 nepodporuje vsech 101 klaves soucasne klavesnice. Nejde zde prenaset diakritika a po spusteni midnight commanderu se zobrazovany vystup rozsype do hromadky znaku. Zato jsou podporovany barvy. Proto uvazuji terminal rozsirit a projekt dotahnout do konce.
18.3.2011 12:31 Ivan
Rozbalit Rozbalit vše Re: Implementace terminálu
Pokud potrebujes tohle, tak to bych to doporucil zdrojaky linuxovyho baliku dialog a v nem je podadresar samples. Na testovani termilalu je to vyborana vec.

Jeste jedna vec me napadla, pro popis vlastnosti terminalu existuji dva "podobne" jazyky(Jeden je BSD a druhej SystemV). Takhle napriklad vypada definice terminalu vt100 na Linuxu a na AIXu (najdi 5 rozdilu:)
Linux
#	Reconstructed via infocmp from file: /lib/terminfo/v/vt100
vt100|vt100-am|dec vt100 (w/advanced video),
	am, mc5i, msgr, xenl, xon,
	cols#80, it#8, lines#24, vt#3,
	acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
	bel=^G, blink=\E[5m$<2>, bold=\E[1m$<2>,
	clear=\E[H\E[J$<50>, cr=^M, csr=\E[%i%p1%d;%p2%dr,
	cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=^J,
	cuf=\E[%p1%dC, cuf1=\E[C$<2>,
	cup=\E[%i%p1%d;%p2%dH$<5>, cuu=\E[%p1%dA,
	cuu1=\E[A$<2>, ed=\E[J$<50>, el=\E[K$<3>, el1=\E[1K$<3>,
	enacs=\E(B\E)0, home=\E[H, ht=^I, hts=\EH, ind=^J, ka1=\EOq,
	ka3=\EOs, kb2=\EOr, kbs=^H, kc1=\EOp, kc3=\EOn, kcub1=\EOD,
	kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kent=\EOM, kf0=\EOy,
	kf1=\EOP, kf10=\EOx, kf2=\EOQ, kf3=\EOR, kf4=\EOS, kf5=\EOt,
	kf6=\EOu, kf7=\EOv, kf8=\EOl, kf9=\EOw, lf1=pf1, lf2=pf2,
	lf3=pf3, lf4=pf4, mc0=\E[0i, mc4=\E[4i, mc5=\E[5i, rc=\E8,
	rev=\E[7m$<2>, ri=\EM$<5>, rmacs=^O, rmam=\E[?7l,
	rmkx=\E[?1l\E>, rmso=\E[m$<2>, rmul=\E[m$<2>,
	rs2=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h, sc=\E7,
	sgr=\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;m%?%p9%t\016%e\017%;$<2>,
	sgr0=\E[m\017$<2>, smacs=^N, smam=\E[?7h, smkx=\E[?1h\E=,
	smso=\E[7m$<2>, smul=\E[4m$<2>, tbc=\E[3g,
AIX
# infocmp vt100
#       Reconstructed via infocmp from file: /usr/share/lib/terminfo/v/vt100
vt100|vt100-am|Digital VT100,
        am, msgr, xenl, xon,
        cols#80, it#8, lines#24, vt#3,
        batt1=f1, batt2=f1md, bel=^G, blink=\E[5m$<2>,
        bold=\E[1m$<2>, box1=lqkxjmwuvtn, box2=lqkxjmwuvtn,
        civis=\E[?25l, clear=\E[H\E[2J$<50>, cnorm=\E[?25h,
        cr=\r, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=\b,
        cud=\E[%p1%dB, cud1=\n, cuf=\E[%p1%dC, cuf1=\E[C$<2>,
        cup=\E[%i%p1%d;%p2%dH$<5>, cuu=\E[%p1%dA,
        cuu1=\E[A$<2>, cvvis=\E[?25h, dl1=\E[M, ed=\E[J$<50>,
        el=\E[K$<3>, font0=\E(B, font1=\E(0, home=\E[H, ht=\t,
        hts=\EH, il1=\E[L, ind=\n, kbs=\b, kcub1=\E[D,
        kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kf1=\EOP,
        kf2=\EOQ, kf3=\EOR, kf4=\EOS, khome=\E[H, kich1=\E[2~,
        knl=\r, ktab=\t, mc4=\E[4i, mc5=\E[5i, nel=\n, rc=\E8,
        rev=\E[7m$<2>, rf=/usr/share/lib/tabset/vt100,
        ri=\EM$<5>, rmcup=\E[?7h, rmkx=\E>, rmso=\E[m$<2>,
        rmul=\E[m$<2>, rs2=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h,
        sc=\E7,
        sgr=\E[%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p6%t;1%;m%?%p9%t\E(0%e\E(B%;,
        sgr0=\E[m\E(B, smcup=\E[?7h\E[?1l\E(B\E=, smkx=\E=,
        smso=\E[7m$<2>, smul=\E[4m$<2>, tbc=\E[3g,

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.