add steam keyboard to desktop

This commit is contained in:
theupriser committed 2026-09-06 21:51:04 +02:00
1 parent e1aee45421
commit 151a3bf7a6
1 file changed
+60 -48
+60 -48
View File
@@ -21,6 +21,10 @@
# #
# Safe to re-run: it is idempotent and backs up files before editing. # Safe to re-run: it is idempotent and backs up files before editing.
# #
# Automatically configures a permanent background systemd autostart for Steam
# and Wayland overrides so the Steam Controller virtual keyboard (Steam+X)
# always works in desktop mode.
#
# Optionally also offers to install the official Valve "Vapor" KDE Plasma # Optionally also offers to install the official Valve "Vapor" KDE Plasma
# theme (colors, icons, wallpapers, Plasma look-and-feel package) used on # theme (colors, icons, wallpapers, Plasma look-and-feel package) used on
# real SteamOS, pulled directly from Valve's own package mirror, so the # real SteamOS, pulled directly from Valve's own package mirror, so the
@@ -82,7 +86,7 @@ create_desktop_shortcut() {
# 1. Safely copy the icon to the user's permanent theme directory # 1. Safely copy the icon to the user's permanent theme directory
local script_dir local script_dir
script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" script_dir="$(cd "$(dirname "${BASH_SOURCE}")" && pwd)"
if [[ -f "$script_dir/icons/steamdeck-gaming-return.svg" ]]; then if [[ -f "$script_dir/icons/steamdeck-gaming-return.svg" ]]; then
info "Copying icon asset to permanent system theme path..." info "Copying icon asset to permanent system theme path..."
@@ -147,12 +151,7 @@ install_vapor_theme() {
fi fi
info "Creating local configuration directories..." info "Creating local configuration directories..."
mkdir -p ~/.local/share/color-schemes \ mkdir -p ~/.local/share/color-schemes ~/.local/share/plasma/desktoptheme ~/.local/share/plasma/look-and-feel ~/.local/share/wallpapers ~/.local/share/icons/hicolor/scalable/apps ~/.local/share/icons/hicolor/48x48/apps
~/.local/share/plasma/desktoptheme \
~/.local/share/plasma/look-and-feel \
~/.local/share/wallpapers \
~/.local/share/icons/hicolor/scalable/apps \
~/.local/share/icons/hicolor/48x48/apps
info "Installing Steam Deck theme assets..." info "Installing Steam Deck theme assets..."
[[ -d "${tmp_dir}/usr/share/color-schemes" ]] && cp -r "${tmp_dir}/usr/share/color-schemes/"* ~/.local/share/color-schemes/ [[ -d "${tmp_dir}/usr/share/color-schemes" ]] && cp -r "${tmp_dir}/usr/share/color-schemes/"* ~/.local/share/color-schemes/
@@ -165,8 +164,6 @@ install_vapor_theme() {
info "Copying local Steam Deck logo assets from ./icons into structured icon paths..." info "Copying local Steam Deck logo assets from ./icons into structured icon paths..."
cp -r ./icons/* ~/.local/share/icons/hicolor/scalable/apps/ 2>/dev/null || true cp -r ./icons/* ~/.local/share/icons/hicolor/scalable/apps/ 2>/dev/null || true
cp -r ./icons/* ~/.local/share/icons/hicolor/48x48/apps/ 2>/dev/null || true cp -r ./icons/* ~/.local/share/icons/hicolor/48x48/apps/ 2>/dev/null || true
else
warn "No local './icons' folder found next to the script - skipping custom logo copy (optional, not required for the theme itself)."
fi fi
local metadata_dir="$HOME/.local/share/plasma/look-and-feel/com.valve.vapor.desktop" local metadata_dir="$HOME/.local/share/plasma/look-and-feel/com.valve.vapor.desktop"
@@ -268,24 +265,6 @@ install_vapor_theme() {
warn "Could not find extracted Vapor wallpaper file. Skipping." warn "Could not find extracted Vapor wallpaper file. Skipping."
fi fi
# ---------- Integrated: Force Steam Deck / Controller Glyphs ----------
info "Configuring Gamescope Steam environment to force Steam Deck glyphs (-steamos3)..."
# Gamescope-session launches steam via environment variables or wrappers.
# We append or force these parameters inside the local user session config directory.
local steam_env_dir="$HOME/.config/environment.d"
mkdir -p "$steam_env_dir"
# We set the STEAM_GAMEPADUI_ARGS so the backend compositor session picks it up.
echo "STEAM_GAMEPADUI_ARGS=\"-gamepadui -steamos3\"" > "$steam_env_dir/99-gamescope-steam-glyphs.conf"
# Also create/update the traditional gamescope-session environment file if used by CachyOS
if [[ -d "$HOME/.config/gamescope-session" ]]; then
echo "STEAM_GAMEPADUI_ARGS=\"-gamepadui -steamos3\"" >> "$HOME/.config/gamescope-session/environment"
fi
ok "Steam UI parameters configured successfully."
# ------------------------------------------------------
info "Refreshing Plasma environment and icon caches..." info "Refreshing Plasma environment and icon caches..."
gtk-update-icon-cache -f -t ~/.local/share/icons/hicolor 2>/dev/null || true gtk-update-icon-cache -f -t ~/.local/share/icons/hicolor 2>/dev/null || true
kbuildsycoca6 --noincremental 2>/dev/null || true kbuildsycoca6 --noincremental 2>/dev/null || true
@@ -294,11 +273,11 @@ install_vapor_theme() {
ok "Vapor theme assets installed. Apply it under System Settings > Appearance" ok "Vapor theme assets installed. Apply it under System Settings > Appearance"
ok "> Global Theme > Vapor (Steam Deck), next time you're in a Plasma session." ok "> Global Theme > Vapor (Steam Deck), next time you're in a Plasma session."
ok "The Application Launcher icon, desktop wallpaper, and Gamescope Steam controller glyphs have been configured."
} }
# ---------- start ---------- # ---------- start ----------
require_root_helper require_root_helper
@@ -338,11 +317,11 @@ if [[ "$DM" != "plasmalogin" ]]; then
fi fi
echo echo
# ---------- 2. Install packages ---------- # ---------- 2. Install packages (Always Runs) ----------
info "Checking required packages: gamescope-session-cachyos, steam, mangohud" info "Checking required packages: gamescope-session-cachyos, steam, mangohud, xterm, ttf-liberation, wqy-zenhei, plasma-keyboard"
MISSING=() MISSING=()
for pkg in gamescope-session-cachyos steam mangohud; do for pkg in gamescope-session-cachyos steam mangohud xterm ttf-liberation wqy-zenhei plasma-keyboard; do
pacman -Qi "$pkg" >/dev/null 2>&1 || MISSING+=("$pkg") pacman -Qi "$pkg" >/dev/null 2>&1 || MISSING+=("$pkg")
done done
@@ -367,11 +346,6 @@ ok "Directory present."
echo echo
# ---------- 4. Fix the base /etc/plasmalogin.conf ---------- # ---------- 4. Fix the base /etc/plasmalogin.conf ----------
#
# steam-set-session only ever writes to /etc/plasmalogin.conf.d/*.conf,
# but the base /etc/plasmalogin.conf takes priority and, as shipped by
# CachyOS, hardcodes Session=plasma with no User= and no Relogin=. We
# rewrite the [Autologin] block cleanly here.
BASE_CONF="/etc/plasmalogin.conf" BASE_CONF="/etc/plasmalogin.conf"
info "Configuring $BASE_CONF (Session=gamescope-session.desktop, User=$TARGET_USER, Relogin=true)" info "Configuring $BASE_CONF (Session=gamescope-session.desktop, User=$TARGET_USER, Relogin=true)"
@@ -379,9 +353,6 @@ backup_file "$BASE_CONF"
sudo touch "$BASE_CONF" sudo touch "$BASE_CONF"
# Strip any existing [Autologin] section (from the first [Autologin] line
# to the next section header or EOF), then append a clean one. This is
# safer than a series of seds for an unknown starting state.
sudo awk ' sudo awk '
BEGIN { in_autologin=0 } BEGIN { in_autologin=0 }
/^\[Autologin\]/ { in_autologin=1; next } /^\[Autologin\]/ { in_autologin=1; next }
@@ -410,21 +381,12 @@ ok "Cleaned."
echo echo
# ---------- 6. Install the sync bridge: conf.d -> base config ---------- # ---------- 6. Install the sync bridge: conf.d -> base config ----------
#
# CachyOS's own tools (steamos-session-select, Steam's "Switch to
# Desktop", and cachyos-gamescope-autologin.service) only ever write the
# session choice to /etc/plasmalogin.conf.d/zz-steamos-autologin.conf.
# Since the base config wins, we need a watcher that copies that value
# into the base file whenever it changes.
SYNC_SCRIPT="/usr/local/bin/sync-steamos-session.sh" SYNC_SCRIPT="/usr/local/bin/sync-steamos-session.sh"
info "Installing session sync bridge at $SYNC_SCRIPT" info "Installing session sync bridge at $SYNC_SCRIPT"
sudo tee "$SYNC_SCRIPT" > /dev/null << 'EOF' sudo tee "$SYNC_SCRIPT" > /dev/null << 'EOF'
#!/bin/bash #!/bin/bash
# Copies the Session= value CachyOS's steamos tools write into
# /etc/plasmalogin.conf.d/zz-steamos-autologin.conf back into the base
# /etc/plasmalogin.conf, which plasma-login-manager actually obeys.
SRC="/etc/plasmalogin.conf.d/zz-steamos-autologin.conf" SRC="/etc/plasmalogin.conf.d/zz-steamos-autologin.conf"
DEST="/etc/plasmalogin.conf" DEST="/etc/plasmalogin.conf"
@@ -480,6 +442,54 @@ ok "Done. Current base config:"
sudo cat "$BASE_CONF" sudo cat "$BASE_CONF"
echo echo
# ---------- 8b. Core SteamOS Keyboard & Glyphs Fix (Always runs) ----------
info "Applying non-optional SteamOS environment & keyboard fixes..."
steam_env_dir="$HOME/.config/environment.d"
mkdir -p "$steam_env_dir"
# 1. Force Gamescope Steam to boot into Deck mode and load Deck glyphs
echo "STEAM_GAMEPADUI_ARGS=\"-gamepadui -steamos3\"" > "$steam_env_dir/99-gamescope-steam-glyphs.conf"
if [[ -d "$HOME/.config/gamescope-session" ]]; then
echo "STEAM_GAMEPADUI_ARGS=\"-gamepadui -steamos3\"" >> "$HOME/.config/gamescope-session/environment"
fi
# 2. Prevent KDE Wayland from blocking the virtual keyboard overlay
echo "KWIN_IM_SHOW_ALWAYS=1" > "$steam_env_dir/99-kde-virtual-keyboard.conf"
# 3. Setup robust background systemd service for Steam autostart on Desktop Mode
systemd_user_dir="$HOME/.config/systemd/user"
mkdir -p "$systemd_user_dir"
cat << 'EOF' > "$systemd_user_dir/steam-desktop-autostart.service"
[Unit]
Description=Steam Background Autostart for Virtual Keyboard
After=graphical-session.target
PartOf=graphical-session.target
[Service]
Type=simple
ExecStart=/usr/bin/steam -silent
Restart=on-failure
RestartSec=5
[Install]
WantedBy=graphical-session.target
EOF
# Clean out old .desktop shortcut so they don't fight
rm -f "$HOME/.config/autostart/steam.desktop"
# Reload user systemd context and activate the background loop
systemctl --user daemon-reload
systemctl --user enable steam-desktop-autostart.service
systemctl --user start steam-desktop-autostart.service
ok "Steam UI parameters and keyboard autostart deployed successfully."
echo
# ---------- 9. Optional: Vapor (Steam Deck) KDE theme ---------- # ---------- 9. Optional: Vapor (Steam Deck) KDE theme ----------
echo echo
@@ -513,6 +523,8 @@ echo " - Set $BASE_CONF to autologin '$TARGET_USER' into gamescope, with Relogi
echo " - Installed a sync bridge + systemd watcher so Steam's Switch-to-Desktop" echo " - Installed a sync bridge + systemd watcher so Steam's Switch-to-Desktop"
echo " (and cachyos-gamescope-autologin.service resetting back to gamescope" echo " (and cachyos-gamescope-autologin.service resetting back to gamescope"
echo " on logout) both actually take effect" echo " on logout) both actually take effect"
echo " - Configured permanent silent Steam autostart so Steam+X works everywhere"
echo " - Injected -steamos3 flag to force original Steam Deck overlay glyphs"
echo " - Optionally installed Valve's Vapor (Steam Deck) KDE theme, if you chose to" echo " - Optionally installed Valve's Vapor (Steam Deck) KDE theme, if you chose to"
echo echo
echo "Backups of any files this script modified were saved with a" echo "Backups of any files this script modified were saved with a"