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