Za oΦi zdrav∞j╣φ...

19. 5. 1999on-line novΘ okno dom∙ p°edchozφ Φlßnek nßsledujφcφ Φlßnek

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 800x600 nebo 1024x768 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φ 1024x768 v 8bitovΘ barevnΘ hloubce a 1152x864 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ß:

NameDot clockHorizontal timingVertical timing
XRHSSHSEVFLYRVSSVSEVFL
"1152x864"1001152 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φ monitor¡grafickß 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 Video¡Timings 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:

NameDot clockHorizontal timingVertical timing
XRHSSHSEVFLYRVSSVSEVFL
"1152x864"1001152 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∞:

NameDot clockHorizontal timingVertical timing
XRHSSHSEVFLYRVSSVSEVFL
"1152x864"1001152118414081440 864867870904

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.

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φ 1152x864 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φ 1100x825 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

Autor: Michal Krause (jinΘ Φlßnky tohoto autora)
Sekce: Praxe


Diskuse

13. 8. 2002 13:02:09 - Men╣φ oprava (David Alimov)
V kapitole: Malß exkurze do sv∞ta monitor∙, je t°eba up°esnit v∞tu: 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. V∞ta je platnß pro monitory, je╛ nejsou typu LCD, u nich je princip "rozsv∞covßnφ" jinaΦφ. Jinak Φlßnek chvßlφm. David Alimov

8. 12. 1999 15:46:33 - Jeste pripojuji par vzorecku p... (Honza Marek)
Jeste pripojuji par vzorecku pro vypocet DotClock frekvence. Oznaceni pokud mozno prebiram od p. Krauseho, tedy: DC: dot clock [MHz] HFL: celkovß dΘlka horizontßlnφho snφmku (oznaΦenφ stejnΘ, jako v Φlßnku, je tam ale obΦas chybiΦka v tabulce) [pixel] VFL: celkovß dΘlka vertikßlnφho snφmku (znovu p°evzato z Φlßnku) [pixel] fH: horizontßlnφ obnovovacφ frekvence monitoru [kHz] fV: vertikßlnφ obnovovacφ frekvence monitoru [Hz] vztahy: 1) DC=(fH*HFL)/10^3 2) DC=(fV*HFL*VFL)/10^6 doporuΦuji vzφt hornφ hranici obnovovacφch frekvencφ, kterou monitor podporuje a dosadit do t∞chto dvou vztah∙ a potom vzφt men╣φ z obou hodnot. Samozrejme muze byt limitujicim faktorem graf. karta, jaji hodnoty ale zjistime pomoci zminovaneho: X -probeonly -bpp X Zdravi Honza Marek


on-line novΘ okno dom∙ p°edchozφ Φlßnek nßsledujφcφ Φlßnek