I would recommend using a tool called Disper: disper on launchpad
Disper was developed to switch between internal an external screens, because xrandr is not supported by the propietary NVIDIA-drvers. (Xrandr even can't detect my displays).
Also you can set screen resolutions with disper:
Hope, that this may help.
Usage: disper [options] (-l|-s|-c|-e|-p|-i)
--version show program's version number and exit
-h, --help show this help message and exit
-v, --verbose show what's happening
-q, --quiet be quiet and only show errors
-r RESOLUTION, --resolution=RESOLUTION
set resolution, e.g. "800x600", or "auto" to detect
the display's preferred resolution, or "max" to use
the maximum resolution advertised. For extend it is
possible to enter a single resolution for all displays
or a comma-separated list of resolutions (one for each
display). Beware that many displays advertise
resolutions they can not fully show, so "max" is not
-d DISPLAYS, --displays=DISPLAYS
comma-separated list of displays to operate on, or
"auto" to detect; the first is the primary display.
-t DIRECTION, --direction=DIRECTION
where to extend displays: "left", "right", "top", or
--scaling=SCALING flat-panel scaling mode: "default", "native",
"scaled", "centered", or "aspect-scaled"
--plugins=PLUGINS comma-separated list of plugins to enable. Special
names: "user" for all user plugins in ~/.disper/hooks;
"all" for all plugins found; "none" for no plugins.
colon-separated list command-line arguments to cycle
Select exactly one of the following actions
-l, --list list the attached displays
-s, --single only enable the primary display
-S, --secondary only enable the secondary display
-c, --clone clone displays
-e, --extend extend displays
-p, --export export current settings to standard output
-i, --import import current settings from standard input
-C, --cycle cycle through the list of cycle stages