mirror of
https://github.com/theupriser/steamify-cachyos.git
synced 2026-10-03 17:41:58 +02:00
feat: single user mode on NVIDIA PCs: SDDM autologin into the Plasma session, without the conversion
This commit is contained in:
1 parent
948dc1f587
commit
3eb22502ec
8 files changed
+88
-18
No files matched your search
+7
-2
@@ -146,8 +146,13 @@ backend_apply() {
|
||||
for id in "${want[@]}"; do [[ "$id" == "$c" ]] && WANTED[$c]=1; done
|
||||
done
|
||||
# The same rules as the menu's toggles.
|
||||
[[ "${WANTED[single]:-0}" == 1 ]] && WANTED[gaming]=1
|
||||
[[ "${WANTED[gaming]:-0}" == 0 ]] && { WANTED[single]=0; WANTED[boot]=0; }
|
||||
# (Single user mode only needs the conversion where it is offered: not on NVIDIA PCs.)
|
||||
[[ "${WANTED[single]:-0}" == 1 ]] && component_available gaming && WANTED[gaming]=1
|
||||
if component_available gaming; then
|
||||
[[ "${WANTED[gaming]:-0}" == 0 ]] && { WANTED[single]=0; WANTED[boot]=0; }
|
||||
else
|
||||
WANTED[boot]=0
|
||||
fi
|
||||
[[ "${WANTED[bigpicture]:-0}" == 1 ]] && WANTED[nvidia]=1
|
||||
[[ "${WANTED[nvidia]:-0}" == 0 ]] && WANTED[bigpicture]=0
|
||||
[[ "${WANTED[poweroff]:-0}" == 1 ]] && WANTED[machine]=1
|
||||
|
||||
+15
-10
@@ -167,6 +167,20 @@ switch_to_sddm() {
|
||||
ok "SDDM is the login manager from the next boot on."
|
||||
}
|
||||
|
||||
remove_sddm_base_autologin() {
|
||||
# /etc/sddm.conf is read last: an [Autologin] there would override our fragments.
|
||||
if [[ -f /etc/sddm.conf ]] && grep -q '^\[Autologin\]' /etc/sddm.conf; then
|
||||
backup_file /etc/sddm.conf
|
||||
sudo awk '
|
||||
/^\[Autologin\]/ { skip=1; next }
|
||||
/^\[/ { skip=0 }
|
||||
!skip { print }
|
||||
' /etc/sddm.conf | sudo tee /etc/sddm.conf.tmp > /dev/null &&
|
||||
sudo mv /etc/sddm.conf.tmp /etc/sddm.conf
|
||||
info "Removed [Autologin] from /etc/sddm.conf (backup kept)."
|
||||
fi
|
||||
}
|
||||
|
||||
configure_sddm_autologin() {
|
||||
# User= and Relogin= live in our own fragment; steam-set-session keeps
|
||||
# Session= up to date in zz-steamos-autologin.conf, which sorts later
|
||||
@@ -182,16 +196,7 @@ Session=gamescope-session.desktop
|
||||
Relogin=true
|
||||
EOF
|
||||
|
||||
if [[ -f /etc/sddm.conf ]] && grep -q '^\[Autologin\]' /etc/sddm.conf; then
|
||||
backup_file /etc/sddm.conf
|
||||
sudo awk '
|
||||
/^\[Autologin\]/ { skip=1; next }
|
||||
/^\[/ { skip=0 }
|
||||
!skip { print }
|
||||
' /etc/sddm.conf | sudo tee /etc/sddm.conf.tmp > /dev/null &&
|
||||
sudo mv /etc/sddm.conf.tmp /etc/sddm.conf
|
||||
info "Removed [Autologin] from /etc/sddm.conf (backup kept)."
|
||||
fi
|
||||
remove_sddm_base_autologin
|
||||
|
||||
# Start in gamescope, through CachyOS's own tool so its file is current.
|
||||
sudo /usr/lib/steamos/steam-set-session gamescope-session.desktop
|
||||
|
||||
+4
-3
@@ -55,7 +55,7 @@ component_available() {
|
||||
case "$1" in
|
||||
# gamescope's own session is broken on NVIDIA: the conversion is replaced by "Gaming on NVIDIA" there (shown
|
||||
# anyway when it's already on, so it can be turned off).
|
||||
gaming|boot|single|glyphs) ! nvidia_present || gaming_status ;;
|
||||
gaming|boot|glyphs) ! nvidia_present || gaming_status ;;
|
||||
nvidia) nvidia_available ;;
|
||||
bigpicture) bigpicture_available ;;
|
||||
machine|poweroff) machine_available ;;
|
||||
@@ -230,7 +230,7 @@ defaults_options() {
|
||||
warn "Leaving out ${LABEL[$c]%%:*}: not available on this PC."
|
||||
fi
|
||||
done
|
||||
[[ "${WANTED[single]}" == 1 ]] && WANTED[gaming]=1
|
||||
[[ "${WANTED[single]}" == 1 ]] && component_available gaming && WANTED[gaming]=1
|
||||
for c in "${COMPONENTS[@]}"; do
|
||||
[[ "${WANTED[$c]}" == 1 && -n "${PARENT[$c]:-}" ]] && WANTED[${PARENT[$c]}]=1
|
||||
done
|
||||
@@ -274,7 +274,8 @@ toggle_component() {
|
||||
component_selectable "$c" || return 1
|
||||
WANTED[$c]=$(( 1 - WANTED[$c] ))
|
||||
# Single user mode only makes sense on top of the SteamOS conversion.
|
||||
if [[ "$c" == single && "${WANTED[single]}" == 1 ]]; then WANTED[gaming]=1; fi
|
||||
# (On NVIDIA the conversion isn't offered: single user mode logs in by itself, see lib/single-user.sh.)
|
||||
if [[ "$c" == single && "${WANTED[single]}" == 1 ]] && component_available gaming; then WANTED[gaming]=1; fi
|
||||
if [[ "$c" == gaming && "${WANTED[gaming]}" == 0 ]]; then WANTED[single]=0; WANTED[boot]=0; fi
|
||||
# Where to boot to is part of the conversion, too.
|
||||
if [[ "$c" == boot && "${WANTED[boot]}" == 1 ]]; then WANTED[gaming]=1; fi
|
||||
|
||||
@@ -119,7 +119,36 @@ single_launcher_drop() {
|
||||
return 0
|
||||
}
|
||||
|
||||
# Without the SteamOS conversion (NVIDIA PCs: gamescope's session is broken there) nothing logs in by itself, so single user
|
||||
# mode does it: SDDM, autologin into the Plasma session. Named to sort after steam-set-session's zz-steamos-autologin.conf,
|
||||
# which may still say gamescope from an earlier conversion.
|
||||
SINGLE_AUTOLOGIN=${SINGLE_AUTOLOGIN:-/etc/sddm.conf.d/zzz-steamify-autologin.conf}
|
||||
|
||||
single_login_needed() { nvidia_present && ! gaming_status; }
|
||||
|
||||
single_login_enable() {
|
||||
single_login_needed || return 0
|
||||
switch_to_sddm || return 1
|
||||
info "Logging in to the desktop by itself (SDDM autologin for $TARGET_USER)..."
|
||||
sudo mkdir -p "$(dirname "$SINGLE_AUTOLOGIN")"
|
||||
sudo tee "$SINGLE_AUTOLOGIN" > /dev/null << EOF
|
||||
[Autologin]
|
||||
User=$TARGET_USER
|
||||
Session=plasma.desktop
|
||||
Relogin=true
|
||||
EOF
|
||||
remove_sddm_base_autologin
|
||||
}
|
||||
|
||||
single_login_disable() {
|
||||
[[ -f "$SINGLE_AUTOLOGIN" ]] || return 0
|
||||
sudo rm -f "$SINGLE_AUTOLOGIN"
|
||||
# The way back is CachyOS's own login manager, unless the conversion is on (it keeps SDDM).
|
||||
gaming_status || switch_to_plasmalogin
|
||||
}
|
||||
|
||||
single_enable() {
|
||||
single_login_enable || return 1
|
||||
info "Turning off the lock screen, user switching and logging out..."
|
||||
stop_plasmashell_for_edit
|
||||
|
||||
@@ -145,6 +174,7 @@ single_enable() {
|
||||
}
|
||||
|
||||
single_disable() {
|
||||
single_login_disable
|
||||
info "Restoring the lock screen, user switching and logging out..."
|
||||
stop_plasmashell_for_edit
|
||||
if has_journal single; then
|
||||
|
||||
Reference in new issue
Block a user