feat: the silent option is Steam's own autostart entry (~/.config/autostart/steam.desktop with -silent), so its "Run Steam when my computer starts" follows it; the systemd unit is gone

This commit is contained in:
theupriser committed 2026-10-02 09:28:03 +02:00
1 parent 47229e1ab7
commit 71bd3b4573
6 files changed
+39 -42

No files matched your search

+1 -1
View File
@@ -7,7 +7,7 @@ one per merged pull request.
## 2.11.0 - 2026-10-01 ## 2.11.0 - 2026-10-01
- `5da1833` **feat: "Start Steam silently" sub-option: under the SteamOS conversion (`silent`, on by default, as before) and under Gaming on NVIDIA (`nvsilent`, opt-in, not together with Big Picture); the SteamOS one is called "Start Steam silently in desktop mode" and is always shown, also on a Steam Machine** - `5da1833` **feat: "Start Steam silently" sub-option: under the SteamOS conversion (`silent`, on by default, as before) and under Gaming on NVIDIA (`nvsilent`, opt-in, not together with Big Picture); the SteamOS one is called "Start Steam silently in desktop mode" and is always shown, also on a Steam Machine; it is Steam's own autostart entry (`~/.config/autostart/steam.desktop`), so Steam's setting "Run Steam when my computer starts" follows it**
## 2.10.0 - 2026-10-01 ## 2.10.0 - 2026-10-01
+7 -5
View File
@@ -109,8 +109,10 @@ tools write to the conf.d fragment into the base config.
installs `/usr/local/bin/sync-steamos-session.sh` plus installs `/usr/local/bin/sync-steamos-session.sh` plus
`sync-steamos-session.path`/`.service`; `sync-steamos-session.path`/`.service`;
- `KWIN_IM_SHOW_ALWAYS=1` for the virtual keyboard; the sub-option `silent` - `KWIN_IM_SHOW_ALWAYS=1` for the virtual keyboard; the sub-option `silent`
("Start Steam silently in desktop mode", on by default, always shown) adds a `steam-desktop-autostart` ("Start Steam silently in desktop mode", on by default, always shown) writes
systemd user service that starts Steam silently in Plasma only; `~/.config/autostart/steam.desktop` (the system steam.desktop with `-silent` in its Exec line). That is the
file Steam's own setting "Run Steam when my computer starts" creates and removes, so the setting shows it. An older
`steam-desktop-autostart` user unit is removed;
- the **Return to Gaming Mode** shortcut; on plasma-login-manager with a - the **Return to Gaming Mode** shortcut; on plasma-login-manager with a
narrow sudoers rule (`/etc/sudoers.d/gamescope-session-switch`) so it can narrow sudoers rule (`/etc/sudoers.d/gamescope-session-switch`) so it can
restart the login manager without a password prompt. restart the login manager without a password prompt.
@@ -344,8 +346,7 @@ desktop through its desktop layout (A = Enter, B = Esc, Y = Space, X =
Steam's keyboard), in gaming mode as a gamepad. Steam's keyboard), in gaming mode as a gamepad.
Steam reads the list only at startup and writes it back on exit, so Steam is Steam reads the list only at startup and writes it back on exit, so Steam is
closed (`steam -shutdown`) for the edit and started again (through closed (`steam -shutdown`) for the edit and started again (`steam -silent`). That's refused in gaming
`steam-desktop-autostart.service` when it's there). That's refused in gaming
mode and when Steamify itself was started from Steam (`SteamGameId`), since mode and when Steamify itself was started from Steam (`SteamGameId`), since
closing Steam would end it. An entry for the start script that's already closing Steam would end it. An entry for the start script that's already
there (added by hand, or with the path from before 2.5.0) is updated, not there (added by hand, or with the path from before 2.5.0) is updated, not
@@ -490,7 +491,8 @@ In the home folder, everything is under `steamify`:
| `~/.local/share/steamify/bin/` | The shortcut's start scripts (`run-app`, `run-wizard`) and `steamify-notifier` | | `~/.local/share/steamify/bin/` | The shortcut's start scripts (`run-app`, `run-wizard`) and `steamify-notifier` |
| `~/.local/share/icons/hicolor/scalable/apps/steamify.svg` | The shortcut's icon | | `~/.local/share/icons/hicolor/scalable/apps/steamify.svg` | The shortcut's icon |
| `~/.local/share/applications/steamify-*.desktop` | The launcher entries | | `~/.local/share/applications/steamify-*.desktop` | The launcher entries |
| `~/.config/systemd/user/` | `steamify-update-check.*`, `steam-desktop-autostart.service` | | `~/.config/autostart/steam.desktop` | the `silent` option (Steam's "Run Steam when my computer starts") |
| `~/.config/systemd/user/` | `steamify-update-check.*` |
System-wide: `/usr/local/lib/steamify/` (kernel headers script), System-wide: `/usr/local/lib/steamify/` (kernel headers script),
`/usr/src/steamify-*` (DKMS modules), `/var/cache/steamify/kernel` (the old `/usr/src/steamify-*` (DKMS modules), `/var/cache/steamify/kernel` (the old
+29 -14
View File
@@ -16,34 +16,49 @@ steam_enable() {
} }
# Sub-option of the SteamOS conversion: Steam starts silently (in the tray, # Sub-option of the SteamOS conversion: Steam starts silently (in the tray,
# no window) on the Plasma desktop. # no window) on the Plasma desktop. It is Steam's own autostart entry, the file
# Steam's setting "Run Steam when my computer starts" creates and removes, so
# that setting shows what Steamify did (and the other way around). Steam's copy
# is the system steam.desktop; ours has -silent in its Exec line.
STEAM_AUTOSTART="${XDG_CONFIG_HOME:-$HOME/.config}/autostart/steam.desktop"
STEAM_SYSTEM_DESKTOP=/usr/share/applications/steam.desktop
silent_status() { silent_status() {
[[ -f "$HOME/.config/systemd/user/steam-desktop-autostart.service" ]] grep -qs '^Exec=.*-silent' "$STEAM_AUTOSTART"
}
silent_old_unit_remove() {
# Before 2.11.0 the option was a systemd user unit: it would start Steam a second time.
local unit="$HOME/.config/systemd/user/steam-desktop-autostart.service"
[[ -f "$unit" ]] || return 0
user_systemctl disable --now steam-desktop-autostart.service 2>/dev/null
rm -f "$unit"
user_systemctl daemon-reload
} }
silent_enable() { silent_enable() {
local systemd_user_dir="$HOME/.config/systemd/user" silent_old_unit_remove
mkdir -p "$systemd_user_dir" mkdir -p "$(dirname "$STEAM_AUTOSTART")"
service_file steam-desktop-autostart.service > "$systemd_user_dir/steam-desktop-autostart.service" if [[ -f "$STEAM_SYSTEM_DESKTOP" ]]; then
# Clean out old .desktop shortcut so they don't fight sed 's|^Exec=/usr/bin/steam %U$|Exec=/usr/bin/steam -silent %U|' "$STEAM_SYSTEM_DESKTOP" > "$STEAM_AUTOSTART"
rm -f "$HOME/.config/autostart/steam.desktop" fi
user_systemctl daemon-reload silent_status || printf '%s\n' '[Desktop Entry]' 'Name=Steam' 'Exec=/usr/bin/steam -silent %U' \
user_systemctl enable --now steam-desktop-autostart.service 'Icon=steam' 'Terminal=false' 'Type=Application' 'Categories=Network;FileTransfer;Game;' > "$STEAM_AUTOSTART"
ok "Steam starts silently on the desktop." ok "Steam starts silently on the desktop from the next login."
} }
silent_disable() { silent_disable() {
user_systemctl disable --now steam-desktop-autostart.service 2>/dev/null silent_old_unit_remove
rm -f "$HOME/.config/systemd/user/steam-desktop-autostart.service" silent_status && rm -f "$STEAM_AUTOSTART"
user_systemctl daemon-reload
ok "Steam no longer starts by itself on the desktop." ok "Steam no longer starts by itself on the desktop."
} }
steam_disable() { steam_disable() {
info "Removing Steam desktop settings..." info "Removing Steam desktop settings..."
# The autostart unit is the `silent` option's: removed with it, and here # The autostart entry is the `silent` option's: removed with it, and here
# too for when the conversion goes off by itself. # too for when the conversion goes off by itself.
silent_status && silent_disable silent_status && silent_disable
silent_old_unit_remove
rm -f "$HOME/.config/environment.d/99-kde-virtual-keyboard.conf" rm -f "$HOME/.config/environment.d/99-kde-virtual-keyboard.conf"
ok "Steam desktop settings removed (takes full effect at next login)." ok "Steam desktop settings removed (takes full effect at next login)."
} }
+2 -6
View File
@@ -56,7 +56,7 @@ steamgame_steam_busy() {
steamgame_edit() { steamgame_edit() {
# steamgame_edit <function>: runs it with Steam closed, then starts Steam # steamgame_edit <function>: runs it with Steam closed, then starts Steam
# again if it was running (through our autostart unit when that's there). # again if it was running (silently, in the tray).
local was_running=false i local was_running=false i
if pgrep -x steam >/dev/null; then if pgrep -x steam >/dev/null; then
steamgame_steam_busy && return 1 steamgame_steam_busy && return 1
@@ -72,11 +72,7 @@ steamgame_edit() {
fi fi
"$1"; local rc=$? "$1"; local rc=$?
if [[ "$was_running" == true ]]; then if [[ "$was_running" == true ]]; then
if user_systemctl is-enabled -q steam-desktop-autostart.service 2>/dev/null; then systemd-run --user --collect -q steam -silent >/dev/null 2>&1
user_systemctl start steam-desktop-autostart.service
else
systemd-run --user --collect -q steam -silent >/dev/null 2>&1
fi
info "Steam is starting again." info "Steam is starting again."
fi fi
return "$rc" return "$rc"
-1
View File
@@ -12,6 +12,5 @@ in the shell code.
| `steamify-boot-desktop.service` | `lib/boot-session.sh` (Boot into: desktop) | Sets the Plasma session before the login manager starts | | `steamify-boot-desktop.service` | `lib/boot-session.sh` (Boot into: desktop) | Sets the Plasma session before the login manager starts |
| `sync-steamos-session.path`, `.service` | `lib/login-manager.sh` (SteamOS conversion, plasma-login-manager) | The sync bridge: copies Steam's session choice into `plasmalogin.conf` | | `sync-steamos-session.path`, `.service` | `lib/login-manager.sh` (SteamOS conversion, plasma-login-manager) | The sync bridge: copies Steam's session choice into `plasmalogin.conf` |
| `steamify-steam-autostart.service` | `lib/nvidia.sh` (Gaming on NVIDIA) | Steam at login on the Plasma desktop, normal or in Big Picture (user unit) | | `steamify-steam-autostart.service` | `lib/nvidia.sh` (Gaming on NVIDIA) | Steam at login on the Plasma desktop, normal or in Big Picture (user unit) |
| `steam-desktop-autostart.service` | `lib/steam-desktop.sh` (SteamOS conversion) | Steam in the background on the Plasma desktop (user unit) |
| `ensure-kernel-headers.service` | `lib/steam-machine.sh` (Steam Machine support) | Installs missing kernel headers at boot, so DKMS builds for every kernel | | `ensure-kernel-headers.service` | `lib/steam-machine.sh` (Steam Machine support) | Installs missing kernel headers at boot, so DKMS builds for every kernel |
| `steamify-update-check.service`, `.timer` | `lib/update-notifier.sh` (Update notifications) | The daily and login check for a new release (user units) | | `steamify-update-check.service`, `.timer` | `lib/update-notifier.sh` (Update notifications) | The daily and login check for a new release (user units) |
-15
View File
@@ -1,15 +0,0 @@
[Unit]
Description=Steam Background Autostart for Virtual Keyboard
After=graphical-session.target
PartOf=graphical-session.target
[Service]
Type=simple
# Only in the Plasma desktop session; gamescope-session starts its own Steam.
ExecCondition=/bin/sh -c '[ "$XDG_CURRENT_DESKTOP" = KDE ]'
ExecStart=/usr/bin/steam -silent
Restart=on-failure
RestartSec=5
[Install]
WantedBy=graphical-session.target