This guide explains how to turn a Steam Deck into a mobile-robot development workstation. It covers booting Ubuntu 24.04 from a microSD card, installing ROS 2 Jazzy, and configuring a productive workflow for building and testing robots.
- Powerful AMD APU with built-in screen, controls, Wi-Fi, and Bluetooth.
- Runs standard x86_64 Linux, so ROS 2 and robotics tools work natively.
- microSD slot allows a portable, swap-free Linux install without modifying SteamOS.
- Steam Deck (LCD or OLED).
- 64 GB+ microSD card (UHS-I or better) and reader.
- USB-C hub or dock with keyboard/mouse (recommended for setup).
- Another computer to flash the microSD image.
- Download the Ubuntu 24.04 (64-bit) desktop ISO.
- Insert the microSD card into your flashing machine.
- Use Rufus (Windows), balenaEtcher, or
dd(Linux/macOS) to write the ISO to the microSD. - Safely eject the card and insert it into the Steam Deck.
- Power off the Steam Deck completely.
- Hold Volume Down and press Power to enter the Boot Manager.
- Choose the microSD (often shown as "EFI SD/MMC" or similar).
- Follow the Ubuntu installer. When partitioning, install to the microSD to keep SteamOS intact.
- After installation, return to the Boot Manager and set the microSD as the boot device when you want the development environment.
- Run all updates:
sudo apt update && sudo apt upgrade. - Enable performance mode in KDE Power settings or via the performance overlay when compiling.
- (Optional) Install Steam Deck firmware and controller tools:
sudo apt install steam-devices steamlink. - Add
amdgpufirmware if prompted bydmesg(typically already included in Ubuntu 24.04).
- Configure locales:
sudo apt update sudo apt install locales sudo locale-gen en_US en_US.UTF-8 sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8 export LANG=en_US.UTF-8 - Add the ROS 2 repository:
sudo apt install software-properties-common curl gnupg lsb-release sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list
- Install ROS 2 Jazzy desktop and tools:
sudo apt update sudo apt install ros-jazzy-desktop ros-dev-tools
- Source ROS 2 automatically:
echo "source /opt/ros/jazzy/setup.bash" >> ~/.bashrc source ~/.bashrc
mkdir -p ~/ros2_ws/src
cd ~/ros2_ws
colcon build --symlink-install
source install/setup.bashAdd the workspace overlay to your shell by appending source ~/ros2_ws/install/setup.bash to ~/.bashrc.
- Add your user to dialout for serial devices:
sudo usermod -aG dialout $USER. - For microcontrollers over USB-C hubs, ensure they enumerate as
/dev/ttyACM*or/dev/ttyUSB*and setudevrules as needed. - Wi-Fi 6E and Bluetooth work out of the box; tethering via USB-C or Ethernet docks is ideal for stable robot links.
- If you dual-boot, be mindful of SteamOS taking over the boot priority; use the Boot Manager to re-select the microSD when necessary.
- Use
colcon build --merge-installfor faster incremental builds on the APU. - VS Code works well; install via
sudo snap install code --classicor the.debpackage. - For simulation, install Gazebo Harmonic (
sudo apt install ros-jazzy-gazebo-*) and lower graphics settings if frame rates drop. - Keep a second microSD as a backup image after you finish configuring the system.
- Black screen after boot: hold the Steam button to open the performance overlay and verify brightness; try an external monitor if needed.
- Trackpads not detected: install the
steam-inputudev rules viasteam-devicesand reboot. - Slow builds: switch the Steam Deck to performance mode, plug into power, and consider using
colcon build --parallel-workers $(nproc).
- Clone your robot repositories into
~/ros2_ws/srcand build. - Set up ROS 2 networking (DDS domain ID and
ROS_LOCALHOST_ONLY=0) to communicate with robots on the same LAN. - Create a system image of the microSD once the environment is stable.