Connect to Your Raspberry Pi Over USB Using Gadget Mode
Share
What you'll need
Interests
Program your Pi without a keyboard, monitor, or network connection
We’ve written previously about how to configure WiFi and SSH on your Raspberry Pi without having to connect any peripheral devices (headless). As long as you’re comfortable on the command line, this makes it much easier to work with your Pi.
How to Set up WiFi on Your Raspberry Pi Without a Monitor (Headless)
No monitor, keyboard, or mouse? No problem.
How to Enable SSH on Raspberry Pi OS Without a Screen
The SSH protocol is disabled by default.
Now, I’ve been doing projects with Raspberry Pi’s since the first version, and I only recently found out about a Linux feature that allows you to connect to the Pi directly over USB: it’s called USB gadget mode. With “gadget mode” enabled, we don’t need to configure the WiFi network or connect any peripheral devices, we simply connect the Pi to our computer with a USB cable, and now we’ve got SSH access.
In this guide, I’ll show you how enable gadget mode and connect to your Pi via USB.
Note: I believe this feature was initially enabled for the Pi Zero, and it does not work on earlier versions of the Pi. I have, however, tested with the Raspberry Pi 4, and it works as long as you connect via the USB-C connector.
1 – Flash Raspberry Pi OS onto your SD card
First we need to flash Raspberry Pi OS onto an SD card. If you need help with this process, please follow our guide on how to install Raspberry Pi OS on your Raspberry Pi.
How to Install Raspberry Pi OS on Your Raspberry Pi
Get the new official Raspberry Pi OS on your Pi.
2 – Edit config.txt on the boot partition
With Raspberry Pi OS installed on the SD card (and the SD card still mounted on your computer), you can use Finder or a shell to navigate to the boot directory. Now edit the file called config.txt
, and append the following:
dtoverlay=dwc2
Save and exit.
3 – Enable SSH
We can SSH by simply adding an empty file called ssh
directly in the boot directory.
On the command line, you can navigate to the boot directory and run:
touch ssh
Note: The file must be called “ssh” not “SSH” or “ssh.txt” or anything other than “ssh”.
4 – Edit cmdline.txt
Now, edit the file called cmdline.txt
. Look for rootwait
, and add modules-load=dwc2,g_ether
immediately after.
Note the formatting of cmdline.txt is very strict. Commands are separated by spaces, and newlines are not allowed.
Here’s an example of what my cmdline.txt
file looks like, but you should not copy this. Simply add the required command mentioned above.
console=serial0,115200 console=tty1 root=PARTUUID=6c586e13-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait modules-load=dwc2,g_ether quiet init=/usr/lib/raspi-config/init_resize.sh
Save and exit.
5 – Connect over USB and boot the Pi
That’s it for configuration! Now you can eject the SD card, and insert it into the the Pi. Using a USB cable, connect to the Raspberry Pi from your computer.
After the Pi boots up (this will take a while initially), the Pi should appear as a USB Ethernet device, and you can SSH into it using:
ssh [email protected]
Enjoy!