| .github | ||
| CommonHelpers | ||
| dump | ||
| ExternalHelpers | ||
| FanControl | ||
| images | ||
| linux | ||
| PerformanceOverlay | ||
| PowerControl | ||
| scripts | ||
| SteamController | ||
| .gitignore | ||
| omnisharp.json | ||
| README.md | ||
| RELEASE.md | ||
| SteamDeckTools.sln | ||
| VERSION | ||
Steam Deck Tools
This repository contains my own personal set of tools to help running Windows on Steam Deck.
This software is provided on best-effort basis and can break your SteamDeck. To learn more go to Risks.
If you found it useful buy me Ko-fi.
1. Steam Deck Fan Control
This is a very early and highly experimental fan controller for Windows build based
on linux/jupiter-fan-control.py available on SteamOS.
1.1. Usage
You can download latest precompiled build from Releases tab. Currently the application requires administrative privileges in order to read various temperature sensors.
It provides 3 modes of operation:
- Default - use EC to control fan (as done today)
- SteamOS - use reimplemented
jupiter-fan-control.py(as in SteamOS when Fan Control is enabled) - Max - blow at full speed.
1.2. How it works?
1.3. Limitations
As of Today (Nov, 2022) the GPU temperature is missing on Windows. Which makes it a little incomplete. However, it should be expected that GPU temperature is "kind of similar" to CPU due to GPU being in the same silicon. But! The device might overheat and break due to this missing temperature. So, use at your own risk.
1.4. Supported devices
The application tries it best to not harm device (just in case). So, it validates bios version. Those are currently supported:
- F7A0107 (PD ver: 0xB030)
- F7A0110 (PD ver: 0xB030)
2. Performance Overlay
This is a very simple application that requires Rivatuner Statistics Server Download) and provides asthetics of SteamOS Performance Overlay.
Uninstall MSI Afterburner and any other OSD software.
It currently registers two global hotkeys:
- Shift+F11 - enable performance overlay
- Alt+Shift+F11 - cycle to next performance overlay (and enable it)
There are 5 modes of presentation:
2.1. FPS
2.2. FPS with Battery
2.3. Minimal
2.4. Detail
2.5. Full
3. Power Control
This is a very simple application that requires Rivatuner Statistics Server Download and provides an easily accessible controls.
Uninstall MSI Afterburner and any other OSD software.
There are currently configurable settings:
- Volume
- Brightness
- Refresh Rate
- Resolution (requires enabling
EnableExperimentalFeaturesinappconfig) - FPS Limit (requires: RTSS > Setup > Enable Framelimit)
- TDP
- SMT (Each core of AMD has 2 threads, this allows to enable/disable second threads)
- OSD / OSDMode (requires PerformanceOverlay running)
- Fan (requires FanControl running)
3.1. Use it
It will only work in OSD mode when rendering graphics. The notification setting is always available.
- SteamDeck Controller: press and hold Quick Access (3 dots), and then DPad Left, Rigth, Up, Down.
- Keyboard:
Ctrl+Win+Numpad2(Down),Ctrl+Win+Numpad4(Left),Ctrl+Win+Numpad6(Right),Ctrl+Win+Numpad8(Up)
Additional shortcuts:
- Control Volume: use Volume Up and Down
- Control Brightness: press and hold Quick Access (3 dots), and then Volume Up and Down
- Press
3 dots + L4 + R4 + L5 + R5to reset (TDP, Refresh Rate, FPS limit) to default
3.2. SWICD configuration
-
Set 3 dots to NONE in button mapping
4. Steam Controller
This is highly experimental "opinionated" implementation of Steam Controller that is meant to replace SWICD and Glossi. This is hard piece and it is rather unsupported (by me), so if it works it works.
It offers 3 main modes of operation:
- Desktop
- X360 emulation (optionally with Rumble) - activated automatically when entering Playnite Fullscreen
- Steam - active automatically when running Steam Gamepad UI, Steam Big Screen UI or running Steam Game
You can easily switch between Desktop and X360 by holding Options button (3 horizontal lines, on top of the right joystick). When profile is switched you will hear a beep.
It is strongly advised that you uninstall (unless you know what are you doing):
- SWICD
- Glossi
- HidHide
Requirements:
- Ensure that you have SWICD, Glossi and HidHide disabled, stopped or uninstalled!
- Ensure that HidHide is disabled, or ensure that
Steam Controller.execan seeNeptune Valve Controller. - Install latest version of https://github.com/ViGEm/ViGEmBus/releases.
4.1. Possible setups
The are various ways how Steam Controller can work with Steam.
If you do not use Steam this is simple, just run it and enjoy.
Since when there's no Steam, there's no problem at all.
4.1.1. Most compatible - Use X360 Controller with Steam
This pretty much work always. It hides the Valve Software Steam Controller from Steam.
It is out of box experience. In this mode you would use either Desktop or X360 controls, and all Steam games would use X360.
The Back Panel buttons can be assigned to some user-defined keys.
4.1.2. Works, but sometimes finicky - Use Steam Input with Steam
It is required to configure Steam as described in Configure Steam.
This is setup that allows you to enable Steam Input and use community provided profiles
on Steam. However, this requires special configuration and in some cases is finicky.
The SteamController.exe automatically detects Steam running game and disable itself
for the duration of game play switch to specially currated Steam profile (non selectable, and hidden).
The are two primary ways how to use it. The best experience is achieved when STEAM IS NOT RUNNING IN BACKGROUND. Use Playnite Fullscreen to start game on the Steam and close it after session (there's an option in Playnite settings). Keep Steam closed otherwise at all times.
Alternative if Steam is running in background it should be pretty stable when configured desktop mode buttons. There will be sometimes finicky behavior when using STEAM button shortcuts. However, this is mostly stable otherwise.
Getting controllers support is hard especially with Steam not making it easy to disable it. I'm doing this to solve my usage pattern. So, I might have limited will to fix all quirks of handling Steam running in background alongside
Steam Controller. This will never be supported mode of operation.
4.1.3. If you know what you do - Ignore Steam
This makes Steam Controller to disable Steam detection. Now, you would have to do everything
you were doing before: like HidHide, additional controllers, etc.
It is not needed to configure Steam as described in Configure Steam.
In this mode you would use either Desktop or X360 controls, and all Steam games would use X360.
When running in this mode you would have to switch between Desktop and X360 mode with Options button
or with PowerControl.
Of course you will have access to all described shortcuts.
4.2. Mappings
| Button | Desktop | X360 (with Rumble) | Steam | Steam With Shortcuts |
|---|---|---|---|---|
| X360 Controller | Not connected | Connected | Not connected | Not connected |
| Options (hold for 1s) | Switch to next profile | Switch to next profile | Switch to next profile | Switch to next profile |
| Options (hold for 3s) | Toggle desktop mode | Toggle desktop mode | ||
| STEAM + 3 dots | CTRL + SHIFT + ESCAPE | CTRL + SHIFT + ESCAPE | CTRL + SHIFT + ESCAPE | CTRL + SHIFT + ESCAPE |
| STEAM + Menu | WIN + TAB | WIN + TAB | WIN + TAB | WIN + TAB |
| STEAM + Options | F11 | F11 | F11 | F11 |
| STEAM + A | RETURN | RETURN | RETURN | |
| STEAM + B (hold for 1s) | ALT + F4 | ALT + F4 | ALT + F4 | |
| STEAM + B (hold for 3s) | Kill active process | Kill active process | Kill active process | |
| STEAM + X | Toggle Keyboard | Toggle Keyboard | Toggle Keyboard | |
| STEAM + L1 | Toggle Magnify | Toggle Magnify | Toggle Magnify | |
| STEAM + R1 | Screenshot | Screenshot | Screenshot | |
| STEAM + Left Joystick Up | Increase Brightness | Increase Brightness | Increase Brightness | |
| STEAM + Left Joystick Down | Decrease Brightness | Decrease Brightness | Decrease Brightness | |
| STEAM + DPad Right | RETURN | RETURN | RETURN | |
| STEAM + DPad Down | TAB | TAB | TAB | |
| STEAM + DPad Left | ESCAPE | ESCAPE | ESCAPE | |
| STEAM + DPad Up | CTRL + ALT + U | CTRL + ALT + U | CTRL + ALT + U | |
| STEAM + Left Pad | Mouse Scroll | Mouse Scroll | Mouse Scroll | |
| STEAM + Left Joystick | Mouse Scroll | Mouse Scroll | Mouse Scroll | |
| STEAM + Right Joystick | Mouse Trackpad | Mouse Trackpad | Mouse Trackpad | |
| STEAM + Right Pad | Mouse Move | Mouse Move | Mouse Move | |
| STEAM + L2 | Mouse Right Click | Mouse Right Click | Mouse Right Click | |
| STEAM + R2 | Mouse Left Click | Mouse Left Click | Mouse Left Click | |
| STEAM + Left Pad Press | Mouse Right Click | Mouse Right Click | Mouse Right Click | |
| STEAM + Right Pad Press | Mouse Left Click | Mouse Left Click | Mouse Left Click | |
| Left Pad | Mouse Scroll | |||
| Left Joystick | Mouse Scroll | |||
| Right Joystick | Mouse Trackpad | |||
| Right Pad | Mouse Move | |||
| DPad Arrows | Keyboard Arrows | |||
| A | RETURN | |||
| B | BACKSPACE |
4.3. Configure Steam
If Steam is running in background it is essential to remove Desktop mode configuration
to make SteamController.exe the one mapping those.
4.3.1. Disable Desktop mode in Steam Gamepad UI (preferred)
- Run
steam.exewith-gamepadui. - Click
Steambutton, go toSettings>Controller. - Scroll down to find
Desktop Layout, clickEditandEdit Layout. - Go to
Action Sets>Add Action Set. - In
Add Action SettypeEmptyandContinue. - Now click on
Default,Remove SetandConfirm. - You can now exit with
B(Back).
4.3.2. Disable Desktop mode in Steam Desktop (slightly buggy on Steam Deck)
- Run Steam.
- Go to
Steam>Settings>Controller>Desktop Configuration. - Click
Add Action Set. - In new window type
Emptyand clickOK. - At top select
Default. - Now click
Menubutton (the button on top of left joystick with two squares) on Steam Deck (orManage Action Setbutton). - In a new window click
DELETE. - Now click
BorDONE.
4.4. Fullscreen Scaling Hotkey (Steam + Up Pad Press)
Many games in Windows will crash when attempting to start in fullscreen. To have a fullscreen experience on the Steam Deck, you can use this keybind in any fullscreen scaling application to provide a shortcut capable of toggling the scaling.
Example of Scaling software: https://store.steampowered.com/app/993090/Lossless_Scaling/
To configure the hotkey in Lossless Scaling:
- Launch Lossless Scaling
- Open "Settings"
- Select the "Scale hotkey"
- Press "STEAM + DPad Up"
- Verify that the hotkey was set to "CTRL + ALT + U"
- Close the settings dialog
5. Risks
This software is provided on best-effort basis and can break your SteamDeck. It does a direct manipulation of kernel memory to control usage the EC (Embedded Controller) and setting desired fan RPM via VLV0100
The Tools are written trying to check if you are truly using SteamDeck and compatible system. The applications try it's best to start only on validated configurations to avoid breaking your system.
It was build based on knowledge gained in Steam Deck kernel patch and DSDT presented by bios. The memory addresses used are hardcoded and can be changed any moment by the Bios update.
Fortunately quite amount of people are using it with a success and no problems observed. However, you should be aware of the consequences.
5.1. Risk of CPU and GPU frequency change
The APU manipulation of CPU and GPU frequency uses a ported implementation from Linux kernel. It is more unstable than Fan Control (since the Fan Control is controller managing EC on Windows). The change of the CPU and GPU frequency switch might sometimes crash system. The AMD Display Driver periodically requests GPU metrics and in some rare circumstances the change request might lock the GPU driver. If something like this happens it is advised to power shutdown the device. Disconnect from charging, and hold power button for a few seconds. Power device normally afterwards. This is rather unlikely to break the device if done right after when such event occurs.
6. Anti-Cheat and Antivirus software
Since this project uses direct manipulation of kernel memory via inpoutx64.dll
it might trigger Antivirus and Anti-Cheat software.
If you use at least version 0.5.x you can disable kernel drivers usage that should
avoid trippping Anti-Cheat detection. Set FAN to Default and disable OSD Kernel Drivers.
Of course you will miss some metrics due to that.
7. Development
It should be enough to run scripts/build.bat to see binaries in build-release/.
You might also run scripts/test_debug.bat which will build and run built version.
Author
Kamil Trzciński, 2022
License
Creative Commons Attribution-NonCommercial (CC-BY-NC).
Free for personal use. Contact me in other cases (ayufan@ayufan.eu).