Scripts to allow you to use your Steam Deck as a controller on Linux by sharing the controller over the network using usbip
On the Steam Deck:
-
Go to Desktop Mode
-
Open a terminal
-
Set a password for the
deck
user (if not already set):passwd deck
-
Enable writing to the Steam Deck's filesystem:
sudo steamos-readonly disable
-
Install
usbip
tools andgit
:sudo pacman -S usbip git
On the client Linux machine:
- Install USB/IP tools (varies by distribution):
- Arch Linux:
sudo pacman -S usbip
- Fedora:
sudo dnf install usbip-utils
- Debian/Ubuntu:
sudo apt install usbip
- Arch Linux:
- Clone this repository to your desired location:
git clone https://github.com/kalvinarts/steam-deck-usbip.git
- See Adding to Steam as a Non-Steam Game for instructions on how to run this script from Steam's Big Picture mode. (recommended method)
- Alternatively, run the server script directly in a terminal (is recommended to have a keyboard connected if you use this method):
sudo ./server.sh
To stop the server, you can either:
- Press
Ctrl+C
in the terminal (you will need a keyboard connected) - Hard reset the Steam Deck using the power button (for now this is the only way to stop the server if you don't have a keyboard connected)
See the roadmap for future improvements.
Run the client script passing your Steam Deck's IP address as the first argument:
sudo ./client.sh <steam-deck-ip>
The script will automatically connect to your Steam Deck's controller.
To manually manage the connection, you can use these commands instead of the client script:
-
List available devices:
sudo usbip list -r <steam-deck-ip>
-
Attach the Steam Controller:
sudo usbip attach -r <steam-deck-ip> -b <busid>
-
To detach when done:
sudo usbip detach -p <port>
The Steam Controller should now be available on your client machine.
To run the script directly from Steam's Big Picture mode:
- In Desktop Mode, open Steam
- Click "Add a Game" in the bottom left
- Select "Add a Non-Steam Game"
- Click "BROWSE"
- Navigate to and select
/usr/bin/konsole
- Click "Add Selected Programs"
- Right-click the newly added Konsole in your Steam library
- Select "Properties"
- Change the name to "USB/IP Controller" or similar
- In the "LAUNCH OPTIONS" field, enter:
--hold -e sudo /path/to/server.sh
Replace /path/to/server.sh
with the actual path to where you saved the script
Now you can launch the USB/IP server directly from Gaming Mode or Big Picture Mode. You'll need to enter your deck password when prompted.
- Make sure both machines are on the same network
- Check that the required kernel modules are loaded:
usbip_core
andusbip_host
on the Steam Deck, andvhci-hcd
on the client (the scripts should handle this automatically) - Ensure the firewall allows connections on port 3240
- Add an installer script for easier setup on the Steam Deck
- Add an installer script for easier setup on the client machine
- Add a GUI for so you can start/stop the server without needing a keyboard