Not Every Project Works, And That’s Okay (Multiseat USB Dongles)
Sometimes, projects don’t work. Today, I’m going to describe a bit about a few of them. Thank you for coming to my ted talk lol.
I’ve been working on Linux Multiseat for awhile now, it’s a topic that has fascinated me for over a decade now. But, getting it to actually work with cheap hardware has eluded me. So, here’s a bit of an overview of what I’ve learned so far.
The hardware I’ve tried:
-
WYSE Zero Client - Under $10 shipped, so it didn’t hurt to try. It uses a SIS USB VGA chip, which once had support in the Linux kernel, but a lot of the heavy lifting appears to be in the userspace xorg sis driver, and of course neither the kernel driver or xorg driver have been maintained in the past decade. Recompiling the kernel module and adding the USB IDs to the IDs which the driver supports got the kernel to load the correct module, but it provides a special device (not our favorite Linux framebuffer) and I wasn’t able to bind an xorg to it. Maybe with some work I could build a kernel space module which exposes a framebuffer instead of their awful junk, but it was done this way originally since the hardware has support for partial redrawing and hardware cursor (so the CPU doesn’t have to redraw the regions under the cursor as it moves), which is why it was originally part of the X server. If I get bored, maybe I’ll become a kernel developer I guess.
-
Pluggable USB2 DisplayLink dock - This one just came in the mail, and I haven’t even plugged it in yet, but this was designed to be used for multiseat way way back when, and Displaylink USB2 drivers for a framebuffer device are in the kernel and should work just fine. The hardware is a bit dated, with DVI outputs.
-
Random USB-C laptop dock - I tried several docks that I could borrow from friends and family to see how they respond. Most use USB-C DisplayPort, which is to be expected, so they rely entirely on the host GPU. This of course makes them cheaper to produce, but potentially at the expense of USB3 bandwidth. In lsusb they show up as a USB Billboard device, which basically means the USB endpoint exists purely to display a message on your computer saying it doesn’t support the dock. No data goes over the USB connection.
-
USB-C DisplayLink dock - One of the docks I tried supports DisplayLink over USB3. Unfortunately, DisplayLink has decided to go the Nvidia route and produce a proprietary Linux driver, and unlike Nvidia their Linux support is actually terrible. They claim it will support Ubuntu 20.04 LTS and don’t guarantee anything else, but even there it didn’t really do what I wanted. I was able to get display mirroring to work, but not multiseat. Maybe, with more time, I’d be able to fight with the driver enough to get multiseat to work. It’s really unfortunate too, since USB3 DisplayLink docks are really common and somewhat affordable now, at least compared to adding a new GPU like I did in my multiseat gaming video.