I recently bought a Dell XPS 13 (9360) to dual boot under Microsoft Windows 10 and Ubuntu Linux 16.04 LTS. One of the key requirements for its use as a "conference" laptop was being able to output over HDMI at 720p (ie, 1280x720, a 16:9 ratio), as well as ideally over VGA at, eg, 1024x768 (a 4:3 ratio) for legacy projectors.

During the purchase Dell's website offered the Dell DA200 USB-C to HDMI/VGA/Ethernet/USB-3 adapter at what seemed like a reasonable price, so I purchased that as my only non-base option so that I had it available to try out. However having seen it fail miserably for another Linux user at this year's LCA Sysadmin Miniconf, I did not have that high hope of it working properly in Linux.

Trying it out at home connected via HDMI to my Samsung 6-series TV confirmed what I expected -- the Dell DA200 is still not properly supported under Linux, but HDMI through the Dell DA200 did work under Microsoft Windows 10 (although it appeared all the screen sizes were received by the TV as 1080p, suggesting they were being scaled on the driver side instead).

Since there was a suggestion that fixes after the Linux 4.4.0 kernel included in Ubuntu 16.04 LTS might help, I tried installing the latest Ubuntu kernel (4.8.0; equvialent to what shipped with 16.10 -- Yakkaty Yak). To do that I did:

sudo apt-get install linux-image-generic-hwe-16.04-edge

whch dragged in the right kernel packages, and then rebooted. The system came up properly with the Linux 4.8.0 kernel (including unlocking the crypto disk partition; phew), but the Dell DA200 still did not work very well. I found that I could get 800x600 and 832x624 (two 4:3 ratios) to display via HDMI out the DA200, but no higher resolutions were properly recognised by my Samsung 6-series TV. FreeDesktop Bug #93578 shows that I am not alone in having this problem, and support is still "work in progress". (FreeDesktop Bug #94567 suggests some people got 1400x900 working, but nothing higher, however it is unclear if that was over the DA200/HDMI or not.)

After some "Internet Research" it seemed like the best option was to avoid the HDMI on the Dell DA200 -- people seem to have fairly good success with the Ethernet port (which was another reason I got that adapter) and the USB-3 port, but not with the HDMI.

For HDMI output the most common suggestion was to get a USB-C to DisplayPort/HDMI adapter, which had nothing else in it. As best I can tell these single-use adapters are either the DisplayPort over USB-C Alt Mode, with a DisplayPort to HDMI adapter built in, or perhaps the HDMI over USB-C Alt Mode. These "Alternate Modes" are another way of using the pins of USB-C, without using the USB protocol -- ie, basically what the previous generation of Apple devices did with Mini-DisplayPort and Thunderbolt 1/2 out the same physical port, but with different signals/adapters. My understanding is that those USB-C Alt Modes allow basically passive adapters, but also require support in the laptop for that Alt Mode.

Based on the Dell XPS 13 (9360) specifications I think what the Dell supports is the Thunderbolt 3 USB-C Alt Mode, which includes DisplayPort 1.2. And thus a passive USB-C to DisplayPort 1.2 adapter should work. But it appears that neither DisplayPort 1.3 over USB-C (a different Alt Mode) nor HDMI over USB-C (another different Alt Mode) will actually work -- the former because there is no explicit support listed, and the latter because HDMI over USB-C was only announced very recently.

So it appears we are in for what one blogger calls a "total nightmare" of physically compatible adapters/cables which may or may not work depending on the "Alt Modes" implemented by a given device with USB-C ports. Joy.

Apparently there are also multiple different types of USB-C cable -- with different lanes connected, but the same connectors -- in addition to multiple different ways that something like an HDMI adapter can be implemented. All with the same physical connector. (Apparently the documentation should tell you if it is DisplayPort Alt Mode or HDMI Alt Mode or one of the others; which assumes there is any real documentation.) Some people report there are even incompatibilities with charging over USB-C.

It seems the latest generation of electrical engineers has forgotten all the lessons learned in the last 30-50 years about using different connectors for incompatible things. Seriously, if it fits, it should work (see also the USB-C HDMI adapters are flaky with the MacBook Pro blog post by the same author; they also suggest using a DisplayPort adapter).

In theory one can tell the implementation apart by the USB-C Alt Mode Logo on the device, but in practice there is a lot of hardware out there which does not get many useful markings at all. So I think this will be another USB Full Speed/USB High Speed mess, but turned up to 11.

To try to shortcut some of this mess (most of which I was only slightly aware of before I started writing this blog post), in the interests of expediencey I went looking for a USB-C to HDMI adapter that (a) someone had reported as working under Linux and (b) I could purchase, off the shelf, today, a couple of days before Christmas.

The intersection proved to be the Moshi USB-C to HDMI Adapter which gdx reported working under Linux and was in stock at a "technology store" near me at a merely slighly ridiculous price. Technical information was fairly light -- "UHD 4K output at 60 fps" is about as close as it gets to a specification, along with "Plug-n-Play: no software drivers or power adapter required" being a strong hint it is a passive adapter. Comparing the "UHD 4K output at 60 fps" with the DisplayPort Resolution/Refresh Support, one can guess that the Moshi adapter supports DisplayPort 1.2 -- which tops out around UHD 4K @ 60 fps (max 75 fps); if it had supported DisplayPort 1.3 then we can guess it would have claimed either UHD 4K @ 120 fps, or UHD 5K @ 60 fps. And conveniently DisplayPort 1.2 is a part of the Thunderbolt 3 over USB-C Alt Mode which is the USB-C Alt Mode supported by the Dell XPS 13 (9360).

The good news is that when I plugged it in, the Moshi USB-C to HDMI Adapter "just worked" in Ubuntu Linux 16.04 LTS, at least with the Linux 4.8.0 kernel (backported from Yakkaty Yak, Ubuntu Linux 16.10). I appeared to be able to pick the screen resolution as expected, including picking 720p (1280x720 @ 60Hz), and my Samsung 6-series TV even detected the selected output rate (cf, the Dell DA200 where the TV was detecting 1080p in all selected resolutions). So somewhat by luck (and thanks to gdx's post on Reddit) I appear to have a working solution. (For the record it also seems to work in Microsoft Windows 10 -- consistent with the "no drivers" promise -- although it seemed to only initialise the external HDMI display at all after I had logged in on the primary display. By contrast in Ubuntu Linux 16.04 LTS, the HDMI display comes up at 1080p -- maximum resolution of the Samsung 6-series TV I was using -- before I log in, then switches to the resolution I picked in the settings after I log in.))

From the above research I expect there are other passive USB-C to DisplayPort 1.2 adapters, with or without a DisplayPort to HDMI adapter wedged into them, which should work too (eg, the Kanex KU31CHD4K USB-C to HDMI 4K Adapter adapter which appears to be Thunderbolt 3 based might work; or the Kanex K181-1016-WT8I USB-C/DisplayPort adapter might work with a DisplayPort to HDMI adapter on the outside; the Dell USB-C to HDMI adapter may also be DisplayPort 1.2 Alt Mode, but merely claims HDMI 2.0 compatibility so it is hard to know how it is implemented; and the Google USB-C to DisplayPort adapter also might work, but the "requirements" are so vague -- "video-enabled USB Type-C port" -- as to be useless). In particular it seems that HDMI resolutions covered by HDMI 1.4 standard have a good chance of "just working" with passive adapters, thanks to DisplayPort Dual Mode which is basically a passive repurposing of the DisplayPort cables for HDMI signals... 4K UHD is covered by the HDMI 2.0 standard, which is supported as a Dual Mode by DisplayPort 1.3. (Basically a "Standard HDMI cable" is equivalent to HDMI 1.4, and a "High Speed HDMI Cable" is equivalent to HDMI 2.0 -- see HDMI guide to finding the right cable. So a claim of "4K @ 60 Hz" also hints at HDMI 2.0 compatibility.)

But it is clearly non-trivial to identify (a) how a given USB-C HDMI adapter is implemented from the "specifications" provided, or (b) whether or not they will be compatible with a given piece of hardware, or software. Worse still, even the passive adapters seem to be fairly non-trivially priced (eg, 5% of the laptop cost), so trying them at random is probably not a cost/time efficient approach.