With newer x.org releases, you can dynamically add, remove, rotate and change monitors without restarting X. RandR is the X protocol and the tool you use is xrandr. You'll need RandR 1.2 support or later.

I just purchased a 28" LCD that displays 1920x1200. It's a gigantic display that dwarfs my other monitors. To give you an idea of the size in practice, you can fit 319 columns in an xterm at full screen using xmonad with default 1 pixel borders. I ordered it from newegg and it only has one dead pixel. There's pretty significant bleed through so the black isn't very good. However, it's great for coding. It came with HDMI to DVI and VGA to VGA cables.

If you're debating between two smaller LCDs or one large LCD, I would go with one large LCD. I wasn't convinced of that until I bought this. I don't have an HDTV so this is nice for movies. Of course, this is all relative to the prices of each.

With only my laptop's LCD connected, here's what xrandr 1.2 reports. Note: I already setup my x.org config for the second monitor by specifying a virtual size 3600x2250 (as you can see below). If I didn't have that entry, it would say "maximum 1680 x 1050". You need to specify a virtual size that's at least as large as the sum of the resolutions you want to display.

I have three outputs on this laptop: built-in LCD, VGA and HDMI. The HDMI port is labeled DVI1 below. Since I don't have a HDMI to HDMI cable, I used the VGA port instead. I would have probably done that anyway because it's much easier plugging into my laptop/desktop than the monitor.

$ xrandr
Screen 0: minimum 320 x 200, current 1680 x 1050, maximum 3600 x 2250
VGA1 disconnected
DVI1 disconnected
LVDS connected 1680x1050+0+0 331mm x 207mm
   1680x1050      60.0*+
   1280x800       60.0  
   1280x768       60.0  
   1024x768       60.0  
   800x600        60.3  
   640x480        59.9  
   640x400       120.0  
   640x384       120.2  
   512x384       120.0

After I plugged my 28" LCD into my laptop, here's what it reported.

$ xrandr
Screen 0: minimum 320 x 200, current 1680 x 1050, maximum 3600 x 2250
VGA1 connected
   1680x1050      60.0 +
   1920x1200      60.0 +   59.9  
   1600x1200      59.9  
   1600x1024      60.0  
   1400x1050      60.0     60.0  
   1280x1024      59.9  
   1440x900       59.9  
   1280x960       60.0     59.9  
   1280x800       60.0  
   1152x768       54.8  
   800x600       120.0     56.2  
   700x525       120.0  
   640x480       120.0     60.0     59.9  
   640x400       120.0  
   576x384       109.6  
DVI1 disconnected
LVDS connected 1680x1050+0+0 331mm x 207mm
   1680x1050      60.0*+
   1280x800       60.0  
   1280x768       60.0  
   1024x768       60.0  
   800x600        60.3  
   640x480        59.9  
   640x400       120.0  
   640x384       120.2  
   512x384       120.0

Since my external LCD is to the right of my laptop, I used this command to enable both displays at their native resolutions:

$ xrandr --output LVDS --mode 1680x1050 --output VGA1 --mode 1920x1200 --right-of LVDS
$ xrandr
Screen 0: minimum 320 x 200, current 3600 x 1200, maximum 3600 x 2250
VGA1 connected 1920x1200+1680+0 593mm x 371mm
   1680x1050      60.0 +
   1920x1200      60.0*+   59.9  
   1600x1200      59.9  
   1600x1024      60.0  
   1400x1050      60.0     60.0  
   1280x1024      59.9  
   1440x900       59.9  
   1280x960       60.0     59.9  
   1280x800       60.0  
   1152x768       54.8  
   800x600       120.0     56.2  
   700x525       120.0  
   640x480       120.0     60.0     59.9  
   640x400       120.0  
   576x384       109.6  
DVI1 disconnected
LVDS connected 1680x1050+0+0 331mm x 207mm
   1680x1050      60.0*+
   1280x800       60.0  
   1280x768       60.0  
   1024x768       60.0  
   800x600        60.3  
   640x480        59.9  
   640x400       120.0  
   640x384       120.2  
   512x384       120.0

With this huge 28" LCD, I have no reason to use my laptop's 15" LCD. Therefore, I turned it off:

$ xrandr --output LVDS --off --output VGA1 --mode 1920x1200
$ xrandr
Screen 0: minimum 320 x 200, current 1920 x 1200, maximum 3600 x 2250
VGA1 connected 1920x1200+0+0 593mm x 371mm
   1680x1050      60.0 +
   1920x1200      60.0*+   59.9  
   1600x1200      59.9  
   1600x1024      60.0  
   1400x1050      60.0     60.0  
   1280x1024      59.9  
   1440x900       59.9  
   1280x960       60.0     59.9  
   1280x800       60.0  
   1152x768       54.8  
   800x600       120.0     56.2  
   700x525       120.0  
   640x480       120.0     60.0     59.9  
   640x400       120.0  
   576x384       109.6  
DVI1 disconnected
LVDS connected
   1680x1050      60.0 +
   1280x800       60.0  
   1280x768       60.0  
   1024x768       60.0  
   800x600        60.3  
   640x480        59.9  
   640x400       120.0  
   640x384       120.2  
   512x384       120.0  

I keep this new monitor plugged into both of my computers. I can select the output device through the monitor's hardware controls.

This was the best reference I found on using xrandr 1.2. The man page is informative but it doesn't describe the background. Debian has a good resource.

Here's a copy of my current x.org config for my laptop running X.org 7.3. My desktop runs X.org 7.4 (from unstable) so my config file is significantly different. X.org 7.4 uses HAL and you have to make some modifications to make it work.

Section "InputDevice"
	Identifier	"Generic Keyboard"
	Driver		"kbd"
	Option		"CoreKeyboard"
	Option		"XkbRules"	"xorg"
	Option		"XkbModel"	"pc104"
	Option		"XkbLayout"	"us"
EndSection

Section "InputDevice"
	Identifier	"Configured Mouse"
	Driver		"mouse"
	Option		"CorePointer"
	Option		"Device"		"/dev/input/mice"
	Option		"Protocol"		"ImPS/2"
	Option		"Emulate3Buttons"	"true"

	# Disable the tap to click
	Option		"MaxTapTime"		"0"
EndSection

Section "InputDevice"
	Identifier	"Synaptics Touchpad"
	Driver		"synaptics"
	Option		"SendCoreEvents"	"true"
	Option		"Device"		"/dev/psaux"
	Option		"Protocol"		"auto-dev"
	Option		"HorizScrollDelta"	"0"

	# Disable the tap to click
	Option		"MaxTapTime"		"0"
EndSection

Section "Device"
	Identifier	"nVidia Corporation GeForce 8600M GT"
	Driver		"nv"
	BusID		"PCI:1:0:0"
	#Option		"UseFBDev"	"true"
EndSection

Section "Monitor"
	Identifier	"Generic Monitor"
	Option		"DPMS"
	HorizSync	28-84
	VertRefresh	43-60
EndSection

Section "Screen"
	Identifier	"Default Screen"
	Device		"nVidia Corporation GeForce 8600M GT"
	Monitor		"Generic Monitor"
	DefaultDepth	24
	SubSection "Display"
		Modes		"1680x1050"
		# Make this big enough to support the laptop's monitor
		# plus my external LCD.  This will be used by xrandr.
		# 1680x1050 + 1920x1200 = 3600x2250
		Virtual 3600 2250
	EndSubSection
EndSection

Section "ServerLayout"
	Identifier	"Default Layout"
	Screen		"Default Screen"
	InputDevice	"Generic Keyboard"
	InputDevice	"Configured Mouse"
	InputDevice	"Synaptics Touchpad"
EndSection