STEAM DECK · DESKTOP MODE

SteamDeck Toolbox

Forty-plus system, boot, network and gaming tools for the Steam Deck, wrapped in one GTK app. Install it with a single terminal command — the script handles the system dependencies, drops a desktop shortcut, and hands SteamOS back in read-only mode.

v1.9.5 Updated 22 Oct 2026 English Mulan PSL v2

What the installer takes care of

Four things that usually turn a Steam Deck install into an afternoon of reading forums — handled silently.

01

Finds vte3 for you

Missing terminal widget? The keyrings are repaired and vte3 is installed, no manual pacman work.

02

Restores read-only mode

SteamOS is unlocked only while it has to be. An exit trap re-locks it even when something fails.

03

Verifies the download

The payload is checked for the expected script markers, so an error page or a truncated file is rejected instead of run.

04

Adds a desktop shortcut

“Deck Toolbox.desktop” lands on your desktop. Click it and the GUI opens, no terminal involved.

Install

Switch the Deck to Desktop Mode, open Konsole, and pick one of the two routes.

One command

Recommended
curl -L YOUR-DOMAIN.pages.dev/i | sh

/i is a short link that always redirects to the newest install_gui.sh on GitHub, so this command never goes stale. On a real domain it reads like curl -L steamdeck-toolbox.pages.dev/i | sh — paste that into Konsole and press Enter.

Manual download

Grab the script below, then run it from the folder you saved it in with bash install.sh. It will ask for sudo — type your Deck password when prompted (nothing is stored).

install.sh Shell script · 4.2 KB · 109 lines
Download script

Inside the toolbox

Everything runs from one window with a searchable feature list, a live task log and dark or light appearance.

System tuning

Reclaim memory and clear out the clutter that slows a Deck down over months of use.

  • Virtual memory (CryoByte33)
  • Swap file
  • ZRAM
  • NTFS dirty-flag repair
  • Hosts cache cleanup
  • Steam cache manager
  • GE-Proton
  • Device calibration

Boot & dual-boot

Clover in a couple of clicks, plus the repairs that matter when an update eats your boot entry.

  • Clover boot manager
  • Boot configuration
  • Repair Boot
  • Repair Shared Drive
  • System Health Check

Network & remote

Accelerators for game downloads and a remote desktop for when a friend has to take over.

  • UU accelerator
  • Xunyou accelerator
  • Qiyou accelerator
  • Watt Toolkit
  • AnyDesk
  • ToDesk
  • AskLink

Everyday software

Install and uninstall the usual desktop apps without hunting for Flatpak IDs.

  • WPS Office
  • QQ
  • WeChat
  • QQ Music
  • Baidu Netdisk
  • Edge
  • Chrome
  • Fcitx 5

Decky plugins & gaming

Frame generation, lossless scaling and the plugin loaders they depend on.

  • Decky Loader
  • ToMoon
  • Freedeck
  • LSFG-VK
  • Framegen

Look, feel & updates

Dark, light or follow-system, remembered across reboots — and the app keeps itself current.

  • Dark / light / system
  • Startup update check
  • One-click upgrade
  • Searchable features
  • LCD & OLED

The installer, in full 109 lines · verbatim

Nothing hidden: this is the exact file the one-line command runs. Read it here, copy it, or download it and run it yourself.

install.sh 109 lines · 4.2 KB
Download
#!/bin/bash

TOOLBOX_URL="https://raw.githubusercontent.com/Zhucy123/steamdeck_toolbox/main/steamdeck_gui.py"
TOOLBOX_NAME="$HOME/steamdeck_gui.py"

# Automatically restore SteamOS read-only mode when the script exits (including on error),
# so that system updates are not affected.
cleanup() {
    if command -v steamos-readonly &>/dev/null; then
        if sudo -n steamos-readonly status 2>/dev/null | grep -q "disabled"; then
            if sudo -n steamos-readonly enable 2>/dev/null; then
                echo "✅ Read-only mode restored"
            else
                echo "⚠️ Please run manually: sudo steamos-readonly enable"
            fi
        fi
    fi
}
trap cleanup EXIT

echo "Checking system read-only status..."
sudo steamos-readonly disable 2>/dev/null || true

if pacman -Q vte3 &> /dev/null; then
    echo "✅ vte3 is already installed."
else
    echo "vte3 (terminal component) not found, attempting to install..."
    # Note: SteamOS uses both the archlinux and holo keyrings.
    # 889B5EBD... belongs to holo-keyring. When only archlinux is populated, that key
    # is not imported and the later --lsign-key necessarily reports "unable to sign
    # locally", so both keyrings must be populated.
    if [ ! -f /etc/pacman.d/gnupg/pubring.gpg ]; then
        echo "Initializing Pacman keys..."
        sudo pacman-key --init || {
            echo "❌ Failed to initialize the pacman keyring, cannot install vte3."
            exit 1
        }
    fi
    sudo chown -R root:root /etc/pacman.d/gnupg 2>/dev/null || true
    sudo chmod 700 /etc/pacman.d/gnupg 2>/dev/null || true
    echo "Populating official Arch and SteamOS Holo keys..."
    sudo pacman-key --populate archlinux || {
        echo "❌ Failed to populate the archlinux keyring."
        exit 1
    }
    if [ -f /usr/share/pacman/keyrings/holo.gpg ]; then
        sudo pacman-key --populate holo || {
            echo "❌ Failed to populate the holo keyring."
            exit 1
        }
    fi
    echo "Trusting the SteamOS packager key..."
    if ! sudo pacman-key --lsign-key 889B5EBDDD505A683621900DAF1D2199EF0A3CCF; then
        echo "⚠️ Key signing failed, refreshing keyrings and retrying..."
        sudo pacman-key --refresh-keys 2>/dev/null || true
        sudo pacman-key --populate archlinux holo 2>/dev/null || true
        sudo pacman-key --lsign-key 889B5EBDDD505A683621900DAF1D2199EF0A3CCF || {
            echo "❌ Key signing still failed, cannot install vte3."
            echo "   You can try manually: sudo pacman-key --init && sudo pacman-key --populate archlinux holo"
            exit 1
        }
    fi
    sudo pacman -Sy --noconfirm 2>/dev/null || true
    if sudo pacman -S --needed --noconfirm vte3; then
        echo "✅ vte3 installed successfully!"
    else
        echo "⚠️ vte3 installation failed. The GUI will use plain-text mode (features still work)."
    fi
fi

echo "Downloading the Steam Deck GUI toolbox from GitHub..."

if curl -L --progress-bar "$TOOLBOX_URL" -o "$TOOLBOX_NAME"; then
    # Validate the downloaded content to avoid an error page or an incomplete file
    if ! grep -q 'BASH_SCRIPT = ' "$TOOLBOX_NAME" || ! grep -q '^VERSION = ' "$TOOLBOX_NAME"; then
        echo "❌ Download validation failed (not a valid toolbox script). Please check your network and retry."
        rm -f "$TOOLBOX_NAME"
        exit 1
    fi
    chmod +x "$TOOLBOX_NAME"
    echo "Download complete!"
    echo "✅ Installation successful!"
    echo ""

    DESKTOP_FILE="$HOME/Desktop/Deck Toolbox.desktop"
    if [ -f "$DESKTOP_FILE" ]; then
        echo "Desktop shortcut already exists."
    else
        cat > "$DESKTOP_FILE" << EOF
[Desktop Entry]
Type=Application
Name=Deck Toolbox
Exec=$(command -v python3) "$TOOLBOX_NAME"
Icon=input-gamepad-symbolic
Terminal=false
StartupNotify=true
Categories=Utility;
EOF
        chmod +x "$DESKTOP_FILE"
        echo "✅ Desktop shortcut created: Deck Toolbox.desktop"
    fi

    echo "Click or double-click the 'Deck Toolbox' icon on the desktop to launch the program."
    echo ""
    exit 0
else
    echo "❌ Download failed. Please check your network and retry."
    exit 1
fi
Read-only preview · no syntax highlighting, so a copy is byte-identical install.sh · 109 lines

Questions

The short answers to what people ask before installing.

Do I need a keyboard or SSH?

No. Switch the Deck to Desktop Mode and open Konsole from the taskbar — the on-screen keyboard is enough to paste one command.

Why does it need sudo?

Two reasons only: toggling steamos-readonly and installing the vte3 package. Your password is never written anywhere; sudo asks for it, the system checks it, and the script moves on.

What if installing vte3 fails?

The installer says so and continues. The toolbox then runs in plain-text mode — every feature still works, only the embedded terminal window is unavailable.

Does it work on both LCD and OLED models?

Yes, and on eMMC or SSD variants. Device-specific paths are never hardcoded: the EFI system partition is located at runtime through findmnt and the EFI partition type GUID.

How do updates work?

On startup the toolbox reads VERSION from the official GitHub repository and offers a one-click self-update, so the app stays current without re-running the installer. Re-running it later is also safe: it just re-downloads the current script.

Does anything get uploaded?

The toolbox does not send telemetry or usage data anywhere; the only network calls it makes are downloads you ask for (GitHub, Flathub, app vendors) and its own update check against GitHub. The page you are reading makes no third-party requests at all — no CDN, no webfonts, no trackers.

Can I uninstall it?

Delete ~/steamdeck_gui.py and the Deck Toolbox.desktop shortcut. Things you installed through the toolbox — Clover, Decky plugins, GE-Proton, Flatpak apps — each have their own uninstall entry inside it, so remove those first if you want the system left clean.

Copied