# [TIP] Dual monitor, intel e xrandr

## skypjack

Giusto per scansare ore e ore di vane ricerche a chi ha una scheda intel (nel mio caso intel 945gm) con supporto alle estensioni RandR 1.2, apro e chiudo una parentesi che spero possa evitare le pene dell'inferno a qualcuno.

Una piccola premessa per gli ignoranti (come ero io prima di documentarmi), nel senso che ignorano. Dalla documentazione ufficiale (http://gitweb.freedesktop.org/?p=xorg/proto/randrproto.git;f=randrproto.txt;a=blob), si legge che:

 *Quote:*   

> The X Resize, Rotate and Reflect Extension, called RandR for short, brings the ability to resize, rotate and reflect the root window of a screen. It is based on the X Resize and Rotate Extension as specified in the Proceedings of the 2001 Usenix Technical Conference [RANDR].

 

In pratica, riassumendo un argomento che ho scoperto essere noto a pochi, le estensioni RandR permetto di agire, nel nostro caso, a caldo sul server X. Cosa vuol dire questo? Semplice: inutile perdere ore a configurare il proprio xorg.conf per avere il dual monitor all'avvio e perdere la testa per un monitor che (maledetto) non rispetta le nostre condizioni; inutile avere doppie configurazioni, doppio monitor, doppia sezione Screen e via dicendo; inutile tutto!

Configurate il vostro X in modalità mono-monitor e limitatevi ad associare una Virtual Size massimo di 2048x2048 (pena, la disabilitazione del DRI), come nel mio leggero e pulito xorg.conf:

```

Section "ServerLayout"

        Identifier     "X.org Configured"

        Screen      0  "Laptop" 0 0

        InputDevice    "Mouse" "AlwaysCore"

        InputDevice "Touchpad" "CorePointer"

        InputDevice "Keyboard" "CoreKeyboard"

        Option "BlankTime" "10"

        Option "AIGLX" "true"

EndSection

Section "ServerFlags"

        Option  "AllowMouseOpenFail"    "on"

EndSection

Section "Files"

        RgbPath      "/usr/share/X11/rgb"

        ModulePath   "/usr/lib/xorg/modules"

        FontPath     "/usr/share/fonts/misc"

        FontPath     "/usr/share/fonts/75dpi"

        FontPath     "/usr/share/fonts/100dpi"

        FontPath     "/usr/share/fonts/Type1"

        FontPath     "/usr/share/fonts/corefonts"

        FontPath     "/usr/share/fonts/encodings"

        FontPath     "/usr/share/fonts/cyrillic"

        FontPath     "/usr/share/fonts/util"

        FontPath     "/usr/share/fonts/ttf-bitstream-vera"

EndSection

Section "Module"

        Load  "i2c"

        Load  "bitmap"

        Load  "ddc"

        Load  "int10"

        Load  "vbe"

        Load  "extmod"

        Load  "dbe"

        Load  "record"

        Load  "xtrap"

        Load  "dri"

        Load  "glx"

        Load  "freetype"

        Load  "type1"

        Load  "evdev"

EndSection

Section "InputDevice"

        Identifier "Keyboard"

        Driver "kbd"

        Option "CoreKeyboard"

        Option "AutoRepeat" "500 30"

        Option "XkbRules" "xorg"

        Option "XkbModel" "pc105"

        Option "XkbLayout" "it"

EndSection

Section "InputDevice"

        Identifier "Mouse"

        driver "mouse"

        Option "Protocol" "auto"

        Option "Device" "/dev/psaux"

        Option "ZAxisMapping" "4 5"

EndSection

Section "InputDevice"

        Identifier  "Touchpad"

        Driver      "synaptics"

        Option      "SendCoreEvents" "true"

        Option      "Device" "/dev/input/mouse0"

        Option      "Protocol" "auto-dev"

        Option      "LeftEdge" "1900"

        Option      "RightEdge" "5400"

        Option      "TopEdge" "1900"

        Option      "BottomEdge" "4000"

        Option      "FingerLow" "25"

        Option      "FingerHigh" "30"

        Option      "MaxTapTime" "180"

        Option      "MaxTapMove" "220"

        Option      "VertScrollDelta" "100"

        Option      "HorizScrollDelta" "100"

        Option      "MinSpeed" "0.02"

        Option      "MaxSpeed" "0.18"

        Option      "AccelFactor" "0.0010"

        Option      "EdgeMotionMinZ" "17"

        Option      "EdgeMotionMaxZ" "21"

        Option      "EdgeMotionMinSpeed" "30"

        Option      "EdgeMotionMaxSpeed" "35"

        Option      "LeftRightScrolling" "1"

        Option      "UpDownScrolling" "1"

        Option      "EmulatedMidButtonTime" "75"

        Option      "ZAxisMapping" "4 5"

        Option      "SHMconfig" "on"

EndSection

Section "Monitor"

        Identifier   "On Board"

        VendorName   "OnBoard"

        ModelName    "LCD"

        Modeline "1280x800"  83.46  1280 1344 1480 1680  800 801 804 828  -HSync +Vsync

        Modeline "1024x768"  64.11  1024 1080 1184 1344  768 769 772 795  -HSync +Vsync

        Modeline "800x600"  38.22  800 832 912 1024  600 601 604 622  -HSync +Vsync

        Modeline "640x480"  23.86  640 656 720 800  480 481 484 497  -HSync +Vsync

        Option "DPMS" "true"

EndSection

Section "Device"

        Identifier  "945GM"

        Driver  "i810"

        Option  "NoAccel"       "false"

        Option  "VBERestore"    "true"

        Option  "DRI"   "true"

        Option  "AccelMethod"   "exa"

        Option  "MonitorLayout" "CRT,CRT+LFP"

        Option  "XVideo"        "true"

        Option  "XvMCSurfaces"  "7"

        Option  "PageFlip"      "true"

        VideoRam        131072

        VendorName  "Intel Corporation"

        BoardName   "Mobile Integrated Graphics Controller"

        BusID       "PCI:0:2:0"

        Screen  0

EndSection

Section "Screen"

        Identifier "Laptop"

        Device  "945GM"

        Monitor "On Board"

        Option  "FlatPanelProperties"   "Scaling=Centered"

        DefaultDepth    24

        SubSection "Display"

                Depth   24

                Virtual 2048 2048

                Modes   "1280x800" "1024x768" "800x600" "640x480"

                Viewport        0 0

        EndSubSection

EndSection

Section "DRI"

        Mode    0666

EndSection

Section "Extensions"

        Option "Composite" "Enable"

EndSection

```

A questo punto, affidatevi al buon xrandr, un eseguibile i cui sviluppatori andrebbero ringraziati ogni volta che la nostra Gentoo splende su qualche proiettore o monitor esterno. In particolare, si nota quanto segue:

```

$ xrandr

Screen 0: minimum 320 x 200, current 1280 x 800, maximum 2048 x 2048

VGA disconnected (normal left inverted right)

LVDS connected 1280x800+0+0 (normal left inverted right) 303mm x 190mm

   1280x800       60.0*+

   1024x768       60.0  

   800x600        60.3  

   640x480        59.9  

TV disconnected (normal left inverted right)

```

Il monitor del laptop è denominato LVDS, l'uscita video VGA mentre è presente anche l'uscita TV che (onestamente) non ho avuto modo di provare.

Per attivare un monitor esterno portando la risoluzione di entrambi (laptop ed esterno) a 1024x768, clonando l'immagine, basta il comando:

```
xrandr --output VGA --mode 1024x768 --same-as LVDS --output LVDS --mode 1024x768
```

Ed ecco che l'inferno in un attimo diventa paradiso!

Vi assicuro che organizzando una serie di tasti ad-hoc associandoli ai diversi comandi per le risoluzioni e le combinazioni fra esse si ottine un risultato immediato senza doversi dannare alla ricerca del parametro sconosciuto. In ogni caso, gli argomenti sono intuitivi e non ho ancora incontrato alcun problema ad usare l'uscita VGA con nessun proiettore. Posso confermare il funzionamento con la funzione clone e con l'estensione del desktop (il right-of o left-of e via dicendo, per intenderci).

Sono stato breve, ma ora vado un po' di corsa. Se l'argomento interessa chiedete e approfondirò questo primo post.

Spero in ogni caso di aver dato utili suggerimenti a chi possiede le schede grafiche in questione.

Per ogni domanda, ovviamente, o in privato o su questa discussione.

Alla prossima.

----------

## flocchini

premesso che e' una settimana che ci impazzisco e ho trovato molti spunti che mi accingo a provare... Ti ringrazio in anticipo

Ma che driver stai usando x la intel? perche' i >2.0 (dichiarati compatibili con randr) non fanno vedere i video in XV e i 2.2.0 funzionano ma attraverso EXA che dire che e' instabile e' poco...  :Wink: 

EDIT: infatti non cambia nulla ahime'... Io ho il problema opposto al tuo, ossia uso stabilmente il pc in casa su dock station con monitor esterno. Io dovrei trovare il modo per switchare a caldo i 2 monitor in modo da "prendere, chiudere e andare" qdo devo uscire, senza stare a spegnere xorg e riavviarlo (soffro di sindrome da "in windows si puo' fare", mi rode). Il problema e' che il monitor del laptop e' 1280x800 e quello esterno e' 1680x1050. Ora, se io configuro i driver 1.7.4 con xorg differenti riesco a pilotarli entrambi uno alla volta, riavviando xorg. Con xrandr e 2.2.0 (inferiori non fanno vedere i video con XV) ho il problema che comunque secondo xorg il mio monitor e' 1280x800 e ad esempio se mando in full screen mplayer o xine me li manda max a 1280x800, che e' inaccettabile, nonostante i ldesktop di kde sia pero' correttamente settato a 1680 (anche secondo xrandr). Questo sorvolando sulle *pessime* prestazioni dei 2.2.0 che mi fanno scattare lo scrolling su firefox.

Idee? Soffro molto   :Laughing: 

----------

## skypjack

vesafb-ng per il framebuffer, i810 su X

----------

## flocchini

scusami, ho editato dopo che tu hai risposto... rileggi il post su  :Wink: 

----------

## skypjack

O sono fuso io o non ti sei siegato benissimo. Comunque, mi pare di aver capito che il problema lo hai impostando risoluzioni diverse sui due monitor. Al momento posso dirti che con alcuni software o guai del genere anche io. Ad esempio, laptop a 1280x800, proiettore a 1024x768. Se apro un pdf con acroread me lo espande a 1280x800 col risultato di un fuori schermo sul proiettore. Soluzione? non resta che portare entrambi a 1024x768.

Se trovo una soluzione alla cosa (o una motivazione, mi basterebbe) ti faccio sapere.

Propongo di usare questa discussione per riversare ogni commento o nuova scoperta che non esiterò ad integrare nel primo post, per i posteri.

----------

## flocchini

la cosa e' complicata, cmq credo che ci siamo capiti: tu vuoi usare il laptop e ogni tanto accendere il monitor esterno, io voglio usare il monitor esterno e passare su quello del laptop qdo stacco l'altro, in soldoni e' la stessa cosa  :Smile: 

Il mio problema e' che pur settando il monitor esterno correttamente a 1680x1050, quando mando a fullscreen alcuni programmi l'infame xorg mi prende come fullscreen la 1280x800 del monitor del laptop e non quella del monitor esterno, anche qdo il monitor del laptop e' spento e anche settandogli un virtual spropositato. Ho provato l'opzione "flipprimary" ma senza successo, per lui qdo si va a fullscreen si va in 1280x800, non di piu'  :Sad: 

----------

## skypjack

Allora, per quanto riguarda spengere un monitor è semplice. Ad esempio, per tirare già quello del portatile basta:

```
xrandr --output LVDS --off
```

Ovviamente prima assicurati di aver risvegliato il monitor esterno o ti sei fregato con le tue mani!!

Per quanto riguarda le risoluzioni, ancora credo ci sia da lavorare perché impostandone due diverse sui due monitor ho riscontrato diversi problemi anche io. Se qualcuno ha la soluzione è invitato a rivelarcela. Da canto mio, se scopro qualcosa lo aggiungo in testa. Tu, notificami!

----------

## lordalbert

per caso sai se è possibile anche con la intel i865 ?

L'uscita ce l'ha... però non sono mai riuscito a capire come funziona, neanche con windows....

----------

## skypjack

 *lordalbert wrote:*   

> per caso sai se è possibile anche con la intel i865 ?

 

Posta il risultato di un:

```
xrandr
```

Lanciato da shell senza parametri e col cavo del monitor esterno attaccato. Poi ne riparliamo.

----------

## fbcyborg

Ciao a tutti, 

ho letto questo thread e devo dire che è molto interessante perché anche io mi ritrovo con un notebook che ha una risoluzione di 1280x800, e devo dire che questa è davvero una risoluzione rompi scatole in questo caso.

Vorrei fare una domanda: perché se connetto lo stesso notebook con windows avviato, la schermata del notebook resta a 1280x800, mentre quella del video esterno (magari) va a 1024x768 e si autoregola senza problemi, mentre su Linux questo non succede?

Da qui, una seconda domanda: è possibile o no, avere un notebook connesso a un proiettore, il primo che mostra il desktop a 1280x800 e il secondo a 1024x768 contemporaneamente? Cosa che poi accade nel precedente caso.

Io al momento utilizzo la scheda video integrata della intel, e grazie a i810rotate riesco a switchare fra VGA->LCD ecc.

Quello che mi chiedo è la seguente cosa: tempo fa (anche più di un anno fa), quando collegavo il mio notebook al proiettore, bastava riavviare X con CTRL+ALT+BACKSPACE e la schermata si riadattava automaticamente al proiettore, disabilitando però al contempo la schermata del notebook. Perché questa cosa non funziona più ora?

----------

## lucapost

ho lasciato perdere la configurazione di xorg da quando ho scoperto il tool nvidia-settings, disponibile per tutte le schede nvidia più recenti.

----------

## fbcyborg

Sì lo so, anche io ho nvidia-settings, solo che a volte non riesco a sistemare lo stesso le cose.

Comunque il problema è sempre quello... 1280x800 è una risoluzione di cacca... e quando proietti all'esterno da di questi problemi.

Quindi sono costretto a portarla a 1024x768, e poi proiettare.

----------

## fbcyborg

Qualcuno sa darmi una mano con lo script che ho riportato in questo post?

----------

