Please note that this page is pretty outdated by now. I leave it online just in case you find it useful.
The A31p features an external CRT-connector and if I'm not on the road, I prefer using the CRT over the LCD for various reasons. So actually I was looking for a way not to use the internal CRT at all with XFree. But if you just use <Fn>-<F7> to enable the external CRT, it will have an unacceptable refresh-rate of 60 Hz (what is used for the LCD).
The builtin graphics-device (ATI Mobility FireGL 7800) is dual-headed, which means that both the internal LCD and the external CRT can be controlled independently. However, I did not succeed in completely disabling the internal LCD under XFree, because it appears to be the primary head.
Under http://www.morlug.org/radeon I found some evidence that the radeon driver should support exact cloning on the second head, but it didn't work for me at all. The options weren't used and I didn't find any strings in the binary module, that could have indicated the presence of this option.
So I gave Xinerama a shot as described in the Xinerama-HOWTO. It worked almost perfectly, which means, I was able to see the same picture on both displays with different refresh-rates, but I only saw the mouse-pointer on the primary display, the LCD. Xinerama wasn't made for cloning displays after all.
Now, the trick is, to use "relative" with a small offset. This way you can move the mouse-pointer between the two displays. For example for the setup below this means, you have to move the pointer all the way to right until it appears on the CRT (because it is shifted 1 pixel to the right). If you move it back left, it will remain visible on the CRT, which is exactly what I wanted. If you keep moving it to the left, it will appear back on the LCD. The solution surely isn't perfect (that would be exact cloning, i.e. the pointer is visible everywhere) but it does it for me.
If you use <Fn>-<F7>, both displays will be driven with same settings again. Also, if you close the lid or have the screen(s) blanked and woken up, this will smash the settings for the CRT (It's no problem to start X with the lid closed). In all cases you'll have to restart X.
If you don't use "NoDDC", XFree might become confused.
[...]
Section "Device"
Identifier "FireGL7800_Int"
BoardName "Mobility FireGL 7800 (Radeon LX)"
BusID "1:0:0"
Driver "radeon"
VendorName "ATI"
Screen 0
Option "NoDDC"
EndSection
Section "Device"
Identifier "FireGL7800_Ext"
BoardName "Mobility FireGL 7800 (Radeon LX)"
BusID "1:0:0"
Driver "radeon"
VendorName "ATI"
Screen 1
Option "NoDDC"
EndSection
Section "Monitor"
Option "CalcAlgorithm" "CheckDesktopGeometry"
DisplaySize 305 230
HorizSync 28-95
Identifier "InternalLCD"
ModelName "FlexView 1600X1200"
VendorName "IBM"
VertRefresh 52-82
UseModes "Modes[0]"
EndSection
Section "Monitor"
DisplaySize 400 300
HorizSync 30-121
Identifier "ExternalCRT"
ModelName "GDM-5410"
Option "DPMS"
VendorName "Sun"
VertRefresh 48-160
UseModes "Modes[1]"
EndSection
Section "Modes"
Identifier "Modes[0]"
[...]
Section "Screen"
DefaultDepth 24
Identifier "Screen[0]"
Device "FireGL7800_Int"
Monitor "InternalLCD"
SubSection "Display"
Depth 24
Modes "1600x1200" "1600x1024"
EndSubSection
EndSection
Section "Screen"
Identifier "Screen[1]"
Device "FireGL7800_Ext"
Monitor "ExternalCRT"
[...]
Section "ServerLayout"
Identifier "Layout[0]"
InputDevice "Keyboard[0]" "CoreKeyboard"
InputDevice "Mouse[0]" "CorePointer"
Option "Clone" "off"
Option "Xinerama" "on"
Screen "Screen[0]"
# With relative 0 0, you only have the mouse-pointer on screen 0 (LCD).
# This small shift allows to move the pointer between displays.
# The pointer is still exclusively on 1 screen.
Screen "Screen[1]" relative "Screen[0]" 1 0
EndSection