Skip to content

Steam Deck

Eamonn Rea edited this page Jan 13, 2024 · 33 revisions

Official Steam Deck support for SteamTinkerLaunch may be dropped if no one comes forward to help maintain it. If you would like to help, check #859 for a starting point, and please open PRs for anything you can help with maintaining.

SteamTinkerLaunch support for Steam Deck is still in early stages. User testing and feedback is therefore vital for improvements. Feel free to report issues and suggest ideas in the Steam Deck issue. As a result, it is best to use the latest git release of SteamTinkerLaunc!! It is discouraged to use the latest release from the Releases section, as this typically will not include the latest features and fixes, which may hurt functionality on Steam Deck.

I give very little time to my Steam Deck in general these days, and even moreso, I have no use-case for SteamTinkerLaunch on SteamOS. As a result, virtually no testing is performed by me on SteamOS these days. The vast majority of improvements will have to come from community contributions to the project.

SteamTinkerLaunch on Steam Deck has only been tested against Valve's official SteamOS, in particular it sees the most testing against the SteamOS Beta channel. It has not been tested against third-party distributions that can run on Steam Deck. Though there should not be issues, support may be limited on Steam Deck when running a distribution other than Valve's official SteamOS.

After each major SteamOS update, if you plan to install tools like ModOrganizer 2 you should run steamtinkerlaunch cleardeckdeps and then re-run SteamTinkerLaunch, in order to refresh any required dependencies.

Table of Contents

Installation

See the Installation wiki for detailed installation instructions. You can also install SteamTinkerLaunch via ProtonUp-Qt v2.7.3 or higher. Once again, make sure you are using the very latest SteamTinkerLaunch-git release and NOT a stable release.

In some rare instances, some networks may prevent SteamTinkerLaunch from correctly downloading Yad, the UI toolkit used by SteamTinkerLaunch (see #707). In such an instance, you may need to manually download the Yad AppImage from the SteamTinkerLaunch-Tweaks releases page, and save it to ~/stl/deps/usr/bin (you are also free to provide your own AppImage if you'd like). Once downloaded, you'll want to create a symlink in that folder to the Yad AppImage file and name that symlink yad. You can do this from the command line or from the Dolphin file manager by dragging the downloaded AppImage to an empty part of the same folder it is downloaded in and choosing the "Link Here" option.

Note: You may see SteamTinkerLaunch Flatpak available for download on KDE Discover. This release is only for Steam Flatpak, which the Steam Deck does not use. Do not report issues with using SteamTinkerLaunch Flatpak on Steam Deck unless you are for some reason explicitly using Steam Flatpak on Steam Deck.

Usage

SteamTinkerLaunch will automatically add itself as a Steam Compatibility Tool after installation. Make sure to restart Steam for SteamTinkerLaunch to show up.

General SteamTinkerLaunch usage still applies on Steam Deck, meaning you should still use the Steam Compatibility Tool for Proton games, and use the Steam Launch Option only for Native Linux games. Note that for the launch option, you may have to specify the full path to SteamTinkerLaunch as /home/deck/stl/prefix/steamtinkerlaunch.

SteamTinkerLaunch should work fine in both Game Mode and Desktop Mode, with the exception of native games in Game Mode. There is a known issue with SteamTinkerLaunch and native Linux games in Steam Deck Game Mode with no known workarounds or fixes yet, but it is being tracked at #630.

Technical Notes

Setup

The installation process of SteamTinkerLaunch on Steam Deck is a little different from a regular Linux desktop. The Steam Deck's root filesystem is read-only, which means any extra programs installed here will be wiped. This means it is not recommended to install SteamTinkerLaunch and its dependencies into the root filesystem. On Steam Deck, SteamTinkerLaunch will install itself and any extra dependencies missing from SteamOS locally to your home folder at /home/deck/stl.

If you have installed SteamTinkerLaunch manually, as Steam Deck support is currently in early stages, each time SteamTinkerLaunch is run on Steam Deck it will automatically update to the latest git release of Steam Deck, meaning you will automatically get any fixes to your Steam Deck - Provided you have an Internet connection! If you installed via ProtonUp-Qt, SteamTinkerLaunch will not automatically update on Steam Deck.

SteamTinkerLaunch knows when it is running on Steam Deck by testng [ -f "/etc/os-release" ] && grep -q "steamdeck" "/etc/os-release", and will log that it is running on Steam Deck in its steamtinkerlaunch.log file. It also knows when it is running in Game Mode, by checking whether GameScope is running when launched, and making some Game Mode-specific tweaks.

Dependencies

Fortunately, many of the hard dependencies already come pre-installed on SteamOS, and SteamTinkerLaunch will download any missing dependencies to its local install folder at /home/deck/stl/deps. This means SteamTinkerLaunch and its dependencies will remain installed after any software updates.

Currently, the extra dependencies downloaded by SteamTinkerLaunch are:

  • yad v10.90 (link)
  • cabextract v1.9.1-2 (Arch archives)
  • innoextract v1.9-7 (Arch archives)

You can also manually download these dependencies and place them in /home/deck/stl/deps, and SteamTinkerLaunch will use them instead of fetching the dependencies online.

Yad, the toolkit that SteamTinkerLaunch's UI is written with, uses the latest Yad AppImage, but at the time of writing this does not include support for rendering webpages. This means you will not be able to access the Steam Deck wiki with the F1 hotkey like you might be used to on desktop.

If there are any dependencies missing that you feel should be included, suggest them on the Steam Deck issue, noting the specific use-case for this dependency.

Game Mode vs. Desktop Mode

SteamTinkerLaunch attempts to differentiate between running in Game Mode and Desktop Mode, as certain tweaks and workarounds are used when running in Game Mode that may not be applicable in Desktop Mode. It attempts to detect which mode you are in based on whether or not GameScope is currently running when SteamTinkerLaunch is started - Steam Deck Game Mode runs inside a GameScope session, but it does not run in Deskop Mode.

In Game Mode only, SteamTinkerLaunch will do the following:

  • Disable GameScope to prevent conflicts with Game Mode's GameScope.
  • Disable MangoHud to prevent conflicts with Game Mode's MangoHud ("Performance Overlay").
  • Disable Feral GameMode to prevent conflicts with Steam Deck Game Mode's performance configuration.
  • Disable the Notifier, as it does nothing in Game Mode.
    • If you are upgrading from an older version of SteamTinkerLaunch, you may have to enable the notifier in the Global Menu, as previously it would have been disabled regardless.
  • Disable the Tray Icon, as it does nothing in Game Mode.
  • Set the window resolution to the Steam Deck's default resolution of 1280x800.

In Desktop Mode, most of SteamTinkerLaunch's functionality should be accessible. Anything disabled above should be enabled in Desktop Mode. You should be able to use SteamTinkerLaunch in Desktop Mode just like you would use it on a regular Linux desktop.

If something is not accessible that you believe should be, feel free to report an issue or open a pull request.

Usability

There are a few extra, Steam Deck-specific tweaks made to the SteamTinkerLaunch experience in order to improve usability on a handheld form factor. SteamTinkerLaunch will expand the Yad scrollbar by modifying $HOME/.config/gtk-3.0/gtk.css and reverting this change on exit. There are also built-in Controller Mappings which can be enabled to help navigate the menus using the Steam Deck's controls.

Controller Mappings

SteamTinkerLaunch comes with its own controller configuration to help you navigate the menus using the Steam Deck's built-in controls. These will only be enabled when running the game and will be disabled on game exit.

By default it stores this file at /home/deck/.config/steamtinkerlaunch/steamdeck.conf, with the default value STLCTLID="31337". This mapping must be loaded on a per-game basis and is skipped by default from the command line (optionally via ssh). If you do not wish to do this, you can use the touchscreen to navigate the menus, use the Steam Deck's built-in mouse controls, or use a physical keyboard and mouse.

Steam stores user-created controller mappings are stored under /home/deck/.local/share/Steam/steamapps/common/Steam Controller Configs/$SteamUserID/config/$SteamAppID/controller_neptune.vdf (replacing $SteamUserID with your UserID and $SteamAppID with your game's AppID). You may have to create this file manually and configure it with at least one button mapping. SteamTinkerLaunch will replace that controller configuration with its own at /home/deck/stl/prefix/misc/stl-steamdeck-control.vdf which has joypad/controller mappings to make SteamTinkerLaunch easier to navigate with controllers and joypads, so it does not matterr what values you put in your manually-created configuration for your game. If this file already exists, SteamTinkerLaunch will automatically create a backup before overwriting it.

SteamTinkerLaunch's controller mapping will be automatically updated if with SteamTinkerLaunch if it changes.

Command-Line Usage

Below are a list of commands for using SteamTinkerLaunch's controller mappings on Steam Deck. If you are not comfortable with the command line you may want to skip these instructions.

  • To enable the controller mapping for your game, from the command line, run steam steam://forceinputappid/$SteamAppId, replacing $SteamAppId with your game's AppID. You can get your game's AppID by searching for it with $HOME/stl/prefix/steamtinkerlaunch gi $GameName, where $GameName is the name of your game.
  • To reset the loaded configuration back to the default value, from the command line, run steam steamtinkerlaunch://forceinputappid/0.
  • If you want to load the Steam Deck Interface controller mapping, from the command line, run steam steam://forceinputappid/769 (This app is "ValveTestApp769")

Note: In testing, it was noted that sometimes controls may need to be reset manually. Keep the above commands in mind in case anything goes wrong!

To test that your controller mapping works, you can try accepting the Wait Requester with the A button.

Button Mappings

Controls for steamtinkerlaunch are currently (currently) like this:

Button Mapping Keyboard Mapping
A Button Spacebar
B Button Escape
X Button Tab
D-Pad Up Up Arrow Key
D-Pad Down Down Arrow Key
D-Pad Left Left Arrow Key
D-Pad Right Right Arrow Key

This initial controller mapping is still in early stages, so feedback and suggestons on how best to implement a controller mapping that best takes advantage of the Steam Deck's controls are more than welcome. Feel free to offer suggestions over on the Steam Deck issue or open a pull request.

Caveats

As SteamTinkerLaunch is a large program that was initially created with standard Linux desktops in mind, there may be some features currently not working fully or correctly on Steam Deck - Primarily those relating to third-party programs that are expected to be installed in the root filesystem. If these programs cannot be found with which <ProgramName>, SteamTinkerLaunch may be unable to automatically detect it. If you're using an AppImage for a program, chances are you can configure SteamTinkerLaunch to run the AppImage by changing the path to the program in the menus. This will vary from program to program, so feel free to search the wiki to learn how to configure these the various tools that SteamTinkerLaunch supports.

There is a chance that some tools may not be working fully or correctly because of a missing dependency. Feel free to discuss any problems you are facing regarding missing functionality on the Steam Deck issue.

Some actions on Steam Deck, such as setting up ReShade repositories and installing some Winetricks, can take quite a while. Please keep this in mind and exercise patience when waiting for actions to complete on Steam Deck.

Modding

Modding games through ModOrganizer 2 or Vortex Mod Manager should be possible on Steam Deck. However, due to how Steam Deck Game Mode handles application windows, it is strongly recommended to do your modding from Desktop Mode. It may also be a good idea to connect a keyboard and mouse to aid in working with the filesystem, as well as connecting to an external monitor. This is just good general advice for modding games on a handheld.

If you run into any issues modding your game on Steam Deck, report it on the Steam Deck issue.

Known Issues

Given its previously mention early development stages, there are a handful of known issues with SteamTinkerLaunch on Steam Deck. Aside from the possibility of some missing functionality, some known issues include:

  • In Game Mode, a rare jittering can occur with multiple windows open. This may be fixed on Valve's side in a future update to GameScope/KDE.
  • In Game Mode, it may be difficult to switch between multiple application windows with SteamTinkerLaunch, for example when using ModOrganizer 2. To work around this, try to avoid using extensively using tools like ModOrganizer 2 in Game Mode.
  • In Game Mode, sometimes (rarely) a subwindow is opened behind the main SteamTinkerLaunch window. This appears to be random, and as GameScope can have issues with multiple application windows, you may need to restart your game to fix this issue.
  • In Game Mode, sometimes the Steam touchpad misbehaves around screen borders, making it difficult or impossible to interact with buttons along the bottom of the window with the touchpad. In this case you should use the touchscreen to navigate.
  • In Game Mode, some native Linux games may skip the SteamTinkerLaunch UI and run anyway
  • In Game Mode, HDR on Steam Deck OLED probably doesn't work.
    • enabling the DXVK HDR option (either the checkbox, or DXVK_HDR in the per-game config file) may help, but unlikely since HDR is controlled by the Steam Deck Game Mode's GameScope session, which is independent of DXVK. vkd3d-proton, and the GameScope configuration offered by SteamTinkerLaunch (those are for nested GameScope sessions on the Linux Desktop, not the embedded session on SteamOS).

Most of the Known Issues relate to running SteamTinkerLaunch in Game Mode. Therefore, for a smooth experience, it might be a good idea to do most of your tinkering from Desktop Mode. You can connect an external display, a keyboard and a mouse for an even smoother time tinkering, as this can make it easier to interact with the user interface which was originally designed with larger screens, and a keyboard and mouse in mind.

Once you have configured your game in Desktop Mode, you can launch your game with SteamTinkerLaunch in Game Mode and let the Wait Requester time out. Afterwards, your game will automatically start.

Missing Functionality

Most of SteamTinkerLaunch's core functionality should work on Steam Deck. However, by default, a number of external programs may not work. As mentioned, you may be able to use AppImages for some of these missing programs. You also have the option of disabling the read-only filesystem and manually installing these programs, but keep in mind that you will lose any modifications to the read-only filesystem on the next SteamOS system update.

Below is a summary of SteamTinkerLaunch functionality which may be missing out-of-the-box on Steam Deck:

  • Boxtron (May work if SteamTinkerLaunch is manually pointed to an executable/if added to path)
  • DLSS (Steam Deck runs on AMD hardware which does not support DLSS)
  • Discord IPC Bridge (Untested with Discord Flatpak(s) on Steam Deck)
  • Depth3D (Steam Deck does not support VR)
  • Flat2VR (Steam Deck does not support VR)
  • Luxtorpeda (May work if SteamTinkerLaunch is manually pointed to an executable/if added to path)
  • Nyrna (May work if SteamTinkerLaunch is manually pointed to an executable/if added to path)
  • Raytracing (Steam Deck does not support raytracing)
  • ReplaySorcery (May work if SteamTinkerLaunch is manually pointed to an executable/if added to path)
  • vkBasalt (May need testing to confirm)
  • VR (Steam Deck does not support VR)
  • Wine (System-Wide Wine is not supported on Steam Deck out of the box)

If you encounter issues with a feature on Steam Deck that is not listed here, please open an issue. Feel free to open a pull request if you can add support for these features on Steam Deck.

Contributing

You may encounter bugs with SteamTinkerLaunch on Steam Deck, so as mentioned extensively please feel free to report bugs and, if you're able to, get involved and open a pull request to add a feature or fix a bug. Thank you!

Clone this wiki locally