Xrandr: poderosa eina per configurar el teu monitor

En aquesta oportunitat, expliquem com utilitzar xrandr, Una eina de l'terminal que serveix per corregir la resolució del teu monitor, els seus taxes de refresc, Etc. i fins i tot serveix per manipular més d'un monitor.

Miguel Suárez Patiño és un altre dels guanyadors de la nostra competència setmanal: «Vaig compartir el que saps sobre Linux«. Felicitacions Miguel!

L'usuari normal, principalment de Windows o Apple, no entenen molt bé a la gent que li apassiona Linux i que es passen molt de temps a la consola de comandaments escrivint "coses rares".

Això que explicaré avui, és un d'aquells dies en què et sents especialment orgullós de Linux. Aquesta és la història:

El meu estimat i vell monitor CRT de marca HP pavilion MX70, m'ofereix un ampli rang de resolucions, però el meu Linux Mint LXDE no el reconeix i em mostra una bona resolució de 1024 × 768 però amb només 60 hz de refresc, cosa que no és molt bo per a la vista. En teoria el monitor pot arribar a 85 hz amb aquesta resolució.

¿I que faig ara? Doncs el de sempre, anar a la línia d'ordres i A JUGAR!

usant xrandr

Per modificar les resolucions existeix la comanda "xrandr" (X Resize & Rotate). Amb aquesta comanda es configura la resolució de pantalla, però a més es poden afegir noves resolucions sempre que les suporti el monitor.

Cal comentar que hi ha diverses interfícies gràfiques: grandr, arandr.

Per veure les resolucions detectades pel sistema només cal trucar a aquesta comanda i veure el resultat, en el meu cas:

informiguel ~ $ xrandr Screen 0: minimum 320 x 200, current 1024 x 768, maximum 4096 x 4096 VGA-0 connected 1024x768 + 0 + 0 (normal left inverted right x axis i axis) 0mm x 0mm 1024x768 60.0 800x600 60.3 56.2 848x480 60.0 640x480 59.9 S-video disconnected (normal left inverted right x axis i axis)

Com es pot veure, per una resolució de 1024 × 768 només ofereix 60.0 Hz.

Bé, vaig a afegir la resolució en la que millor em trobo i que ofereix meu monitor: 1024 × 768 a 85 Hz. Evidentment cada monitor té les seves pròpies característiques que cal consultar.

El problema està en que per crear una nova resolució es necessiten unes dades "molt estranys" com són la freqüència vertical, horitzontal, màxima, mínima, total, ... Però Linux també té la solució amb la comanda "CVT", una utilitat per calcular les maneres VESA necessaris per arribar a una resolució. Bé, si jo vull 1024 × 768-85 hz escric:

informiguel ~ $ CVT 1024 768 85 # 1024x768 84.89 Hz (CVT 0.79M3) hsync: 68.68 kHz; pclk: 94.50 MHz Modeline "1024x768_85.00" 94.50 1024 1096 1200 1376 768 771 775 809 -hsync + VSync

També pots provar amb "gtf" que fa més o menys el mateix:

informiguel ~ $ gtf 1024 768 85 # 1024x768 @ 85.00 Hz (GTF) hsync: 68.60 kHz; pclk: 94.39 MHz Modeline "1024x768_85.00" 94.39 1024 1088 1200 1376 768 769 772 807 -HSync + VSync

I d'aquesta manera apareix el "Modeline" que he de fer servir amb "xrandr". No t'espantis si els hz no coincideixen de el tot (94.50 en lloc de 85).

Pas a afegir aquesta resolució copiant el "modeline" obtingut: (un detall, quan es posa una opció amb el seu nom llarg com "newmode" va precedit de 2 guions, potser no es notin gaire, mentre que altres vegades només va 1 guió com en el cas de "hsync")

informiguel ~ $ xrandr --newmode "1024x768_85.00" 94.50 1024 1096 1200 1376 768 771 775 809 -hsync + VSync

Si comprovem el resultat:

informiguel ~ $ xrandr Screen 0: minimum 320 x 200, current 1024 x 768, maximum 4096 x 4096 VGA-0 connected 1024x768 + 0 + 0 (normal left inverted right x axis i axis) 0mm x 0mm 1024x768 60.0 * 800x600 60.3 56.2 848x480 60.0 640x480 59.9 S-video disconnected (normal left inverted right x axis i axis) 1024x768_85.00 (0x137) 94.5Mhz h: ample 1024 start 1096 end 1200 total 1376 skew 0 clock 68.7KHz v: height 768 start 771 end 775 total 809 clock 84.9Hz

Es veu el nou "Modeline" creat. M'agrada com sona "Modeline"! Si un dia tinc un gat ho diré així.

Bé, seguim, ara he d'afegir aquesta nova manera a la llista de modes disponibles:

informiguel ~ $ xrandr -addmode VGA-0 1024x768_85.00

El de "VGA-0", si et fixes en els resultats de "xrandr", és com es diu la meva targeta gràfica. Veiem el resultat, Perfecte!

informiguel ~ $ xrandr Screen 0: minimum 320 x 200, current 1024 x 768, maximum 4096 x 4096 VGA-0 connected 1024x768 + 0 + 0 (normal left inverted right 1024x768 60.0 * 800x600 60.3 56.2 848x480 60.0 640x480 59.9 1024x768_85.00 84.9 S -video disconnected (normal left inverted right x axis i axis)

Ara només queda aplicar aquesta resolució a l'monitor:

informiguel ~ $ xrandr --output VGA-0 --mode 1024x768_85.00

Un parpelleig i el monitor es posa més guapo que mai.

I si vull posar una resolució de 800 × 600 amb un taxa de refresc de 60 Hz (veig que hi ha 2 refrescos disponibles en aquesta manera, 60.3 i 56.2)? Es pot fer d'aquesta manera:

informiguel ~ $ xrandr -s 800x600 -r 60

Fixeu-vos que en el refresc es ús 60 en lloc de 60.3, ja que aquest últim no ho admetia. Ara anem a tornar a la resolució maca:

informiguel ~ $ xrandr -s 1024x768_85.00

Si prengués per defecte el refresc a 60 hz, llavors escrbimos:

informiguel ~ $ xrandr -s 1024x768_85.00 -r 85

I si m'equivoco i vull treure-ho tot? Doncs res, som-hi. Per esborrar aquesta resolució de la llista de maneres disponibles:

informiguel ~ $ xrandr --delmode VGA-0 1024x768_85.00

Si visualitzo el resultat:

informiguel ~ $ xrandr Screen 0: minimum 320 x 200, current 1024 x 768, maximum 4096 x 4096 VGA-0 connected 1024x768 + 0 + 0 (normal left inverted right x axis i axis) 0mm x 0mm 1024x768 60.0 * 800x600 60.3 56.2 848x480 60.0 640x480 59.9 S-video disconnected (normal left inverted right x axis i axis) 1024x768_85.00 (0x136) 94.5Mhz h: ample 1024 start 1096 end 1200 total 1376 skew 0 clock 68.7KHz v: height 768 start 771 end 775 total 809 clock 84.9Hz

Ja està esborrat de la llista, però ara apareixen les dades de la manera com s'havia creat (-newmode) anteriorment. Per esborrar això també:

informiguel ~ $ xrandr --rmmode 1024x768_85.00

Veiem el resultat:

informiguel ~ $ xrandr Screen 0: minimum 320 x 200, current 1024 x 768, maximum 4096 x 4096 VGA-0 connected 1024x768 + 0 + 0 (normal left inverted right x axis i axis) 0mm x 0mm 1024x768 60.0 * 800x600 60.3 56.2 848x480 60.0 640x480 59.9 S-video disconnected (normal left inverted right x axis i axis)

Tot quedo com a el principi de l'article ...

I per acabar, jo es que ets un bromista, així que prova això:
En primer lloc escriu això, que no fa canvis en aquest moment:

informiguel ~ $ xrandr --output VGA-0 --rotate normal

I ara prova el següent tenint en compte que per treure la broma has de repetir la instrucció anterior (n'hi ha prou amb seleccionar-la amb les tecles de cursor):

informiguel ~ $ xrandr --output VGA-0 --rotate left

Fins aquí tot molt bonic però hi ha un problema, a l'reiniciar l'equip les configuracions es perden. No em sembla bona idea ajustar el refresc de pantalla cada vegada que entrem en l'equip, ha d'haver una forma de deixar-ho fix. Anem a fer-ho.

A Linux hi ha un fitxer de configuració que a poc a poc ia mesura que el maquinari va ser millor reconegut per les distribucions, va anar quedant en l'oblit. El seu nom amb ruta completa és «/etc/X11/xorg.conf». El fitxer de configuració de tots els paràmetres que fan que l'entorn gràfic funcioni.

En LXDE (entorn d'escriptori X11 lleuger) el fitxer no existeix, amb la qual cosa cal crear-lo, cosa que no és fàcil. Una possible solució és fer el següent:

Ens vam sortir de l'entorn gràfic, anem a una terminal prement CTRL + ALT + F1, recordar que l'entorn gràfic és CTRL + ALT + F7). Ens validem i "apaguem" l'entorn gràfic:

informiguel ~ $ sudo /etc/init.d/lxdm stop

A continuació executem la configuració de X:

informiguel ~ $ sudo X -configure

Es crea un fitxer de nom "xorg.conf.new" el qual és el que hem de moure al seu lloc i modificar:

informiguel ~ $ mv xorg.conf.new /etc/X11/xorg.conf

Si tot està correcte i volem tornar a arrencar l'entorn gràfic:

informiguel ~ $ sudo /etc/init.d/lxdm start

Hi ha una altra solució que pot ser millor, arrenques amb una ditribución de Linux en "CD Live" i còpies el fitxer la ruta completa és "/etc/X11/xorg.conf" i el pegues teu distribució. Si aquesta distribució va detectar bé el monitor es van acabar els problemes, en cas contrari cal retocar el fitxer amb les dades de l'refresc de pantalla i resolució que vulguis. Com a exemple, jo vaig haver d'afegir el següent perquè el refresc fos l'adequat:

Section "Monitor" Identifier "Monitor genèric" Option "DPMS" HorizSync 30-70 VertRefresh 50-120 Modeline "1024x768_85.00" 94.39 1024 1088 1200 1376 768 769 772 807 -HSync + VSync Option "PreferredMode" "1024x768_85.00" EndSection Section "Screen" Identifier "Default Screen" Device "ATI Technologies, Inc. Radeon RV250 If [Radeon 9000 Pro]" Monitor "Monitor genèric" DefaultDepth 24 Option "AddARGBGLXVisuals" "True" Option "Metamode" "1024x768_85.00 +0+ 0 "Option" UseEdid "" False "Subsection" Display "Depth 1 Modes" 1024x768 "" 800x600 "" 640x480 "EndSubSec ................... etc

Molt important, buscar les característiques tècniques de l'monitor per conèixer la sincronització vertical i horitzontal. Com es veu en la imatge el "Modeline" és el que es va calcular amb la comanda "CVT".

Un cop realitzats els canvis necessaris ja queda tot a punt per executar-se automàticament la propera vegada que arrencades l'equip. Problema resolt.

Ara ¿Com li expliques a un Windows o de Mac, l'emoció que se sent a el sentir el "control" sobre la màquina (i no a l'inrevés)?

Em sembla que som una espècie en extinció… 

Aquells que vulguin seguir aprofundint els seus coneixements de xrandr, no deixin de llegir aquests vells articles publicats en aquest bloc.

Gràcies Miguel Suárez Patiño!
Querés participar en la nostra competència mensual i fer una aportació a la comunitat?
Només has de enviar-nos un correu incloent el truc o mini-tutorial de la teva autoria.