Assuming that the internal screen is LVDS and the external screen is DVI-0. inotifywait comes from the inotify-tools package.
# Wait for the changes detected by the kernel laptop mode.
while inotifywait -e modify /proc/sys/vm/laptop_mode
do
laptop_mode=`cat /proc/sys/vm/laptop_mode`
# If on battery, switch on the internal screen.
if [[ $laptop_mode -gt 0 ]]; then
xrandr --output LVDS --mode 1280x800
xrandr --output DVI-0 --off
# Otherwise,
elif [[ $laptop_mode = 0 ]]; then
# if the external screen is connected, switch it on.
if [[ `xrandr -q|grep DVI-0|cut -f2 -d\ ` = connected ]]; then
xrandr --output DVI-0 --mode 1920x1200
xrandr --output LVDS --off
fi
fi
done
