Is it possible to connect two PCs via USB C?

To connect one Type-C device (one PC) with another Type-C USB device (or another PC) and expect some connectivity, at least one of the "Type-C link partners" must support so-called DRD - Dual Role Device. The DRD port advertises its dual role by continuously switching its CC (communication channel) pins from 5.1k pull-down (signifying a USB device) to 56k-22k-10k pull-up (signifying USB host with different VBUS supply capability). It does this flip-flop several cycles per second.

However, to be a DRD Type-C device, it must have TWO USB controllers inside, one of xHCI (host controller interface), and another of "DCI" type - device controller interface. The IO of these two controllers must be multiplexed at the USB port pins. Currently only a few products (notably the Intel SoC aka "atom cheery trail" family, and other mobile-oriented chips found in mobile phones) have this capability. If a PC is made of desktop line of processors, no DRD is available yet.

If both PC are of the same kind, no connection (and no harm) will happen.

If one Type-C PC has DRD functionality, it will pick the phase of its "flip-flop advertising" with the role that is opposite to the connected single-role device. If the connecting device is host, the DRD device will lock as device, and vice-versa. If both devices are DRD, the roles will be selected at random, and later should be switchable in software.


I've been asking myself the same question and discovered a few things.

First is that Apple laptops have had this featured called "Target Disk Mode" for a very long time. This mode is in the computer firmware and allows many models of Apple computers to act like an external drive to another computer. This feature exists in Apple computers with USB-C ports. I've tested this with my own Apple laptop with USB-C ports by putting it into Target Disk Mode and using it like a USB drive to another Apple laptop with a USB-A male to USB-C male cable. Apple does this in firmware but there is no reason I can see why this cannot also be done in the operating system, and done in a way to support more than looking like a storage device.

A second thing I discovered is that the model of USB chip Apple puts in their laptops that are capable of this feat is widely used by other computer makers. There's evidence of this with the "hackintosh" crowd using Apple drivers on their non-Apple computers running macOS and seeing the USB ports working.

A third thing I discovered is that there is a project called "USB Gadgets" which intends to allow a computer running open source operating systems to act like a USB device to another computer. There is an abundance of information on this for USB 2.0 but not so much for the USB 3.x chips seen in newer systems.

A fourth thing I discovered is that USB-C ports used for charging/powering a laptop must enter into device mode for the charging to work. You can see this by plugging a "device" computer, one that takes power in from USB-C, into a "host" computer, one capable of providing power out from USB-C, and every USB-C port in a computer will provide some power. If one were to look at the connected USB devices on the "host" computer the "device" computer will be listed. The negotiation of which direction the power flows, and how much, is done over the data pins of the USB port. Unlike the previous systems that used resistors on the data pins for a very passive means of conveying this information this new protocol requires an actual data connection.

Fifth is that in the USB 3.x spec is a provision for host to host communications by the "superspeed" data pins. This means all four twisted pair data wires in the cable are available for host to host communications, and each is capable of 5 Gbps of data. That means a 20 Gbps connection is possible.

So, if you have two computers with USB-C ports, and a USB-C cable, then the chances are that all the hardware is there to make a 20 Gbps connection between the two. All it takes is one computer to have the right software to support a network device on a USB-C port, and the other to have the right software to emulate a network device on a USB-C port.

If that software exists then I haven't found it. If it does not exist then someone is likely writing it right now.