Před příchodem RandRu se musel při změně parametrů obrazu restartovat X server. Existovaly možnosti jako klávesové zkratky Ctrl + Alt + +/-, které přepínaly rozlišení monitoru, ale tam možnosti „online“ konfigurace končily. Tento nedostatek začal být řešen vývojáři X.orgu a výsledkem je jednoduchý protokol, přes který se dá komunikovat s X serverem a dělat na něm změny, aniž bychom ho museli restartovat.
RandR tak přinesl potřebnou pružnost konfigurace, která je u konkurenčních systémů již delší dobu a umožnil pohodlně používat převážně notebooky a jiná mobilní zařízení tak, jak si to všichni přejeme.
Stále sice existují problémy závislé především na kvalitě ovladače. Ne všechny ovladače RandR podporují a ne všude jede bez problémů. Naštěstí klonování obrazu a spojení dvou monitorů do jedné plochy je většinou bezproblémové.
Kontrolu nad možnostmi RandRu nám umožní více nástrojů. My se dnes podíváme na dva z nich. Jeden je součástí balíku X.org a druhý je klikací. Oba dva se ovládají pohodlně a jde tedy pouze o preferenci uživatelů, případně potřeb. Konzolové „nastavovátko“ se nám bude hodit například u konfigurace multimediálních tlačítek přístupných přes acpid. Klikací nástroj oceníme, když potřebujeme rychle přepnout do nějaké nezvyklé monitorové konfigurace. Různé distribuce také disponují vlastními nástroji na správu X serveru, ale není v silách tohoto článku se jim věnovat. Uvidíte, že pro naše potřeby bude stačit nakonfigurovat pár klávesových zkratek, protože RandR disponuje vcelku solidní autokonfigurací.
Začínáme u xorg.conf
První překážka, která by nás mohla odradit od dalšího počínání, se skrývá hned při startu X serveru. Problém je ve velikosti plochy. Ta se nastavuje podle maximální hodnoty aktuálně připojeného monitoru a nebere ohled na monitory, které třeba připojíme později. To se stává často u notebooků při cestování mezi různými pracovišti apod.
Cesta ven vede přes úpravu souboru xorg.conf:
Section "Screen"
Identifier "Screen1"
Device "Device1"
DefaultDepth 24
SubSection "Display"
Depth 16
Virtual 1920 1080
EndSubSection
SubSection "Display"
Depth 24
Virtual 1920 1080
EndSubSection
EndSection
V našem konfiguračním souboru xorg.conf najdeme sekci „Screen“ a přidáme do ní řádky začínající na „Virtual“. Pokud jsou již na místě, pouze upravíme na námi požadované hodnoty. V tomto případě se jedná o Asus Eee a připojuji ho pouze k LCD televizi, takže není potřeba nastavovat vyšší rozlišení. Pokud ale přemýšlíte o propojení dvou monitorů pro získání velké plochy, upravte si hodnoty tak, aby se do nich oba monitory vešly.
Některé distribuce tuto hodnotu nastavují při konfiguraci během instalace a dále nepočítají se změnou. Pokud tedy nechcete mít problémy s ruční konfigurací, tak připojte monitory/televize/projektory na výstupy již při instalaci.
Hodnoty také nemusíte upravovat, jsou-li oba monitory na místě při startu X serveru.
xrandr
Pro práci s RandR z příkazové řádky můžeme použít nástroj xrandr, který máte pravděpodobně již v systému. Dává nám plnou kontrolu na možnostmi RandR a zobrazuje o aktuálním stavu všechny důležité informace.
Screen 0: minimum 320 x 200, current 1024 x 600, maximum 1920 x 1080
VGA connected (normal left inverted right x axis y axis)
1280x1024 59.9
1280x960 59.9
1152x864 74.8
1024x768 75.1 70.1 60.0 43.5
1024x600 60.0
800x600 72.2 75.0 60.3 56.2
800x480 60.0
640x480 75.0 72.8 60.0 59.9
720x400 87.8 70.1
640x400 76.5 85.1 70.1
640x350 70.1
LVDS connected 1024x600+0+0 (normal left inverted right x axis y axis) 220mm x 129mm
1024x600 60.0*+ 65.0 60.0
800x600 60.3
800x480 60.0
640x480 59.9
Monitory po připojení konektoru dávají většinou správné informace o svých možnostech. Díky tomu nemusíte pokaždé nastavovat ručně módy definující rozlišení, frekvenci a další hodnoty. Na prvním řádku vidíme informace o aktuální pracovní ploše. Těch může být i více a je to závislé na konfiguraci vašeho X serveru. Vidíme, že minimální rozlišení může být 320×200 a maximální na 1920×1080. Maximální hodnotu jsme si nastavili výše pomocí parametru Virtual. Konkrétně u tohoto Eee je maximální hodnota ve výchozím stavu nastavena na 1024×768, což je maximální rozlišení, které můžeme s LVDS použít, i když ho integrovaný monitor nezobrazí.
Další řádky už ukazují jednotlivé monitory připojené ke Screen0. U každého z nich se objeví seznám módů, které na něm mohou být nastaveny a aktuálně vybraný mód. Módy lze během provozu přepínat.
První krůčky
Než začneme s prvními pokusy, zkusíme si spustit xrandr s parametrem –auto:
xrandr --auto
Tím vyzkoušíme, co pro nás X server vybral za jeho optimální nastavení. V mnoha případech zde další konfigurace končí.
Více informací o dostupných módech a připojených monitorech získáme pomocí:
xrandr --dryrun
Otáčení obrazu se provádí přes:
xrandr -o normal|inverted|left|right
To se hodí například při čtení formátu A4 a možností natočit si monitor.
Rychlou změnu velikosti plochy můžeme provést také:
xrandr --fb 1024x768
Tímto neodpadá nastavení xorg.conf, ale měníme pouze hodnotu current, kterou můžeme najít na výpisu výše. Za hodnotu maximum se nedostaneme.
cx@godie ~ $ xrandr --fb 2000x2000
xrandr: screen cannot be larger than 1920x1080 (desired size 2000x2000)
Xrandr disponuje opravdu vším možným pro práci s obrazem, ale ne všechno je podporováno ovladači.
Přepínání monitorů
Pro práci s jednotlivými výstupy se používá přepínač –output, za který dáme název výstupu. Ten je pojmenovaný často podle typu konektoru, tedy LVDS, DVI, VGA,S-VIDEO apod. Dále následují přepínače popisující, co se má s obrazem na daném výstupu udělat. Tou nejčastější možností je jejich vypínání a zapínání.
xrandr --output LVDS --off
xrandr --output VGA --auto
Xrandr umožňuje několik akcí spojovat do jednoho volání. Můžeme tedy realizovat přepnutí výstupu i takto:
xrandr --output LVDS --off --output VGA --auto
a zpět
xrandr --output LVDS --auto --output VGA --off
X server vybírá jako výchozí tzv. preferovaný mód. To je ten, který se nejvíce blíží hodnotě DPI 96 pixelů. Nemusí tak nutně být vybráno rozlišení nejvyšší nebo výrobcem doporučované. V takovém případě není nic jednoduššího než mód změnit:
xrandr --output LVDS --mode 800x600
Název módu se vytváří z rozlišení, ale pokud si vytvoříte mód svůj, tak ten se může jmenovat i jinak.
Dva monitory vedle sebe – klonování obrazu
Pokud na jednom screenu spustíme dva monitory najednou, budeme mít stejný obraz na obou dvou. Tomu říkáme klonování a svoje místo si najde na většině prezentací.
xrandr --output VGA --output LVDS --auto
Pokud nejsou monitory stejné, resp. nemají stejné rozlišené, musíme nastavit nový mód.
Dva monitory vedle sebe – větší plocha
Taktéž častým použitím více monitorů je vytvoření velké virtuální plochy.
xrandr --output VGA --right-of LVDS
Umístění monitorů můžeme měnit pomocí –left-of (v levo), –right-of (v pravo), –above (nahoře) a –below (dole). Za tento parametr přidáme název výstupu, který chceme změnit.
Cesta zpět ke klonovanému výstupu vede přes parametr –same-as:
xrandr --output VGA --same-as LVDS
Změna a vytváření módů
U nastavování jednotlivých výstupu ještě zůstaneme. Pokud se stane, že potřebujeme nějaké méně standardní rozlišení, můžeme přidat k výstupu vlastní mód. Nejprve si ho vytvoříme. Může to být prakticky jakékoli rozlišení. K tomu použijeme utilitku gtf:
gtf 850 438 60
# 848x438 @ 60.00 Hz (GTF) hsync: 27.24 kHz; pclk: 28.33 MHz
Modeline "848x438_60.00" 28.33 848 864 944 1040 438 439 442 454 -HSync +Vsync
První parametr je šířka obrazu, druhý výška a poslední obnovovací frekvence.
Máme-li mód vygenerovaný, přidáme ho do ringu s ostatními:
xrandr --newmode "848x438_60.00" 28.33 848 864 944 1040 438 439 442 454 -HSync +Vsync
Takto přidaný mód ještě musíme přiřadit výstupu:
xrandr --addmode LVDS 848x438_60.00
Je-li vše na svém místě, můžeme si nechat vypsat seznam módů:
xrandr
[...]
LVDS connected 1024x600+0+0 (normal left inverted right x axis y axis) 220mm x 129
[...]
848x438_60.00 60.0
Případně výstup rovnou přepnout:
xrandr --output LVDS --mode 848x438_60.00
Pokud nejsme s výsledkem spokojeni, není nic lehčího než se vrátit k preferovanému módu:
xrandr --output LVDS --prefer
grandr
Manipulaci s výstupy můžeme provádět i pomocí klikátka grandr. To sice nedisponuje takovou řadou možností jako xrandr, ale zase umožní provádět změny rychleji.
Grandr obsahuje 4 záložky umožňující:
- Změnu módů
- Změnu rotace
- Změnu polohy monitorů
- Nastavit klávesové zkratky
Bohužel, jakákoli změna přes grandr na mojí grafické kartě Intel spolehlivě shodí X server na lopatky a logy mlčí, takže nemohu naplno vyzkoušet, jak funguje. Kolega používající Debian nemá žádné problémy při používání a grandr si chválí. Osobně preferuji xrandr v kombinaci s klávesovými zkratkami. Největší výhodu grandr vidím v možnosti vizuálně rozložit monitory pomocí drag&drop. Nechybí ani volba nastavit monitory tak, aby rozšiřovaly plochu nebo oba zobrazovaly to samé.
Závěr
Xka nejsou vždy nakloněny nějakým změnám a i na dvou různých grafických kartách od Intelu můžeme čekat různé chování. Na mém starém notebooku s jednou z těchto grafických karet mi nastavení volby Virtual v xorg.conf vypnulo 3D akceleraci, někdy se zas špatně nadetekuje dpi apod.
Někteří výrobci se zase rozhodli RandR nepodporovat a mají na podobné nastavování vlastní utilitky. Dnes je naštěstí podpora na dobré úrovni a na většině strojů lze s RandR více či méně pracovat.