Feb 262011
 

randr

I bought a new monitor at home and added a second monitor in the office, so I had a lot to do with the graphics of my Linux setup.

What do you use in these cases? My preferred tool for all these operations is certainly xrandr .

In particular I’m used to use it from the command line version and after doing some tests using the syntax that i’ve found in the startup of the graphic environment.

In this article we will see some common use case.



The X Resize, Rotate and Reflect Extension (RandR) allows clients to dynamically change X screens, so as to resize, rotate and reflect the root window of a screen. The initial X11 design did not anticipate the need for dynamic resizing and it was necessary to restart the X server to bring about the changes. However, changing the screen resolution on the fly without changing the desktop size had been available under XFree86 since the beginning. RandR extension framework brought the ability to change display characteristics without restarting the X session. The extension framework allows laptops and handheld computers to change their screen size to drive external monitors at different resolutions than their built in screens.

If one’s desktop environment doesn’t provide a graphical tool for interfacing with this functionality, the xrandr command line tool may be used.

Most Linux distributions have the xrandr package in their repository, so you can install it using your package manager for ubuntu: aptitude install libxrandr2

Version

First check what version you are using:

#xrandr -v
 
xrandr program version       1.3.3
Server reports RandR version 1.3

In my example I will always use the version 1.3, some features may not work on former version.

Query

To find out what monitors are connected you can use the query command with the following:

#xrandr -q
 
Screen 0: minimum 320 x 200, current 1440 x 900, maximum 4096 x 4096
VGA-0 connected 1440x900+0+0 (normal left inverted right x axis y axis) 476mm x 268mm
   1920x1080      60.0 +
   1600x1200      65.0     60.0
   1680x1050      69.9     60.0
   1600x1024      60.2
   1400x1050      74.8     70.0     60.0     60.0
   1280x1024      75.0     60.0
   1440x900       75.0*    59.9
   1280x960       60.0
   1360x768       60.0     59.8
   1280x800       74.9     59.8
   1152x864       75.0     75.0     70.0     60.0
   1280x768       74.9     59.9
   1024x768       75.1     75.0     70.1     60.0
   832x624        74.6
   800x600        72.2     75.0     60.3     56.2
   848x480        60.0
   640x480        72.8     75.0     72.8     75.0     66.7     60.0     59.9     59.9
   720x400        70.1
DVI-0 connected 1440x900+0+0 (normal left inverted right x axis y axis) 476mm x 268mm
   1920x1080      60.0 +
   1600x1200      65.0     60.0
   1680x1050      69.9     60.0
   1600x1024      60.2
   1400x1050      74.8     70.0     60.0     60.0
   1280x1024      75.0     60.0
   1440x900       75.0*    59.9
   1280x960       60.0
   1360x768       60.0     59.8
   1280x800       74.9     59.8
   1152x864       75.0     75.0     70.0     60.0
   1280x768       74.9     59.9
   1024x768       75.1     75.0     70.1     60.0
   832x624        74.6
   800x600        72.2     75.0     60.3     56.2
   848x480        60.0
   640x480        72.8     75.0     72.8     75.0     66.7     60.0     59.9     59.9
   720x400        70.1
LVDS connected (normal left inverted right x axis y axis)
   1024x768       60.0 +   60.0
   1360x768       59.8
   800x600        60.3     59.9
   848x480        59.7
   720x480        59.7
   640x480        59.9     59.4
S-video disconnected (normal left inverted right x axis y axis)

In my output you can see that I connected both VGA and DVI (I am still doing tests with my new monitor) and that LVDS (laptop screen) is switched off and the S-video is not connected.

You can also see that with this simple command you can see all the resolution and refresh rate supported by the screens.

Basic use with screens

The basic use to give command to screens is xrandr --output SCREEN COMANDO, so for example to turn off the VGA screen you can use:

xrandr --output VGA-0 --off

Turning off an output media is useful sometimes, for example i’ve at work a screen with resolution 1600×1200 while my laptop screen is 1680×1050, i use the laptop in a docking station with the lid closed so turning off LVDS help in getting a good resolution on the screen.

Change the resolution of a screen

To change resolution size, you can use xrandr and the –mode option:

xrandr --output DVI-0 --mode 1440x900 --refresh 75

With this command you’ll switch your DVI screen at 1440×900 resolution and with a refresh rate of 75.

Cloning a screen

Assumed to attach a VGA output to your laptop and you want to clone your main screen, so what appears on the laptop screen is also shown on the external screen, nothing more easy with xrandr:

 xrandr --output LVDS --auto --output VGA --auto --same-as LVDS

In general use $ xrandr -q to discover the appropriate output names for your configuration. The –auto option will select the preferred resolution for each output, this is identified with a plus (+) in the $ xrandr -q listing and is normally the best resolution available.

2 screen side by side

it’s possible to create a virtual desktop putting 2 screen side by side, it is possible to set screen locations as –left-of, –right-of, –above and –below. Assuming displays sizes of the LVDS 1024×768 and the VGA 1200×1600 you can use one of these 2 commands:

$  xrandr --output LVDS --auto --output VGA --auto --right-of LVDS
and
$  xrandr --output LVDS --mode 1024x768 --pos 0x0 --output VGA  --mode 1600x1200 --pos 1024x0

They will give the same result, so i suggest using the first version, –right-of it’s much more easy to rembember and to use.

Automate it on login

You can automate your xrandr operation putting them in the directory /etc/X11/Xsession.d/, so for example you could add a file: /etc/X11/Xsession.d/45custom_xrandr-settings

# If an external monitor is connected, place it with xrandr
 
# External output may be "VGA" or "VGA-0" or "DVI-0" or "TMDS-1"
EXTERNAL_OUTPUT="VGA"
INTERNAL_OUTPUT="LVDS"
# EXTERNAL_LOCATION may be one of: left, right, above, or below
EXTERNAL_LOCATION="right"
 
case "$EXTERNAL_LOCATION" in
       left|LEFT)
               EXTERNAL_LOCATION="--left-of $INTERNAL_OUTPUT"
               ;;
       right|RIGHT)
               EXTERNAL_LOCATION="--right-of $INTERNAL_OUTPUT"
               ;;
       top|TOP|above|ABOVE)
               EXTERNAL_LOCATION="--above $INTERNAL_OUTPUT"
               ;;
       bottom|BOTTOM|below|BELOW)
               EXTERNAL_LOCATION="--below $INTERNAL_OUTPUT"
               ;;
       *)
               EXTERNAL_LOCATION="--left-of $INTERNAL_OUTPUT"
               ;;
esac
 
xrandr |grep $EXTERNAL_OUTPUT | grep " connected "
if [ $? -eq 0 ]; then
    xrandr --output $INTERNAL_OUTPUT --auto --output $EXTERNAL_OUTPUT --auto $EXTERNAL_LOCATION
    # Alternative command in case of trouble:
    # (sleep 2; xrandr --output $INTERNAL_OUTPUT --auto --output $EXTERNAL_OUTPUT --auto $EXTERNAL_LOCATION) &
else
    xrandr --output $INTERNAL_OUTPUT --auto --output $EXTERNAL_OUTPUT --off
fi

GUIs

Several graphical frontends are available for xrandr (all using GTK):

  • Grandr
  • URandR
  • ARandR
  • Zarfy — A GUI to libxrandr. It presents the user with visual representaion of active displays on an interactive map of the screen memory. Features free postioning, configuration saving, scripting for R&R and an alternate gui for switching between monitors.

Reference: http://www.thinkwiki.org/wiki/Xorg_RandR_1.2#Overview

Popular Posts:

Flattr this!

  5 Responses to “Overview of Xrandr”

  1. “You can automate your xrandr operation putting them in the directory /etc/X11/Xsession.d/, so for example you could add a file: /etc/X11/Xsession.d/45custom_xrandr-settings”

    A rather more sensible way to do this is to specify the layout in xorg.conf , as per:

    http://wiki.debian.org/XStrikeForce/HowToRandR12

  2. I have tried xrandr before and it really cool. Now I want triple monitor on Linux, do you know a good hardware solution for this? I have a plan to buy a new dekstop computer.

  3. If you want three (or more) monitor on one card look into amd’s 5000 or 6000 series cards. You will also want a modern distro. I have seen it work with hardward acc and all. Things like compiz start to break so I would disable it.

  4. You may also want to mention things like
    xrandr –prop
    xrandr –output LVDS1 –set “scaling mode” “Full”
    for those using LVDS1 and who want to play around with the hardware scaling modes. Why “scaling mode” and not PANEL_FITTING? Because that is seemingly what the property became known as in later versions of kernel… (so for xrandr purpose the intel man page is wrong about PANEL_FITTING on recent systems – https://bugs.freedesktop.org/show_bug.cgi?id=24331 )

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(required)

(required)

*