Kernel Modules

The new kernel module is called udldrmfb (CONFIG_DRM_UDL), make sure to disable the old fb driver, CONFIG_FB_UDL. With this in place, your kernel should recognize the displaylink device when plugged in.

Now we need the X server to actually do something with the device.

X Server

$ xrandr --listproviders
Providers: number : 2
Provider 0: id: 0x54 cap: 0xf, Source Output, Sink Output, Source Offload, Sink Offload crtcs: 2 outputs: 3 associated providers: 0 name:radeon
Provider 1: id: 0x3cc cap: 0x2, Sink Output crtcs: 1 outputs: 1 associated providers: 0 name:modesetting

Here, the first provider is my radeon card, the second one is the displaylink device using the xf86-video-modesetting driver. This will drive the displaylink.

Here is the output of xrandr before we add the displaylink driver (using xrandr):

$ xrandr
Screen 0: minimum 320 x 200, current 1920 x 1080, maximum 8192 x 8192
LVDS connected (normal left inverted right x axis y axis)
   1366x768       60.0 +
   1280x720       59.9
   1152x768       59.8
   1024x768       59.9
   800x600        59.9
   848x480        59.7
   720x480        59.7
   640x480        59.4
HDMI-0 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 509mm x 286mm
   1920x1080      60.0*+
   1280x1024      75.0     60.0
   1152x864       75.0
   1024x768       75.1     60.0
   800x600        75.0     60.3
   640x480        75.0     60.0
   720x400        70.1
VGA-0 disconnected (normal left inverted right x axis y axis)

Adding the displaylink display is done with this command:

$ xrandr --setprovideroutputsource 1 0

Now, the output is as follows (DVI-0 shows up):

$ xrandr
Screen 0: minimum 320 x 200, current 1920 x 1080, maximum 8192 x 8192
LVDS connected (normal left inverted right x axis y axis)
   1366x768       60.0 +
   1280x720       59.9
   1152x768       59.8
   1024x768       59.9
   800x600        59.9
   848x480        59.7
   720x480        59.7
   640x480        59.4
HDMI-0 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 509mm x 286mm
   1920x1080      60.0*+
   1280x1024      75.0     60.0
   1152x864       75.0
   1024x768       75.1     60.0
   800x600        75.0     60.3
   640x480        75.0     60.0
   720x400        70.1
VGA-0 disconnected (normal left inverted right x axis y axis)
DVI-0 connected (normal left inverted right x axis y axis)
   1280x1024      60.0 +   75.0
   1280x960       60.0
   1152x864       75.0
   1024x768       75.1     70.1     60.0
   832x624        74.6
   800x600        72.2     75.0     60.3     56.2
   640x480        75.0     72.8     66.7     60.0
   720x400        70.1
  1280x1024 (0x5f)  108.0MHz
        h: width  1280 start 1328 end 1440 total 1688 skew    0 clock   64.0KHz
        v: height 1024 start 1025 end 1028 total 1066           clock   60.0Hz
  1280x1024 (0x5e)  135.0MHz
        h: width  1280 start 1296 end 1440 total 1688 skew    0 clock   80.0KHz
        v: height 1024 start 1025 end 1028 total 1066           clock   75.0Hz
  1152x864 (0x60)  108.0MHz
        h: width  1152 start 1216 end 1344 total 1600 skew    0 clock   67.5KHz
        v: height  864 start  865 end  868 total  900           clock   75.0Hz
  1024x768 (0x61)   78.8MHz
        h: width  1024 start 1040 end 1136 total 1312 skew    0 clock   60.1KHz
        v: height  768 start  769 end  772 total  800           clock   75.1Hz
  1024x768 (0x62)   65.0MHz
        h: width  1024 start 1048 end 1184 total 1344 skew    0 clock   48.4KHz
        v: height  768 start  771 end  777 total  806           clock   60.0Hz
  800x600 (0x63)   49.5MHz
        h: width   800 start  816 end  896 total 1056 skew    0 clock   46.9KHz
        v: height  600 start  601 end  604 total  625           clock   75.0Hz
  800x600 (0x64)   40.0MHz
        h: width   800 start  840 end  968 total 1056 skew    0 clock   37.9KHz
        v: height  600 start  601 end  605 total  628           clock   60.3Hz
  640x480 (0x65)   31.5MHz
        h: width   640 start  656 end  720 total  840 skew    0 clock   37.5KHz
        v: height  480 start  481 end  484 total  500           clock   75.0Hz
  640x480 (0x66)   25.2MHz
        h: width   640 start  656 end  752 total  800 skew    0 clock   31.5KHz
        v: height  480 start  490 end  492 total  525           clock   60.0Hz
  720x400 (0x67)   28.3MHz
        h: width   720 start  738 end  846 total  900 skew    0 clock   31.5KHz
        v: height  400 start  412 end  414 total  449           clock   70.1Hz

Enabling the display is now as simple as:

$ xrandr --output DVI-0 --auto --right-of HDMI-0

Issues

There are some issues with the setup. Most notably, all the screens become slow (not just the USB displaylink one). I have not been able to work around this. It seems that all the rendering is done on the USB device and then passed back to my radeon driver, while it should be the other way around.

Slow redrawing on all displays (including native ones)

Here's an excerpt from my question and description on IRC in the #xorg channel on Freenode (as of yet no answer):

15:11 < Wizzup> Hi, sorry to just join and immediately start asking questions. I am playing around with a USB 2.0 DisplayLink device.
                (USB->DVI). ``It works''. Kernel 3.12.6 and xorg 1.14. I used xrandr with --listproviders and --setprovideroutputsource
                to set the usb card as provider for output sources. Then enable it via xrandr, voila.
15:12 < Wizzup> However, *all* the screens get jerky redrawing. From the USB-driven screen I would expect this, but not on my other
                screens. The other screens are driven by the radeon driver.
15:12 < Wizzup> I can understand that I may be doing something wrong with the --setprovideroutputsource, and that I may have to tell
                the driver to offload everything to radeon (that would be nice), but I cannot get that to work
15:13 < Wizzup> In particular, the USB device does not support Sink Offload, if I am correct
15:14 < Wizzup> It's still okay for presentations, but it would be nice if the other screens would be usable, too. ;-)
15:25 < Wizzup> For completeness, the usb device uses the modesetting driver and supports only "Sink Output"
15:25 < Wizzup> So I guess I'd need it to have Sink Offload capabilities before this can work?
15:26 < Wizzup> This guy has the same problem as I have (all displays lag), but he seems a bit less clueful as to the whole:
http://forums.opensuse.org/english/get-technical-help-here/hardware/480963-usb-dvi-displaylink-opensuse-12-2-kde-xrandr-krandr-4.html
15:26 < Wizzup> No solution there, fwiw

Update 2015/06/21: Likely this has a problem in the radeon driver, since until now DisplayLink could not even be used as a master device: http://www.phoronix.com/scan.php?page=news_item&px=Modesetting-Output-Master

Hardened

I did not yet get the driver to work properly on a hardened kernel, I can attach a display, but the X server gets killed by PaX after several seconds. I could try making X excempt from PaX, but right now it is not enough of an issue as I am not using the hardened kernel by default - yet.