Klonování obrazu a dva monitory v Linuxu

11. 12. 2008
Doba čtení: 7 minut

Sdílet

Pomalu každý dnešní počítač má víc než jeden výstup na monitor. Dnešní Linux umí stejně jako konkurenční systémy tohoto druhého výstupu využít pro připojení dalšího monitoru, ať už za účelem zvětšení pracovní plochy nebo třeba připojení projektoru k prezentaci. Pro práci s těmito možnostmi X serveru slouží protokol RandR.

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/tele­vize/projekto­ry 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

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é.

bitcoin_skoleni

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.

Autor článku

Adam Štrauch je redaktorem serveru Root.cz a svobodný software nasazuje jak na desktopech tak i na routerech a serverech. Ve svém volném čase se stará o komunitní síť, ve které je již přes 100 členů.