Ubuntu – How to force Multiple Monitors correct resolutions for LightDM

12.04lightdmresolutionxrandr

I am affected by the BUG: https://bugs.launchpad.net/ubuntu/+source/unity-greeter/+bug/874241
Otherwise, if like me you have a laptop connected to a second monitor of higher resolution, LIGHTDM at the login stage, mirrors the displays in both screens and assign to them a common resolution (1024X768) in my case, instead of extending the desktop (Primary screen with the greeter and secondary with just a logo as mentioned in the Multiple Monitors UX specifications book for 12.04).

Here is my xrandr -q

@L502X:~$ xrandr -q
Screen 0: minimum 320 x 200, current 1920 x 1848, maximum 8192 x 8192
LVDS1 connected 1366x768+309+1080 (normal left inverted right x axis y axis) 344mm x 193mm
   1366x768       60.0*+
   1360x768       59.8     60.0  
   1024x768       60.0  
   800x600        60.3     56.2  
   640x480        59.9  
VGA1 disconnected (normal left inverted right x axis y axis)
HDMI1 connected 1920x1080+0+0 (normal left inverted right x axis y axis) 510mm x 287mm
   1920x1080      60.0*+
   1600x1200      60.0  
   1680x1050      60.0  
   1280x1024      60.0  
   1440x900       59.9  
   1280x960       60.0  
   1280x800       59.8  
   1024x768       60.0  
   800x600        60.3     56.2  
   640x480        60.0  
DP1 disconnected (normal left inverted right x axis y axis)

I tried to force lightdm to execute some xrandr commands in order to set the right resolution for each monitor and extend the desktop, so I created a simple script named /usr/share/lightdmxrand.sh:

#!/bin/sh
xrandr --output HDMI1 --primary --mode 1920x1080 --output LVDS1 --mode 1366x768 --below HDMI1

And told lightdm to run it : /etc/lightdm/lightdm.conf

[SeatDefaults]
greeter-session=unity-greeter
user-session=ubuntu
greeter-setup-script=/usr/bin/numlockx on
display-setup-script=/usr/share/lightdmxrandr.sh

restarted lightdm : sudo restart lightdm
And the unity greeter login screen was correct. Screens with their respective correct resolutions and if I move the mouse to a screen, it gets focus with the login box and panel, while the unfocused screen just displays an Ubuntu Logo (Just as specified in the MM UX spec book). Fantastic!

This workaround works great as long as The external monitor is connected to the laptop.
In the situation where it is not connected, at the login stage, I get :a LOW GRAPHICS MODE ERROR (You're running in low graphics mode, your screen, input devices…did not get detected..). Normal, because xrandr tries to output to a non connected monitor.

The question here is how should I modify the script in a way that when the external monitor is not connected xrandr outputs only to the laptop screen and ignores any external monitor.
E.G:

If (xrandr -q | grep 'HDMI1 connected') != NULL (HDMI1 is connected )
then xrandr --output HDMI1 --primary --mode 1920x1080 --output LVDS1 --mode 1366x768 --below HDMI1
else xrandr --output LVDS1 --mode 1366x768 (or do nothing - because the resolution of the laptop screen is correct when no external monitor is connected)

Thanks in advance.

Best Answer

NOTE: I also posted this answer here

I found a very simple workaround that works perfectly for me running 13.04. on a laptop with a 24" external screen that is not permanently connected.

I'll just copy from here

  1. log in
  2. use xrandr or the Displays control utility to configure your monitors how you'd like them to be configured in the login screen
  3. sudo cp ~/.config/monitors.xml /var/lib/lightdm/.config/

Since I already had my monitors configured properly I just had to do step 3.

Related Question