Update: A full write-up has been posted on my blog at: https://blog.linh.social/2025/01/11/installing-running-freebsd-on-steam-deck/. The post also includes some corrections and new learnings since creating this gist.
- Download and burn a FreeBSD 14.2 amd64 installer ISO from FreeBSD.org
- Burn the installer ISO on to a USB drive, or use a multi-boot tool like IODD or Ventoy
- Use a USB dock or hub (Anker PowerExpand or 543 6-in-1 USB hub is what I've been using) with USB power delivery pass-through to connect the following devices:
- USB-C power adapter
- USB keyboard
- USB boot drive with FreeBSD installer burned or loaded on it
- USB Ethernet adapter that has support under FreeBSD
- With the Steam Deck powered off, press and hold the Volume Down button and press the Power button. Hold down the Volume Down button until the firmware boot menu appears
- Select the USB device with the FreeBSD installer
- In the FreeBSD installer, you need to use the USB Ethernet adapter for network access. See Notes section for more.
- Download either the FreeBSD-14.2-RELEASE-amd64-ufs.raw.xz or the FreeBSD-14.2-RELEASE-amd64-zfs.raw.xz raw disk images from FreeBSD.org or a mirror
- Using BalenaEtcher, Raspberry Pi Imager, or
dd
, burn the uncompressed raw disk image to a microSD card (32 GB or larger is recommended) - With the Steam Deck powered off, press and hold the Volume Down button and press the Power button. Hold down the Volume Down button until the firmware boot menu appears
- Select the EFI SD/MMC Card device from the list
- After FreeBSD has booted up, default root password is blank
- The main partition should be resized upon first start up
Wireless networking is currently not working, but included are some of the steps taken to try to get it working.
Install the wifi-firmware-rtw88-kmod-rtw8822c-20241017.1401000_1
package by running:
pkg install wifi-firmware-rtw88-kmod-rtw8822c-20241017.1401000_1
The following lines needs to be added to /boot/loader.conf
rtw88_rtw8822c_fw_bin_load="YES"
compat.linuxkpi.skb.mem_limit=1
The following lines may also need to be added to the same file, but those have not been vetted:
sysctl compat.linuxkpi.rtw88_pci_disable_aspm=1
sysctl compat.linuxkpi.rtw88_disable_lps_deep=1
In /etc/rc.conf
, add the following lines to assign rtw880
to wlan0
and set the wireless country and regulatory domain (FCC US is used):
wlans_rtw880="wlan0"
create_args_wlan0="country US regdomain FCC"
Configuring the interface to use WPA Supplicant and DHCP in /etc/rc.conf
:
ifconfig_wlan0="WPA SYNCDHCP"
Add the appropriate wireless network SSID and pre-shared key to /etc/wpa_suppliant.conf
:
network={
ssid "SSID"
psk "Pre-shared Key or Passphrase"
priority 0
}
Restart networking by running:
service netif restart
service routing restart
With the Steam Deck connected to the network and is able to access the Internet, run the following commands to install the AMD GPU kernel modules and drivers.
pkg install drm-kmod
sysrc kld_list+=amdgpu
It is recommended to reboot at this point to let all of the required drivers and kernel modules to load.
To use KDE Plasma 5 with X.org and using the SDDM login manager, run the following commands:
pkg install xorg kde5 sddm firefox-esr
sysrc dbus_enable="YES"
sysrc sddm_enable="YES"
Also, add the following lines to /etc/sysctl.conf
net.local.stream.recvspace=65536
net.local.stream.sendspace=65536
KDE Plasma 5 with Wayland was not tested and will require additional work
An alternative to KDE and X.org would be GNOME and Wayland.
pkg install xorg gnome gdm firefox-esr alacritty
sysrc dbus_enable="YES"
sysrc gdm_enable="YES"
Also, add the following lines to /etc/sysctl.conf
net.local.stream.recvspace=65536
net.local.stream.sendspace=65536
The out-of-the-box settings for the default GNOME terminal application does not render text properly, with extremely wide and somewhat inconsistent spaces between characters, Alacritty should be used for a good out-of-the-box experience.
- Button to key mappings:
A
maps toENTER
B
maps toESC
View
(between the directional pad and the left thumb stick) maps toTAB
- The directional pad maps to the equivalent
UP
,DOWN
,LEFT
andRIGHT
arrow keys
- Even though the wireless network adapter is detected in the FreeBSD installer and is able to scan for wireless networks, it does not seem to be able to associate with any wireless networks. At least, not with any wireless networks on my Unifi access point.
- Depending on the USB Ethernet adapter used, the device can sometimes drop out causing network connectivity to drop out
- After installing FreeBSD and rebooting, the wireless adapter does not appear in the interface list and the corresponding kernel modules seem to be loaded.
- KDE: The internal screen is rotated 90 degrees counter/anti-clockwise compared to normal. This can be adjusted after loading into KDE (or another desktop environment). GNOME has the correct screen orientation by default.
- The only audio devices available are the AMD R6xx HDMI audio devices. No audio will come through the integrated speakers or through the built-in headphone jack
- When plugged into the official Steam Deck Dock, audio over HDMI seems to work. On my setup, the audio is being piped out through R6xx device 2 (available devices are 0, 1, 2 and 3)
- Ethernet adapter included in the official Steam Deck Dock is not consistent or reliable
- Audio is available with any compatible USB audio interface (including a UGREEN USB C to 3.5mm headphone adapter dongle)
- Power profiles are not available via KDE Systems Settings
- Fans spin almost the entire time, though not always at higher speeds