UNIX 3. Unixová uživatelská rozhraní © Milan Keršlágerhttp:// Obsah: ● terminál (znakový, řádkový, celoobrazovkový) ● konzole, telnet, ssh, emulace terminálu ● shell, zpracování příkazového řádku ● GUI, X Window System, X.org, 3D ● národní prostředí, locale
Rozhraní prvních počítačů 1) první počítače bez rozhraní ● program na propojovací desce ● vstupy a výstupy dat – děrné štítky, děrná páska, později magnetická páska 2) poté něco jako obyčejná kalkulačka ● obsluhováno jednoduchým programem (monitor) ● numerická klávesnice a displej s čísly ● vložím adresu, zobrazí se její obsah, lze ho změnit ● po vložení strojového kódu skok na adresu (začátek)
Znakový terminál ● první rozhraní současného stylu ● připojeno sériovým kabelem (half-duplex) ● umí tisknout znaky přijaté od počítače ● vlastně znaky vyslané programem na výstup ● CRT obrazovka, 24x40, 12x80 znaků apod. – tj. znaky rozmístěny napevno v polích šachovnice ● obsah obrazovky si terminál musí pamatovat ● umí odeslat znaky počítači ● nejprve jen velká písmena z ASCII (ADM-3A) ● malá klávesnice (písmena, čísla, ESC, CTRL)
Samostatné terminály Zdroj obrázků: wikipedia.org
Řádkový terminál ● tzv. dumb terminal (glass tty) ● začínáme v levém horním rohu obrazovky ● z počítače přijde znak → vytiskneme ho ● přijde-li znak konce řádku → další znak na nový ● dojdeme-li na spodní řádek a má být nový řádek, ● odrolujeme všechny řádky nahoru (horní zmizí) ● na uvolněném řádku dál tiskneme znaky ● kurzor nelze nastavit na zvolenou pozici ● text neustále roluje nahoru, kde zmizí ● primitivní zpracování textu (editor ed, ex )
Řádkový terminál s příkazovým řádkem
Příkazový řádek ● stačí mu řádkový terminál ● první terminály neuměly smazat znak či obrazovku: ● Ahoj K^HLído, posílám pusu^Wprachy ● CTRL+h (^H) ruší předchozí znak ● CTRL+w (^W) ruší celé dosud napsané slovo ● vytváří komunikační rozhraní ● obslužný program → shell (bash, ksh, sh,...) ● zadáme příkaz, odešleme, spustí se program ● funguje stejně, jako cmd.exe ve Windows ● totéž poskytoval i DOS ( command.com )
Celoobrazovkový terminál ● umožňuje nastavit kurzor na libovolnou pozici ● kurzor určuje, kde bude vytištěn další znak ● též smazaní obrazovky, přepis existujícího znaku ● vznik celoobrazovkových aplikací ● např. vi (vim), mc (Midnight Commander), elinks,... ● vznik textového uživatelského rozhraní ● čárová grafika, tlačítka, menu, myš ● vše ovšem limitováno šachovnicí (VGA: 24x80) – nelze různé velikosti písma, čáry ani obrázky – dodnes např. účetnictví → rychlost, přehlednost
Celoobrazovková aplikace
Terminál a aplikace ● program neví, jaké schopnosti terminál má ● černobílý, inverzní či podtržený text, barevný? ● ovládání různými řídícími kódy ● některé terminály se staly standardem (vt100 atp.) ● databáze vlastností terminálů ● termcap, terminfo, curses ● terminál oznámí svůj název (vt100, xterm, linux,...) ● aplikace využije databázi pro zjištění detailů ● k dispozici knihovny, programátor má jednotné API
Konzole ● terminál pevně připojený k počítači ● původně sloužil ke správě systému ● konzole fungovala hned po zapnutí – systémová a diagnostická hlášení ● pro běžnou práci terminály (+operátoři) – propojení sériovou linkou (i telefonní) ● každé IBM PC má vlastně konzoli ● zjednodušení komunikace, zapojení ● možnost zrychlení zobrazování
telnet ● připojení ke vzdálenému počítači ● umí využít TCP/IP (tj. počítačovou síť) ● vytvoření textového terminálu – podporuje celoobrazovkový režim ● posílání znaků oběma směry ● řídící znaky mají přednost – např. přerušení programu (CTRL+c) ● na lokálním terminálu se zobrazuje výstup programu spuštěného na vzdáleném počítači ● moje klávesnice odesílá znaky na vzdálený počítač ● v primitivní formě součást MS Windows (od Win95)
ssh ● telnet používá otevřený text ● stisknu klávesu, vyšle se datagram s písmenem ● program pošle znak, odeslán datagram zpět ● vše lze odposlouchávat → problém – přihlašovací jméno, heslo, ale i rekonstrukce obrazovky ● ssh realizuje telnet, ale šifrovaně ● asymetrická kryptografie (2 klíče: privátní + veřejný) ● podporuje kompresi, vytváření tunelu ● 1995 – univerzita Helsinki, Finsko – reakce na hromadné odposlouchávání hesel
PuTTY, ssh ● terminálová emulace ● open source, volně k použití (Windows, Linux) ● v GUI vytváří okno, uvnitř terminál ● připojení ke vzdálenému systému ● ssh ● open source, součást distribucí ● navázání SSH spojení z příkazového řádku – nevytváří okno s terminálem, jako to dělá PuTTY – pro vytvoření okna se používají speciální aplikace ● xterm, gnome-terminal, konsole,...
Jak funguje shell ● vytváří rozhraní: příkazový řádek ● v podstatě „obyčejný program“ ● vstup připojený ke klávesnici ● výstup připojený na monitor ● zobrazí výzvu (prompt): ~]$ ● uživatel napíše příkaz (vstup) ● stisk Enter → zpracování příkazového řádku ● shell spustí program a čeká na jeho ukončení – fork(), exec(„program“), wait() ● opět zobrazení výzvy
Zpracování příkazového řádku ● pořadí zpracování (pro BASH) 1) parsování příkazového řádku 2) uložení úvodních přiřazení do proměnných 3) uložení přesměrování 4) expanze žolíkových znaků 5) rozlišení: příkaz argument1 argument2 argumen3... 6) vyhodnocení přesměrování 7) vyhodnocení, dosazení a naplnění proměnných 8) spuštění programu + čekání na jeho ukončení 9) přečtení návratového kódu programu
Grafické rozhraní ● GUI (Graphical User Interface) ● 1973 WIMP – první GUI, PARC (Xerox lab.) ● Window, Icon, Menu, Pointing device ● 1984 Macintosh – Apple ● 1984 X Window System (MIT) ● snaha o sjednocení GUI → přenositelné aplikace ● HW se ovládá přes API, GUI má ovladač k HW ● přesto v éře DOSu (1980) ● grafickou kartu ovládá sám program (např. T602) ● nepřenositelné aplikace, neustálé reimplementace
X Window System ● 1983 – MIT (současné označení X11, X11R6) ● navazuje na W, navíc asynchronní komunikace ● model klient (aplikace) – server (ovládá HW) – rozšiřitelný komunikační protokol (zpětná kompatibilita) – aplikace instruuje server, co má vykreslit ● kompletně řešeno v uživatelském prostoru ● výborná přenositelnost, univerzálnost ● problematická rychlost (ovládání HW není v jádře) ● modulární systém ● X Server, správce oken, panel → vše zaměnitelné
X Window System + GNOME
Schéma komunikace Grafická karta X server Aplikace Window manager X protokol
Terminál v GUI ● emulace terminálu ● speciální aplikace → v okně textový terminál – typicky volitelný font, velikost, sloupce i řádky – volba emulace konkrétního terminálu ● xterm → vzorová implementace pro X Window System – stal se standardem ● MS Windows ● PuTTY (zdarma, nemusí se instalovat) ● Linux ● gnome-terminal (GNOME), konsole (KDE),...
gnome-terminal
Situace na IBM PC ● 1981 – MS DOS ● následník CP/M, inspirace Unixem (shell, adresáře) ● žádná podpora GUI → přímé ovládání HW ● de-fakto standard Hercules, VGA ● 1989 – VESA ● 1990 – Windows 3.0 ● GUI nadstavba DOSu ● má ovladač, poskytuje jednotné API ● 1992 – XFree86 ● implementace X Windows System pro UN*X
Linux používá X.org ● 2004 ● XFree86 mění licenci ● X.org přebírá poslední kódy a iniciativu – velký zájem tvůrců distribucí Linuxu – tím opuštěno XFree86 ● modulární stavba – X Server, ovladače, knihovny, další programy ● v současnosti – plně implementována 2D akcelerace – open source implementace 3D akcelerace ● Intel, ATI (nVidia se neúčastní, ale projekt Nouveau)
API pro 3D ● OpenGL ● tradičně unixové systémy ● MS Windows má svoji implementaci – DirectX obsahuje Direct3D, což je ekvivalent OpenGL ● abstraktní API pro programátory – následuje vývoj hardware, ale není na něm závislé ● co neumí hardware, řeší se softwarově – v MS Windows není zvykem → podpora prodeje HW ● X Server má pro 3D tzv. state tracker – systém má ponětí o tom, co se v GPU děje
Současný vývoj ● X Window System má starý návrh ● několik projektů se neprosadilo (Y, Xgl) ● zatím rozšiřování X protokolu pro potřeby 3D ● Wayland ● nový projekt, plně postaven nad 3D funkcemi ● zpětná kompatibilita s X Window System – důležité pro hotové aplikace ● další cíle ● non-root provoz X Serveru, multiinput/multioutput ● sjednocení vstupních metod (čínské znaky atp.)
Národní prostředí ● locale ( příkaz pro vypsání nastavení národního prostředí ) ● uloženo jako proměnné prostředí (Single UNIX sp.) ● cs, cs_CZ, cs_CZ.UTF-8 (jazyk, stát, kódování) – rómština v ČR a Rumunsku bude odlišná ● def. třídění podle abecedy, zápisy čísel, datumu,... ● i18n (internationalisation) ● program je schopen pracovat s národními znaky ● korektní inicializace, lokalizované funkce (knihovny) ● L10n (localisation) ● překlad hlášení programu (katalogy.PO)
i18n
L10n
Proměnné lokalizace ● LANG – obecné nastavení, nejnižší priorita ● LC_ALL – všeobecné nastavení, nejvyšší priorita ● LC_COLLATE – nastavení třídění znaků ● LC_CTYPE – čísla, znaky, malá/velká apod. ● LC_MESSAGES – hlášení programu ● LC_MONETARY – používaná měna ● LC_NUMERIC – formátování čísel ● LC_TIME – formátování času a data ● jsou-li nastaveny na „C“ nebo „POSIX“ ● implicitní POSIX chování
Použití proměnných