Různé grafické režimy
V Linuxu existují v podstatě dva základní grafické režimy – je to režim textové konzole a grafický režim.
Režim textové konzole je historicky nejstarším typem komunikace s počítačem, je pouze textový a jeho funkce je vestavěna přímo v BIOSu grafické karty.
Nejčastějším grafickým režimem je X server.
Nesmíme ovšem zapomenout na grafický framebuffer s obslužnou knihovnou (libsvga, SDL, GGI). Framebuffer lze použít i na vylepšenou textovou konzoli (pokud si to vyžádáme při startu jádra).
Jádro
Mimojaderná část operačního systému nám zajišťuje, že náš počítač nastartuje, připojí se do sítě a budou probíhat všechny základní operace. Na vlastní tvorbě obrazu na obrazovce se však příliš nepodílí. Ten je spíš výsledkem spolupráce jádra a X serveru.
Co tedy najdeme v jádře a co v X serveru?
V jádře najdeme obsluhu textových konzolí. Ta pracuje s grafickou kartou v textovém režimu, podobně jako BIOS. Pak tam najdeme grafickou obsluhu – framebuffer. Je to jednoduchý systém pro přístup do grafické paměti, který se většinou opírá přímo o služby BIOSu. Pro některé grafické karty je ovladač v jádře. Lze nad ním vystavět i neakcelerované grafické systémy.
V jádře najdeme ovladač sběrnice AGP a ovšem také PCI. Je tam také ovladač DRI (Direct Rendering Infrastructure). Ty slouží k rychlejší komunikaci procesoru s kartou.
A nakonec v jádře najdeme ovladače Video for Linux, které dokáží digitalizovat obraz z grafické karty a ovládat televizní a rozhlasové karty či dekódovat teletext.
A co umí X server
X server obsahuje vlastní ovladače grafických karet. Právě ovladače X serveru umí pracovat s grafickou kartou, znají její hardware a umí pracovat s jejími akcelerátory.
Existuje i varianta X serveru, která dokáže používat framebuffer z jádra. Funguje s každou grafickou kartou, ale její výkon se nedá porovnávat s výkonem akcelerovaného ovladače.
X
Systém X byl navržen kolem roku 1985. Jeho kvalitní návrh spolu s dobrou rozšiřitelností zajistily jeho široké nasazení. Jeho tehdejší minimální hardwarové nároky (počítač srovnatelný s i386 s 4 MB paměti nebo lepší) se postupně přesunuly z oblasti náročné technologie do kategorie „staré železo“. A tak dnes X server spustíte prakticky na jakémkoliv počítači.
Od projektu X (standard a referenční implementace) se odvíjí projekt XFree86 (implementace s širokou podporou hardwaru). Dnes aktuální je X verze 6.4 (tedy standard X11R6, verze 4). Z něj odvozený projekt XFree86 právě finišuje verzi 4.3.0.
Počínaje XFree86 verzí 4 již X server není monolitický program, ale používá ke své práci moduly. To umožňuje jednodušší vývoj ovladačů třetími stranami a jejich snadné zařazení do systému. Najdete je v adresáři /usr/X11R6/lib/modules.
Jak pracuje X server
X server komunikuje s aplikacemi pomocí jediného komunikačního kanálu – tzv. soketu. Ten je otevřen jednak do souboru /tmp/.X11-unix/Xčíslo, jednak na síťovém portu. To umožňuje rychlé spojení místních aplikací i síťový provoz.
Budeme-li hodně zjednodušovat, tak vše, co děláme, jsou pro X server události a vše, co se objevuje na obrazovce, jsou okna a jejich obsah.
Hlavním oknem je kořenové okno, které je vždy otevřeno přes celou obrazovku. V tomto okně se nacházejí další okna (vlastně jediná „okna“, jak je v běžném kontextu vnímáme), která většinou patří do kategorie spravovaných oken(tedy oken, ke kterým správce oken přikreslí dekoraci). Existují ale i další podřízená okna, která vytvářejí jednotlivé grafické elementy. Vzniká tak celý hierarchický strom oken a podřízených oken. A proč to všechno? Přece aby si okna mohla mezi sebou posílat události a vše se řešilo průhledným způsobem.
Událostí – tou je většina toho, co děláme – stisknutí kláves, pohyby myší. Každé okno může požádat o zasílání vybraných událostí. A pokud si toto zasílání nevyžádalo jiné, nadřízené okno, tak k němu tato informace doputuje. Tak třeba program pro zaškrtávací pole si vyžádá zasílání události „stisk levého tlačítka myši“, zatímco sousední textový vstup si vyžádá události „stisk klávesy“. A nakonec nápis vedle si nevyžádá nic. Tak se každá z událostí dostane přes celou strukturu až do místa, kde může být zpracována. Stejným způsobem řeší X server i abstraktnější události, jakými jsou změna velikosti okna, žádost o překreslení apod.
S tím souvisí pojem aktivní okno (tzv. fokus). V řeči událostí je aktivní to okno, kterému nechá správce oken zasílat události z klávesnice.
Aby programátoři nemuseli znát detaily komunikace se serverem, existují knihovny, které převádějí příkazy a události na data pro server.
Návrh X počítá s rozšířeními, která přidávají nové funkce. Mnoho z nich se dnes stalo standardní součástí serverů – třeba XKB (ovladač klávesnice), Open GL (3D rozšíření), DRI (rozšíření pro přímý přístup ke kartě ve spolupráci s jádrem), XVideo pro řízení videa a tunerů (za pomoci Video for Linux nebo vlastních ovladačů), XRender (pro vyhlazená písma), Xinerama (pro obsluhu více monitorů), DGA (pro přímý přístup do grafické paměti), XVidMode a XRandR (pro změnu nastavení grafické karty) a mnohé další.
Virtuální konzole
Abychom mohli na obrazovce pracovat ve více prostředích najednou, naprogramovali tvůrci Linuxu tzv. virtuální konzole. Mezi nimi můžeme přepínat a chovají se tak, jako kdybychom měli k dispozici oddělené sady klávesnic a monitorů. Přepínací klávesy fungují, pokud je neodchytává žádný jiný program (např. X server to dělá, a proto k opuštění X serveru musíte použít jeho vlastní kombinace, popsané dále v článku):
Levý_Alt + F-klávesy: přepínání mezi virtuálními konzolemi
Levý_Alt + šipka vlevo či napravo: přechod na předchozí či následující virtuální konzoli
Na virtuální konzoli 1 většinou najdeme protokol o startu počítače a textový přihlašovací dialog, na konzolích 2–6 to bývají textové přihlašovací dialogy, od konzole 7 je volno pro grafické prostředí. Na konzoli 12 někdy bývá rozšířený protokol o práci počítače (např. o odcházející poště).
Spouštíme X server
Jak vlastně X server vypadá? Až dočtete tento odstavec, můžete si to vyzkoušet. Otevřete terminálové okno a zadejte příkaz pro jeho spuštění. Tento příkaz bývá na většině počítačů vyvolatelný jako X. Předpokládám, že vám již jedno grafické prostředí běží, a proto zadáme příkaz:
X -ac :1 &
Volba -ac říká, že se server spustí nezabezpečený (pro vážnou práci na síti to není dobré, neboť kdokoliv může otevírat okna a číst z klávesnice, ale při experimentech si tím ušetříme laborování s ověřováním povolení k přístupu pomocí příkazů xhost nebo xauth). Volba :1 říká, že otevíráme druhý server (první je :0). Znak &říká, že terminál nebude čekat na ukončení běhu X serveru a my budeme moci zadávat další příkazy. Význam dvojtečky se dozvíme za chvíli. Na některých systémech se může stát, že příkaz můžete spustit jen jako superuživatel (root).
Pokud máte standardně nastavený systém, objeví se před vámi velmi jemná šachovnice s kurzorem ve tvaru křížku. Právě vám naběhl samotný X server a čeká na další povely. Bez dalších programů toho moc neumí – pohybuje s kurzorem myši a reaguje na několik kláves:
Levý_Ctrl + Levý_Alt + Numerické_+ a Levý_Ctrl + Levý_Alt + Numerické_-: cyklení mezi dostupnými grafickými režimy
Levý_Ctrl + Levý_Alt + BackSpace: ukončení práce X serveru
Levý_Ctrl + Levý_Alt + F-klávesy: přepínání mezi virtuálními konzolemi na Linuxu
Nyní tedy víte, jak se lze přepnout zpět do našeho základního serveru a můžete tedy výše zmíněný příkaz spustit.
Opět se vrátíme do našeho terminálového okna a zkusíme spustit například xcalc. Tímto příkazem naběhne kalkulačka na našem základním X serveru. Zkusíme tedy napsat:
DISPLAY=:1 xcalc
Kalkulačka se nyní otevřela na našem testovacím X serveru. Pomocí výše uvedené kombinace se do něj přepneme a vidíme kalkulačku. Okno však nemá žádný rámeček a nelze s ním hýbat. To zajišťuje správce oken, který jsme zatím nespustili.
Stejně tak jsme mohli spustit X server na vedlejším počítači propojeném sítí (říkejme mu třeba cyrix) a kalkulačku jsme mohli otevřít následujícím příkazem:
DISPLAY=cyrix:1 xcalc
To také vysvětluje význam proměnné DISPLAY. Před dvojtečkou je jméno počítače (nebo nic, jde-li o tento počítač), číslo za dvojtečkou udává číslo serveru (standardně 0). Může ještě následovat tečka a další číslo, které označuje obrazovku v systémech s více monitory.
Nyní můžeme kalkulačku zastavit, a to třemi způsoby (ten čtvrtý totiž vyžaduje zavírací tlačítko na rámu okna) – písmenem q v okně kalkulkačky (tedy událostí v okně), stisknutím Ctrl + c v okně terminálu, ze kterého jsme program spustili (tedy signálem k ukončení) nebo ukončením celého serveru (tedy opět signálem, na který mají programy možnost zareagovat).