Blaise Alleyne technology, music, bioethics, theology
Plugable USB-VGA-165

HOWTO: Configure a Plugable USB-VGA-165 (DL-165) display adapter in Debian 12 (Bookworm) using libre drivers

Over the past few weeks, I’ve been expanding my two-screen setups into three-screen setups — a laptop plus two external monitors. Because I thought I only had one display port (HDMI), I went searching for USB display adapters.

(I just realized today that my ThinkPad T470 has a USB-C / Thunderbolt 3 port that I’ve ignored for seven and a half years… if I’d known that, I would have just got a USB-C cable for the second external monitor!)

I settled on a Plugable USB-VGA-165 specifically because it’s an older device that uses an older DisplayLink chipset (DL-165), which I read does not require the proprietary Synaptics driver to work in GNU/Linux, but rather works with a libre driver. I plugged it into several Ubuntu 24.04 LTS laptops, and it just worked. But on my Debian 12 laptops, it would only display a green screen and was not recognized in GNOME as an external display.

I spent about 3 hours in search of a solution, trying to figure out what I needed to install to get it to work. However, after compared dmesg and lsmod output in Debian vs Ubuntu, I figured out that I already had the driver I needed, but I just needed to disable another driver to get it to load.

Long story short, this was what got it working for me, inspired by this guide for Debian Jessie:

echo "blacklist udlfb" | sudo tee /etc/modprobe.d/blacklist-framebuffer.conf
sudo modprobe -r udlfb

Then, it just works!

Rationale

I decided to try that based on a lot of back and forth with DuckDuckGo, Google, and ChatGPT, and comparing the dmesg output between my Ubuntu and Debian systems.

In Ubuntu GNU/Linux (where it was working), this is what my dmesg output looked like when I plugged in the USB-VGA-165:

[ 4575.268341] usb 3-3: new high-speed USB device number 7 using xhci_hcd
[ 4575.386635] usb 3-3: device descriptor read/64, error -32
[ 4575.624214] usb 3-3: New USB device found, idVendor=17e9, idProduct=037b, bcdDevice= 1.03
[ 4575.624233] usb 3-3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 4575.624238] usb 3-3: Product: Plugable USB-VGA-165
[ 4575.624243] usb 3-3: Manufacturer: DisplayLink
[ 4575.624246] usb 3-3: SerialNumber: 354429
[ 4575.628984] [drm] vendor descriptor length:1b data:1b 5f 01 00 19 05 00 01 03 00 04
[ 4575.630318] [drm] Initialized udl 0.0.1 20120220 for 3-3:1.0 on minor 3
[ 4575.630325] [drm] Initialized udl on minor 3
[ 4575.785071] fbcon: Deferring console take-over
[ 4575.785084] udl 3-3:1.0: [drm] fb1: udldrmfb frame buffer device

Whereas in Debian GNU/Linux, I was seeing this:

[308404.046334] usb 1-2: new high-speed USB device number 8 using xhci_hcd
[308404.162304] usb 1-2: device descriptor read/64, error -32
[308404.399059] usb 1-2: New USB device found, idVendor=17e9, idProduct=037b, bcdDevice= 1.03
[308404.399061] usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[308404.399062] usb 1-2: Product: Plugable USB-VGA-165
[308404.399063] usb 1-2: Manufacturer: DisplayLink
[308404.399064] usb 1-2: SerialNumber: 354429
[308404.402669] udlfb 1-2:1.0: vendor descriptor length: 27 data: 1b 5f 01 00 19 05 00 01 03 00 04
[308404.402671] udlfb 1-2:1.0: DL chip limited to -17152 pixel modes
[308404.502946] usb 1-2: fb1 is DisplayLink USB device (1920x1080, 8104K framebuffer memory)

I’ve made the relevant lines bold: My Ubuntu system was using udl (via DRM), whereas my Debian system was using udlfb (without DRM). (I also learned today that, in this context, DRM stands for the Linux kernel’s Direct Rendering Manager subsystem – not Digital Restrictions Management). So, when I saw the Debian Jessie instructions to blacklist udlfb as an older driver compared to the newer udl, it made sense — Ubuntu was using udl and it was working, whereas Debian was using udlfb and it wasn’t. And disabling udlfb worked! No more green screen.

I’m posting this because most of the other resources I found were very unhelpful, guidance on evdi-dkms or the proprietary Synpatic driver, none of which applies to this old DL-165 chipset or is necessary or relevant. udl is sufficient, you just need to manually blacklist the older udlfb in Debian so it doesn’t get confused.

I hope this saves someone else some time. Meanwhile, now that I realize I’ve been sitting with an ignored USB-C / Thunderbolt 3 port for seven and a half years, I’m looking up USB-C display cables for my other new triple monitor setup…

Leave a comment

Your email address will not be published. Required fields are marked *