Howto: DisplayLink USB Single Monitor on Linux
Posted on 23. Dec, 2011 by jerome in Using
Unfortunately, Linux doesn’t support multiple graphics adapters the way Windows does, which means you can’t just plug in USB graphics adapters and expect them to extend your desktop (the good news is there is progress on this support).
What is possible, however, is running a single DisplayLink adapter, or several with a Xinerama or multiseat configuration — just as long as you don’t expect to use your main GPU at the same time.
The single-display case is relatively easy to set up, and we’ll cover that here.
First, make sure you’re running kernel version 2.6.35 or later (Ubuntu 10.10 or later). For older kernel versions, you’ll need to update udlfb and run a modified fbdev X server (not covered in this post). On these kernel versions, when you plug in your DisplayLink-based USB graphics device, you should get a green screen. This means that at the driver built into the Linux kernel is happy, healthy, and talking to the device.
Second, if you are running Unity Desktop in Ubuntu 11.04 or later, you’ll need to switch back to Classic Mode so you’re running straight X. Here’s how on Ubuntu:
Click on the power button in the upper right corner (mine looks like a light switch) and choose the last option, System Settings. Search for Login Screen, Double-click to display, Choose Unlock and enter your password, Select Ubuntu Classic as default session.
Third, if you’re running kernel versions between 2.6.35 to 3.1, enable the fb_defio option of udlfb. To do this, create or edit a file like
/etc/modprobe.d/50-displaylink.conf
and add the single line
options udlfb fb_defio=1
And reboot (or run “sudo depmod -a” and unplug/replug your adapter). This will turn on defio (page fault change detection) support. This option is already enabled by default in kernels 3.2+.
Lastly, create an X config file called 60-plugable.conf (or similar) with the following contents and place it in /usr/share/X11/xorg.conf.d (on recent distros; on older distros, make this your xorg.conf):
Section "Device" Identifier "uga" driver "fbdev" Option "fbdev" "/dev/fb0" EndSection Section "Monitor" Identifier "monitor" EndSection Section "Screen" Identifier "screen" Device "uga" Monitor "monitor" EndSection Section "ServerLayout" Identifier "default" Screen 0 "screen" 0 0 EndSection
Note: if your main GPU creates a /dev/fb0 even when the USB display is not attached, then your USB display is probably getting assigned to /dev/fb1. In that case, change /dev/fb0 in the “Device” section above to /dev/fb1
Now, on reboot, you should (hopefully!) see your login come up on your DisplayLink USB attached display!
This kind of simple setup is useful for:
- Testing or playing with your USB graphics adatper on Linux.
- Embedded systems with USB but no GPU.
- As a backup method when the main GPU or its driver isn’t available or working.
- Systems where a USB graphics adapter enables higher modes (up to 2048×1152) than the main GPU screen.
Please comment if you have any trouble with this single display case. See our past posts for additional information about the DisplayLink Linux kernel driver and some more involved setups.
The instructed here work on all Plugable USB 2.0 graphics adapters and Plugable USB 2.0 docking stations and thin clients (and should also generally work on all DisplayLink based products).





Wayland in Ubuntu 11.04? I think you mean Compiz.
Thanks Marius! Fixed.
i note in the example xorg conf above,
driver “fbdev”
having read elsewhere on the plugable site, and in discussions with support, i’m using instead
driver “displaylink”
sourced, built & installed from http://git.plugable.com/webdav/xf-video-udlfb/
what are the differences, and what’s actually recommended?
A quick answer to the “fbdev” vs. “displaylink” xorg drivers is neither has any device specific code. It’s just the displaylink (or xf-video-udlfb) driver has a single added private ioctl to pass on damage notifications from X. For more background, see http://plugable.com/2009/12/21/take-your-pick-standard-or-custom-displaylink-x-drivers-both-work-now/
Also the “displaylink” will work with other drivers of other cards to allow multple screens, but the fbdev driver will not.
I’m using Mint 12 with kernel 3.0.0-15-generic-pae and a HP DisplayPort.
It’s been working fine on Ubuntu 11.04, where I had to echo 1 > bConfiguration on bootup to get a green screen.
But now that doesn’t seem to work because I can’t find the USB node to echo this into; however /dev/fb1 is created (but only on bootup, not if I re-insert afterwards).
When I try to start X using fb1, it hangs with this listed in dmesg:
udlfb: usb_submit_urb error fffffffe
I’ve just compiled the driver from git, and I’ll see how that goes
Like the mint provided kernel module, the git build hangs when I
echo 1 > /sys/bus/usb/devices/1-1.2/bConfigurationValue
and even all my USB keyboard and mouse (plugged into a different port) can hang.
Also, the git provided modules does not create /dev/fb1 although the mint provided module does.
I got the green screen by echoing into
/sys/bus/usb/devices/1-1.2/1-1.2.3/bConfigurationValue
so the node seems to have moved.
I was tipped off by this commit note:
25 Jun 04:37 – udlfb was binding its framebuffer to its parent device, rather than its interface. Found and fix suggested by Kay Sievers
although I didn’t think the previous copy I was running was that old!
On my HP laptop I was running the radeon driver in 16bpp mode as Xinerama with my udlfb and having a nice 3-monitor deskop I cannot get udlfb to work simultanesouly with my Thinkpad T420s.
If the udlfb initalizes then the built-in device driver unloads (without reason given).
I’ve tried using the intel sandybridge driver, the fb driver and the nvidia driver for the internal device but none will work at the same time as udlfb.
I did briefly have them work as seperate screens, but now that won’t work; I did briefly have them work as a 2 monitor desktop, but the built-in driver seems fixed at fbbpp of 32 even thought it can be configured as 16bpp to match udlfb – the image just is squashed and takes half the monitor.
The udlfb will not initialize if DefaultDepth is set to 24 (although I swear it did yesterday).
All very annoying.
Compiling and using the Xorg displaylink_drv.so means that the nvidia driver is not unloaded; however it still segfaults when trying to set the nvidia mode.
I think that is a know problem, I hope google will help there
Moving my T420s laptop back to intel chipset instead of nvidia I can now have two separate screens (no xinerama) and that works!
However if I ctrl-alt-F1 to switch to the text console, it crashes the X server:-(
By setting DefaultFbBpp 16 and DefaultDepth 16 on my intel driver I now have xinerama across two screens!
However right-clicking on the right (intel) screen pops up the menu on the left screen. Also gnome panels will not show in the right screen, nor will the wallpaper.
Not sure why