Qball's Weblog

Intel based laptop and the horror of multiple screens

Tags General  Grind My Gears 

My work laptop is a Dell Latitude E6410. Beside the fact that the audio output is possibly the worst I heard since the Commodore +4 ¹, it is a pretty decent laptop.

But there are a few major problems with having multiple screens/beamers attached, each update of X+driver makes this worse.

This card has 3 outputs accessible (eDP1 (the panel), VGA and a Displayport) and 2 CRTs.  So you can drive a max of 2 screens.

Lets enumerate:

  1. Booting with 2 external screens causes the intel driver to segfault, plugging them in after X is running is no issue.
  2. Switching the 1st CRT from internal panel to VGA1 often not possible. (This seems to be gotten slightly better in last ubuntu release).
  3. Switching primary screen from VGA1 to displayport often result in full pc lockup (needs a powercycle).
  4. Unplugging display port is instant pc lockup
  5. Unplugging VGA results in random lockups.
  6. Switching to external screen often makes the internal panel flash (I think this is software issue).
  7. I cannot do mirror mode (software issue).

Because the first 5 issues are driver problems, there is very little I can do to fix this. So I will concentrate on the 7, this is something you often want to use.

e.g. I need to give a presentation and attach a beamer. Only thing I can do is 1.) extend to beamer (gives problems with wine and office)  2.)  switch to only external screen (will often lockup laptop on shutdown, and not ideal for presenting stuff if the screen is behind you.)

So why can’t I do mirror mode? (neither on commandline or via gnome3 gui).

Lets examine xrandr output and fix this:

Screen 0: minimum 320 x 200, current 1440 x 900, maximum 8192 x 8192
eDP1 connected 1440x900+0+0 (normal left inverted right x axis y axis) 303mm x 189mm
1440x900       60.0*+   40.0

This shows that we only support one resolution for the internal  screen, 1440×900, so if your beamer does not report supporting this resolution, you are screwed.

So what we want is to add some support for extra resolutions,  common ones for beamers are (that fit on this screen): 800×600 and 1024×720.

So lets add this:

First get the modline for this using the gtf util: (800 x 600 at 60Hz)
$gtf 800 600 60
  # 800x600 @ 60.00 Hz (GTF) hsync: 37.32 kHz; pclk: 38.22 MHz
  Modeline "800x600_60.00"  38.22  800 832 912 1024  600 601 604 622  -HSync +Vsync

Now we add this to xrand as allowed mode:

xrandr --newmode "800x600_60" 38.22  800 832 912 1024  600 601 604 622  -HSync +Vsync

And tell xrandr the internal panel supports this:

xrandr --addmode eDP1 "800x600_60"
Now repeat this for 1280x720:
xrandr --newmode "1280x720_60" 74.48  1280 1336 1472 1664  720 721 724 746  -HSync +Vsync
xrandr --addmode eDP1 "1280x720_60"

Now when you plugin a beamer that supports 800×600 or 1280×720 you can now do mirror mode! (If only intel would not randomly crash when unplugging the beamer)



(¹ Headphone out on this laptop has a lot of noise on it, the noise is correlated with CPU usage (And other components in the laptop), it might be considered a feature hat the pitch and strength can give you detailed statistics about load… but often not fun)