For years, it's been a major failing of Linux (and X11 in general) that it's not been possible just to plug in a new monitor and be able to extend your desktop on the fly. This is just about OK for desktop machines, which don't tend to change their configuration very often. It really, really sucks for laptops, though. It's really quite painful (and potentially quite embarrassing) to have to kill X and restart it before you can plug your laptop into a data projector at a conference.
But... X now has a thing called XRandR, that allows you to reconfigure your X display on the fly without restarting anything. I've got a couple of talks coming up shortly, so I thought I'd have a play.
It turns out to be really quite snazzy, although the point-and-drool tooling isn't up to much at the moment. (I tried grandr, but I couldn't get it to do very much).
The tool to use is called
xrandr. Just run it without any options to see your current configuration. This will show you the outputs (i.e. what could be connected to a monitor) you have available, and what resolutions they currently understand:
hrm@willow:~$ xrandr Screen 0: minimum 320 x 200, current 1680 x 1050, maximum 2960 x 1050 VGA disconnected (normal left inverted right) 1280x800 60.0 1280x768 60.0 1024x768 60.0 800x600 60.3 640x480 59.9 LVDS connected 1680x1050+0+0 (normal left inverted right) 331mm x 207mm 1680x1050 59.9*+ 1280x800 60.0 1280x768 60.0 1024x768 60.0 800x600 60.3 640x480 59.9 1280x1024 60.0 TMDS-1 disconnected (normal left inverted right) TV disconnected (normal left inverted right)
All well and good... but you can do other, more funky things with it now. For example, plug in an external monitor, and you can stick it to the right of your current screen:
xrandr --output VGA --auto --mode 1280x1024 --right-of LVDS
or resize your main display, and mirror it on the second monitor:
xrandr --addmode LVDS 1280x1024 xrandr --output LVDS --mode 1280x1024 xrandr --output VGA --auto --mode 1280x1024 --same-as LVDS
or... well, there's lots of options. Change the refresh rate, change the DPI settings, move a monitor around on your desktop, reflection, rotation...
The only thing you have to keep an eye on is the size of the available framebuffer. If you get an error about the screen being too small, you will probably need to supply the
--fb option to give it an upper bound on the size of the available screen. Or do what I did, and add
Virtual 2960 1050
to the "Display" subsection of the "Screen" section(s) in your xorg.conf file. That tells X how large a framebuffer to allocate for your whole desktop, and will allow you to extend your display across to additional monitors.
Armed with my new-found powers of control over X11, I wrote a script that will flip between the three main configurations I want for my laptop (stand-alone; desktop with extension screen; presentation mode). That's attached at the bottom of this post, if you want to take a look.