[Libdlo] Tips for setting up displaylink with Xinerama

Christoph Rissner c.r at visotech.at
Mon Jan 11 04:57:46 PST 2010


Hi,

> Are you saying you had the 2 nvidia screens + 1 displaylink screen setup
> working in the past? This is the sort of setup I'm interested in
> obtaining (triple head). Would you mind posting more on this and/or your
> aforementioned patches?

Thats still my current setup. My nvidia card is a little old:
# lspci
01:00.0 VGA compatible controller: nVidia Corporation NV37GL [Quadro 
PCI-E Series] (rev a2)

So I'm stuck with nvidia drivers from the 173.xx series.

I started with udlfb and xf86-driver-displaylink by Roberto (see 
http://libdlo.freedesktop.org/wiki/xf86-driver-displaylink) using xorg 
1.6. In the last couple of days I tried the udlfb version from 
plugable.com (http://git.plugable.com/webdav/udlfb) but this still needs 
the EDID patch.

I had no issues building both, but to get X running I had to patch udlfb 
(for reasons yet unknown EDID queries do not work on my system).
X crashes complaining about the EDID version 0:
...
(EE) DL(1): Unknown EDID version 0
...

Since I have 3 identical monitors (Samsung SyncMaster 940T) I used 
nvidia-settings to capture EDID data and converted them to hex (I think 
I wrote a python script, not sure about this), than patched udlfb.h 
replacing dlfb_get_edid() with a hardcoded version (see attached 
udlfb_hardcoded_edid.patch).

I played around with xorg.conf (it's attached) to get the most out of it:
- extended desktop
- hardware acceleration

My first attempt was to use nvidias TwinView feature + xinerama, but 
then I got a single screen spanning across 2 monitors attached to the 
nvidia card, plus another screen on the displaylink card. I found this 
is pretty annoying. I use e17 and have a centered shelf on the bottom of 
each screen, which was then positioned via 2 monitors. Also maximised 
windows covered 2 monitors ...

Note: e17 has a -fake-xinerama-screen option, I used that for some time.

Unfortunately I can't remember where I found out about libxinerama and 
its problems with TwinView, but I found a simple patch sufficient where 
I hardcode the xinerama configuration (see 
face-xinerama.hardcoded.patch, this is for libxinerama 1.0.3).
I tried to make this more configurable (parsing some environment 
variable or reading a configuration file) but had no success there, 
thats why the "parseFXI()" function does not actually parse something.

Thats how I did it. Of course I'm not satisfied with the hardcoded 
stuff, but I assume I have to live with this for some time, at least for 
libxinerama.
Aside of that, I am pretty happy with this setup.

Another note:
I also tried to use fbdev driver instead of displaylink but this doesn't 
work in my setup, X bails out with:
...
Fatal server error:
Cannot run in framebuffer mode. Please specify busIDs        for all 
framebuffer devices
...

I don't know yet whether I cannot run fbdev together with nvidia or I 
just have to specify a BusID for the displaylink device, and for the 
latter: How do I determine a BusID for a USB device?

Finally, there are 2 more things I would like to try/solve:
* I don't know whether this will work with xorg 1.7, but I plan to 
upgrade in the next couple of weeks.

* I read about libxcb as replacement for Xlib, and I think that would 
also replace libxinerama (at least "awesome" WM uses libxcb) but I don't 
know what it would mean to patch that.

Hope that helps,
Christoph



More information about the Libdlo mailing list