Steam Deck

From ArchWiki
Warning: This article discusses use of the Steam Deck with plain Arch Linux, not SteamOS. While the latter is an Arch-based distribution, it has several packages that differ from the official repositories, and is not supported by the Arch Linux community.
Hardware PCI/USB ID Working?
microSD card reader 1217:8621 Yes
WiFi (LCD/Jupiter) 10ec:c822 Yes
WiFi (OLED/Galileo) 17cb:1103
GPU (LCD/Jupiter) 1002:163f Yes
GPU (OLED/Galileo) 1002:1435
Audio 1022:15e2 Yes
Bluetooth (LCD/Jupiter) 13d3:3553 Yes
Bluetooth (OLED/Galileo) 17cb:1103
Touchscreen 2808:1015 Yes
Steam Deck controls 28de:1205 Yes

The Steam Deck is a gaming-focused handheld PC from Valve. Since it is completely unlocked and by design has full Linux driver compatibility, it can easily be used as an all-purpose handheld PC with Arch Linux.

Accessibility

The firmware has white text on black background, which should be fine with OCR. Blind users may still want to request the help of a sighted person to change firmware settings or selecting a boot device.

Navigation can be done with a keyboard and mouse, or the physical buttons (DPad and A,B,X,Y) and tactile screen of the device.

There is a single LED at the top of the device, but it does not provide diagnostic codes.

Installation

You can install Arch Linux from the SteamOS "Desktop Mode", although this way of installing is more involved than using a USB flash installation medium through the microSD card slot or the USB-C port.

If you choose to use an Arch Linux installation medium, hold down Volume Down and press the Power buttons to boot on it when starting up the deck.

Firmware

fwupd does not support any devices in the Steam Deck.

The jupiter-hw-support package from SteamOS's jupiter repository contains two services and associated scripts which update at boot the BIOS and controller firmware respectively. It is possible to run these or update firmware manually, but outside of early LCD units, un-updated Steam Deck firmware is not known to cause any bugs or performance loss in Arch Linux.

For the LCD models, firmware F7A0131 is the first to enable support for the amd_pstate CPU frequency scaling driver.

Shortcuts

  • Hold down Volume Up and press the Power button to access the UEFI settings,
  • Hold down Volume Down and press the Power button to access the UEFI boot menu (called "Boot Manager" in Valve's documentation),
  • Hold down ("Three Dots" button under the right touchpad) and press the Power button to access Valve's bootloader menu,
  • Hold down Volume Down+Power+⋯ ("Three Dots" button under the right touchpad) to reset the UEFI settings to their defaults (keep the two buttons other than Power held after the first blink of the LED: the LED will blink during the operation and stop once done, then release the buttons).

Audio

This article or section needs expansion.

Reason: Test OLED model audio with mainline kernels, which should work since 6.10. (Discuss in Talk:Steam Deck)

The LCD model's built-in audio works out of the box since kernel version 6.1.

The OLED model's built-in audio requires compatible firmware, kernel and ALSA UCM rules in order to work:

  • The following firmware files need to be present in the system. They can be compiled from upstream source, or copied from the steamdeck-dsp package published in Valve's jupiter repository.
/usr/lib/firmware/amd/sof/sof-vangogh-data.bin
/usr/lib/firmware/amd/sof/sof-vangogh-code.bin
/usr/lib/firmware/amd/sof-tplg/sof-vangogh-nau8821-max.tplg
  • Neptune kernel (from the jupiter repository) version 6.1.52 or newer works.
  • alsa-ucm-conf 1.2.11 or newer needs to be installed. Then, rules for sof-nau8821-max need to be added, such as by copying /usr/share/alsa/ucm2/conf.d/sof-nau8821-max/ from steamdeck-dsp.

For troubleshooting, see ALSA and PipeWire. If ALSA can't access the built-in audio, check the kernel and audio firmware. If ALSA works but PipeWire doesn't, check the UCM rules.

PipeWire

Some applications, notably Wine, cause audio crackling on the OLED Deck's built-in speakers. When using pipewire-pulse, this can be fixed by increasing the minimum quantum size in pipewire.conf:

default.clock.min-quantum = 256

256 is the lowest value that has been observed to work well with wine. Higher, safer values of 512 or 1024 can also be used.

Bluetooth

This article or section needs expansion.

Reason: The bug was introduced by commits around March 2024, but have been backported to all LTS kernels. A seemingly related fix for a Dell XPS 13 9310 might be applicable here, instead of the linked revert. (Discuss in Talk:Steam Deck)

A small Bluetooth quirk can be encountered on OLED models: a kernel bug prevents suspending if Bluetooth was turned off since boot. This means turning Bluetooth off requires a reboot.

Controller

The built-in game controller works out of the box, but is in lizard mode by default. In this mode, the touchpads act as a mouse, and some buttons as keys, while other buttons do nothing. One of the following methods can be used to remap the controller for gaming.

Raw

On some kernel-firmware-game combinations, the Steam Deck's controller will detect that a game is trying to use it, and switch from lizard mode to emulating a simple Xbox-compatible controller until the game is exited. While this precludes use of touchpads, gyros, and extra buttons that a basic Xbox controller would not have, it requires no configuration and may be preferred over more involved methods for some games.

sc-controller

You can use sc-controllerAUR as an alternative to Steam Input.

If the C0rn3j fork listed above gives you trouble with the right touchpad only working as a joystick mouse, or with the right joystick refusing to work in game, try the kozec beta branch.

This is useful if you wish to use complex profiles without using Steam, for non-Steam games, or as a fix for games that send double inputs.

You can use this while using Steam, just ensure the profile you wish to use is selected before launching a game. If you want to go back to the Steam driver, disable sc-controller from its GUI using the green "burger" button on the top left: if Steam is already open it will automatically switch.

Steam Input

Steam Input can detect and remap the Deck's controls, complete with complex tools such as gyros and capacitive thumbsticks. If Steam is being used to run games, using it to also handle controller mapping may be desirable.

Even if Steam is not being used to run games, it can still serve a dedicated controller remapper – it will create a virtual Xbox-compatible controller under /dev/input that respects the mapping configured in the Steam client and can be used by any application. If Steam's role is limited to remapping controls, it can optionally be set to permanent offline mode, and in case of the Flatpak version, most permissions can be revoked.

opensd

Available via opensd-gitAUR, this userspace driver is an option that's more configurable than "nothing" and more lightweight than the others.

Display

Orientation

On Wayland, the display and touchscreen work correctly in all orientations, without any tweaks. Depending on the model, the orientation may default to portrait but can be changed as normal in a desktop environment's settings.

On Xorg, a manual orientation fix may be needed depending on the display manager used. If the screen defaults to portrait, it can be rotated using xrandr.

$ xrandr -o right

The touchscreen can then be mapped to the proper orientation using xinput.

$ xinput --map-to-output 'pointer:FTS3528:00 2808:1015' eDP

To have this persist on reboots, create an autostart script.

Refresh rates

This article or section needs expansion.

Reason: Check which rates are auto-detected on the BOE OLED, experiment with forced KMS on both Samsung and BOE OLEDs, experiment with EDID editing. (Discuss in Talk:Steam Deck)

The Steam Deck's display supports a wide range of refresh rates, but display managers will not auto-detect most of them.

On LCD models, only 60Hz is auto-detected, but 50Hz works well when force-enabled via KMS:

video=eDP-1:800x1280M@50

On OLED models with the Samsung display, 90Hz and 60Hz are auto-detected.

Gamut

The OLED models are billed as HDR-capable and have a much wider gamut than sRGB, but this causes sRGB-targeting content, including most games, to appear greatly oversaturated.

Fortunately, the display's EDID exposes fairly accurate color information, which can be used to good effect even without any calibration hardware.

GNOME and KDE will automatically generate an ICC profile based on the EDID, which can be used with various desktop applications.

To set up the same color correction for games, run displaycal GUI on the Deck, tell it to generate its own ICC profile from EDID (this is recommended over re-using the profile generated by GNOME since that uses a newer version of the ICC format), then convert that profile to a LUT via DisplayCAL's 3D LUT Maker. This LUT can then be injected into games via vkbasaltAUR.

The above was observed to give excellent results on the Samsung OLED. An even better method would be to tell AMDGPU to load the LUT into its color management pipeline, but while technical capability to do this is being adopted into mainline, documentation is scarce.

Fan controls

The Steam Deck's fan control can be enhanced by a daemon provided in Valve's jupiter repository, but are fully functional without it.

If you are using a mainline kernel, you need patches from Valve's kernel to expose the corresponding ACPI functionality, for example by installing the user-adapted steamdeck-dkmsAUR ACPI platform driver in DKMS form.

Function keys

Key Visible?1 Marked?2 Effect
Volume Down Yes Yes VolumnDown
Volume Up Yes Yes VolumnUp
Power Yes3 Yes XF86PowerOff
Select Yes Yes Tab
DPad Up Yes Yes Up
DPad Left Yes Yes Left
DPad Right Yes Yes Right
DPad Down Yes Yes Down
Start Yes Yes Escape
A Yes Yes Enter
B Yes Yes Escape
X No Yes
Y No Yes
Steam No Yes
"Three dots" No Yes
L1 No Yes
L2 Yes Yes Right click
R1 No Yes
R2 Yes Yes Left click
R4 No Yes
R5 No Yes
L4 No Yes
L5 No Yes
  1. The key is visible to xev and similar tools.
  2. The physical key has a symbol on it, which describes its function.
  3. systemd-logind handles this by default.

Mimic SteamOS behavior

Note: Compared to a stock SteamOS install, Steam will be missing widgets to adjust "Framerate Limit" and "Thermal Power (TDP) Limit". See Gamescope and AMDGPU for how to make the same adjustments manually.

Auto-login

To set your system to automatically login without password, you can use any display manager and configure it to do so, for example LightDM.

Big Picture Networking

To enable Steam Big Picture networking support, you must use NetworkManager.

Steam client integration

You can launch steam with the -steamos launch option to enable fullscreen UI elements such as login and client updates.

On-screen keyboard

See KDE#Plasma Mobile, GNOME on-screen keyboard or List of applications/Utilities#On-screen keyboards for information on how to set up an on-screen keyboard.

Steam's on-screen keyboard also fully works, but Wayland will by design prevent it from interacting with other applications' windows. The libextest-gitAUR library can be injected into Steam to effectively remove this boundary, but this weakens the security inherently offered by Wayland.

See also