Is there a way to autodetect when a display is disconnected?

First install disper, then download autorandr and follow these instructions:

  • When the external monitor is undocked, run the following command in terminal:

    auto-disper.sh --save undocked
    
  • When the external monitor is docked and configured as you want (with Nvidia X Server Settings), run:

    auto-disper.sh --save docked
    
  • Try:

    auto-disper.sh --change
    

    with docked and undocked monitor. It should detect the state and change the configuration.

  • Finaly make a keyboard shortcut for auto-disper.sh --change

I tried to make a script that run it every 3 seconds, so auto-dectection works, but use too much ressource. Hope that can help!


This is a limitation of Nvidia Twinview on Linux. The open source driver will work as expected (though you'll lose 3D acceleration and Compiz).


I'm in about the same situation. I use a laptop which is sometimes connected to my external monitor. When it is, I usually want to use only this monitor (because I have it hooked up to an external keyboard & mouse also).

What I found, is that if you have a file called .xprofile, it is called every time the display is initialized (by X.org?). Here is the contents of my file. As you can see, I adapted it from here.

What you should do is save it to ~/.xprofile and then make it runnable (chmod +x .xprofile). Check how your internal and your external monitors are called - do this by running xrandr with no arguments. Mine are VGA1 and LVDS1 respectively. The last thing is to set the EXTERNAL_RES variable to the native resolution of your external monitor.

Now on boot up, the connected monitor will be used if it is connected. The tricky part is automation (such as removing the cable while Ubuntu is running). I haven't found a very good solution for this, but it seems that switching to a virtual console and back does the trick (Ctrl-Alt-F1 and then Ctrl-Alt-F7). It's a bit quicker than cycling through all the possibilities with the Fn key (which also sometimes messes up the display).


Use disper. After installing it, you may want to create two shortcuts:

  1. To switch to extrnal display at max resolution: CTRL+E --> disper "max" -S
  2. to go back to PRimary display : CTRL+P --> disper "max" -s