Displaylink video adapters like the Kensington Universal Multi-Display Adapter are a great way to add an extra screen to a PC, in particular when it has only one VGA out and you want to add a DVI or HDMI monitor. They work via USB, so you do need a free USB 2.0 port.
These video adapters come bundled with drivers for Windows, but to get them working with Linux requires a bit more work. I tested this on an aging HP D530 computer with Intel integrated graphics, Ubuntu 12.04 LTS and the Xubuntu XFCE desktop environment.
The first step is to install the displaylink driver:
apt-get install xserver-xorg-video-displaylink
Reboot, and the additional screen that was attached to the Displaylink video driver should turn green. This means that it is recognized on Linux level (by a framebuffer driver), but not yet usable with X Windows. By default recent X Windows configurations use auto-detection to connect all the screens and input devices together. For some reason this doesn’t work with Displaylink devices, so we have to create an explicit configuration file specifying the server layout. To do that, check which framebuffer your displaylink device is using and which video devices your system has:
cat /proc/fb grep -i drivers /var/log/Xorg.0.log
Then add the following to your X configuration (in Ubuntu 12.04 you can create a new file in /usr/share/X11/xorg.conf.d named 52-displaylink.conf):
Section "Device" Identifier "intel" driver "intel" EndSection Section "Device" Identifier "dl1" driver "displaylink" Option "fbdev" "/dev/fb1" EndSection Section "Monitor" Identifier "monitor0" EndSection Section "Monitor" Identifier "monitor1" EndSection Section "Screen" Identifier "screen0" Device "dl1" Monitor "monitor0" DefaultDepth 16 EndSection Section "Screen" Identifier "screen1" Device "intel" Monitor "monitor1" DefaultDepth 16 EndSection Section "ServerLayout" Identifier "multihead" Screen 0 "screen0" 1280 0 Screen 1 "screen1" LeftOf "screen0" Option "Xinerama" "on" EndSection
The configuration shown above will set up a Xinerama configuration where you can use multiple screens (two in this example but there can also be more) as one big screen. You may have to adapt the driver of the first device and the framebuffer device option of the second device to your own configuration. Depending on the size and orientation of your monitors you’ll probably also want to update the offset of screen 0 in the server layout section. Some additional notes, which were determined through trial and error:
- The default depth of both screens is set to 16 bits, because Displaylink adapters cannot handle more than that and it has to be the same for all screens.
- Xinerama is specified as on, which will disable the RandR / XRandR extension. This is needed to be able to drag windows from screen to screen. (RandR by itself supports multiple screens and moving your mouse pointer from one to the other, but not screen dragging. Also having RandR on in this configuration may make your display manager crash).
- The Displaylink screen has to be screen 0, otherwise the displaylink driver will be unloaded for some reason during X startup.
After updating the X server configuration in this way log out. The X server will restart and everything should work.
If it doesn’t work right away and you cannot use your screen anymore to log in (at some point I ran into a continuously segfaulting lightdm display manager which caused the X servers to be restarted every few seconds) you can try to login from another computer using ssh. You can then use the following commands to stop and start the X server:
/etc/init.d/lightdm stop /etc/init.d/lightdm restart
It may be a bit fiddly to find a working configuration, but once you’ve found it it should be stable. A great way to add some extra screen real estate to your system.