Hlavní navigace

Za oči zdravější...

19. 5. 1999
Doba čtení: 6 minut

Sdílet

Když jsem začal dělat s Linuxem, samozřejmě jsem se setkal i s XWindows. To byla jedna z prvních věcí, kterou jsem se pokusil nakonfigurovat. Zatímco Linux jako takový po instalaci v podstatě fungoval podle mých představ, Xka bylo potřeba trochu přizpůsobit. I kdyby nic jiného, chtěl jsem změnit rozlišení, jsa zvyklý na 1024x768pixelů v 16bitové barevné hloubce. Samozřejmě jsem přikročil k nejsnazšímu řešení a použil jsem redhatí Xconfigurator. Až teprve nedávná debata v konferenci mě přiměla k takovému menšímu experimentování a najednou jsem se nestačil divit, co všechno moje stařičká grafická karta dokáže.
Malá exkurze do světa monitorů

Běžný monitor je analogové zařízení. Obraz je tvořen množstvím malých bodů, které „rozsvěcuje“ elektronový paprsek vystřelovaný za zadní části monitoru na přední plochu obrazovky. Tento paprsek se pohybuje z levého horního rohu obrazu po jednotlivých řádcích až do pravého dolního rohu. Kromě vlastní informace o obrazu posílá počítač i tzv. vertikální a horizontální synchronizační pulzy. Tyto pulzy určují horizontální a vertikální obnovovací frekvenci. Horizontální frekvence (HF) se uvádí v KHz (KiloHertz) a určuje, kolik řádků obrazu bude vykresleno za jednu vteřinu. Vertikální frekvence (VF) je uváděna v H (Hertz) a značí, kolikrát za jednu vteřinu bude překreslen celý obraz. Za dostatečně ergonomickou hodnotu pro VF se obecně považuje 70–75 Hz, ale osobně se domnívám, že jde o poměrně subjektivní záležitost. Hodnoty nižší způsobují, že oko dokáže rozlišit mihotání obrazu, které je způsobené pohasínáním bodů obrazu mezi jednotlivými zásahy elektronovým paprskem. K výše uvedeným hodnotám je pro charakteristiku monitoru podstatná ještě šířka pásma (bandwidth), která se pro změnu zase uvádí v MHz (MegaHertz). Ta v podstatě značí, kolik bodů za vteřinu je monitor schopen osvítit. Dále si ještě zavedeme hodnoty XR a YR, které značí horizontální a vertikální rozlišení obrazu v pixelech (to je těch obvyklých 800×600 nebo 1024×768 pixelů apod.)

Konfigurační soubor XF86Config
Tento soubor se vyskytuje obvykle v adresáři /etc/X11/ a obsahuje prakticky všechna podstatná nastavení pro Xserver. My se budeme zaobírat pouze těmi hodnotami, které mají co do činění s nastavením zobrazovacího subsystému.
Sekce Device obsahuje identifikaci grafické karty a případně některá její nastavení. Moje sekce Device vypadá takto:

Section "Device"
    Identifier  "Vision 868"
    VendorName  "Unknown"
    BoardName   "Unknown"
    Option      "nolinear"
EndSection

Až na volbu nolinear bude vypadat tato sekce u vás vypadat zřejmě hodně podobně. Identifier slouží k provázání s ostatními sekcemi, zbývající parametry jsou nepodstatné a mohou být vyplněny prakticky čímkoliv.

V sekci Monitor jsou definovány parametry, které přímo ovlivňují rozlišení i obnovovací frekvenci monitoru:

Section "Monitor"
    Identifier  "CTX"
    VendorName  "CTX"
    ModelName   "1785"

    HorizSync   30 - 85
    VertRefresh 50-120

# 1024x768
Modeline "1024x768"    85    1024 1032 1152 1360   768  784  787  823
# 1152x864
Modeline "1152x864" 100.00   1152 1160 1384 1440   864  867  880  904

EndSection

Stejně jako u grafické karty, volba Identifier slouží k identifikaci monitoru v jiných sekcích. HorizSync respektive VertRefresh určují rozsah podporovaných horizontálních respektive vertikálních obnovovacích frekvencí. Pak již následují definice parametrů pro jednotlivá rozlišení, tzv. Modelines. Na ty se podíváme podrobněji později.

Sekce Screen definuje parametry zobrazovacího subsystému:

Section "Screen"
    Driver      "accel"
    Device      "Vision 868"
    Monitor     "CTX"
    Subsection "Display"
        Depth       8
        Modes       "1024x768"
        ViewPort    0 0
        Virtual     1024 768
    EndSubsection
    Subsection "Display"
        Depth       16
        Modes       "1152x864"
        ViewPort    0 0
    EndSubsection
EndSection
Driver

určuje, který Xserver celou sekci použije. V tomto případě jde o akcelerované Xservery.
Device definuje vazbu na odpovídající sekci Device.
Monitor dělá totéž, ovšem pro sekci Monitor.
Pak následují podsekce pro jednotlivá rozlišení. V mém případě bude možné používat rozlišení 1024×768 v 8bitové barevné hloubce a 1152×864 v 16bitové barevné hloubce. Je nutno podotknout, že volba Modes obsahuje jméno rozlišení, shodné s některým jménem Modeline v sekci Monitor. Jak vidno, ani jedno z rozlišení nevyužívá možnost virtuální obrazovky.

Modelines
Jak jsem již dříve naznačil, parametr Modeline je klíčovým prvkem v nastavení rozlišení, případně obnovovací frekvence. Je velice pravděpodobné, že vás ta řada nepochopitelných čísel vyděsila jako mě. I přes hrozivý dojem, který vyvolává, to však není tak zlé. Stačí si totiž zjistit šířku pásma (bandwidth), kterou váš monitor podporuje, určit si rozlišení a pak již jenom postupovat podle jednoduchého vzorce, se kterým se teď seznámíme.
Nejdříve si tedy řekněme, co která hodnota znamená:

Tabulka č. 5
Name Dot clock Horizontal timing Vertical timing
XR HSS HSE VFL YR VSS VSE VFL
„1152×864“ 100 1152 864

Name

je jméno režimu, kterým je třeba se odkazovat v sekci Screen, respektive v subsekci Display.
Dot clock obsahuje hodnotu, která ovlivňuje výslednou obnovovací frekvenci. Lze do ní dosadit šířku pásma monitoru (bandwidth), ale může nastat situace, že se se Xserver odmítne spustit s hláškou, že maximální možná frekvence byla překročena. Logicky je zde třeba se přizpůsobit slabšímu z dvojice zařízení monitorgrafická karta. Maximální hodnotu lze snadno zjistit zavoláním
X -probeonly -bpp 16
POZOR: je důležité použít parametr -bpp (bitová barevná hloubka), protože Xserver vrací jinou hodnotu například pro 8bitovou nebo pro 16bitovou barevnou hloubku.
XR je šířka obrazu v pixelech
HSS je začátek horizontálního synchronizačního pulzu
HSE je konec horizontálního synchronizačního pulzu
HFL je celková délka horizontálního snímku
YR je výška obrazu v pixelech
VSS je začátek vertikálního synchronizačního pulzu
VSE je konec vertikálního synchronizačního pulzu
VFL je celková délka vertikálního snímku

Podrobnější popisy parametrů HSS, HSE, HFL, VSS, VSE a VFL najdete například v dokumentaci k Xserveru nebo ve VideoTimings HOWTO. My se nyní spokojíme s postupem, jak tyto hodnoty vypočítat. Je to opravdu jednoduché:

HFL = XR / 0,8
Pokud není výsledek dělitelný osmi, je třeba jej zaokrouhlit dolů na nejbližší číslo, které dělitelné je
HFL = 1152 / 0,8 = 1440 (1440 je dělitelné osmi, takže není třeba zaokrouhlovat)

VFL = YR * 1,05
Opět, pokud není výsledek dělitelný osmi, je třeba jej zaokrouhlit dolů na nejbližší číslo, které dělitelné je
VFL = 864 * 1,05 = 907,2 : není dělitelné osmi, zaokrouhlíme tedy výsledek na hodnotu 904

Tabulka teď vypadá takto:

Tabulka č. 6
Name Dot clock Horizontal timing Vertical timing
XR HSS HSE VFL YR VSS VSE VFL
„1152×864“ 100 1152 1440 864 904

Zbylé hodnoty se počítají ještě snáze:

HSS = XR + 32
HSS = 1152 + 32 = 1184

HSE = HFL – 32
HSE = 1440 32 = 1408

VSS = YR + 3
VSS = 864 + 3 = 867

VSE = VSS + 3
VSE = 867 + 3 = 870

A všechno pohromadě:

Tabulka č. 7
Name Dot clock Horizontal timing Vertical timing
XR HSS HSE VFL YR VSS VSE VFL
„1152×864“ 100 1152 1184 1408 1440 864 867 870 904

No a to je takřka vše. Těmito výpočty jsme získali všechny potřebné hodnoty do řádku Modeline, zbývá již jen patřičně upravit konfigurační soubor a restartovat XWindows. Možná si teď ťukáte na čelo a ptáte se, jaktože mám v této tabulce trochu jiné hodnoty, než jsem uvedl na začátku v příkladu. Je to proto, že jsem ještě použil program xvidtune pro doladění pozice a rozměru obrazu. Xvidtune získáte s XWindows a je to velice užitečná pomůcka. Jeho výhodou je, že s ním lze testovat různá nastavení za běhu XWindows bez nutnosti zásahu do konfiguračního souboru a následných restartů Xserveru. Nezapomeňte ale, že výsledek práce s xvidtune se nikam neukládá, stejně je nutné nechat si zobrazit Modeline a ten pak ručně zadat do konfigurace.

CS24_early

Obrázek, xvidtune



Uvedené postupy mohou opravdu dávat netušené výsledky. Osobně jsem z již postarší karty S3 868 vymačkl rozlišení 1152×864 s vertikální obnovovací frekvencí 77 Hz. Pro srovnání: s originálním ovladačem přímo od S3 jsem ve Windows (když jsem je ještě měl :) dosáhl frekvence pouhých 65 Hz.
Za zmínku stojí i to, že není třeba se omezovat na zaběhaná rozlišení, lze experimentovat i s úplně jinými. Já jsem například dočasně používal rozlišení 1100×825 pixelů. Potíž těchto „zparchantělých“ rozlišení je v tom, že u nich často dochází ke zkreslení geometrie nebo barevného podání a vyladění už je otázkou mnoha pokusů.

POZOR
Nemohu si odpustit obligátní varování: nastavení špatných parametrů může vést až k nevratnému poškození monitoru (za což já nenesu žádnou odpovědnost :)! Přesto, u většiny nových digitálních monitorů se není třeba této krajnosti obávat. Monitor se raději v případě překročení limitních hodnot sám vypne než by připustil poškození.
Všechno, co zde bylo napsáno platí pro XFree86R6, ale není vyloučeno, že budou uvedené postupy fungovat i se staršími verzemi.

Tento dokument si neklade za cíl vysvětlit kompletně problematiku zobrazovacích mechanismů XWindows, ale spíše poskytnout zvídavějším začítečníkům vodítko při konfiguraci grafického subsystému.

Zdroje
XFree86 Video Timings HOWTO
Resolution X-Windows Newbie HowTo

Byl pro vás článek přínosný?

Autor článku