testsAndMisc/scripts/utils/toggle_window_manager.sh

85 lines
2.6 KiB
Bash
Raw Normal View History

2025-10-13 10:21:35 +02:00
#!/bin/bash
set -euo pipefail
# Source common library for shared functions
SCRIPT_DIR="$(dirname "$(readlink -f "$0")")"
# shellcheck source=../lib/common.sh
source "$SCRIPT_DIR/../lib/common.sh"
2025-10-13 10:21:35 +02:00
# Configuration -----------------------------------------------------------------
TARGET_SESSION_NAME="Xfce Session"
TARGET_PACKAGES=(
xfwm4 # Compositing window manager with XFCE integration
xfce4-session # Provides the Xfce session entry for display managers
xfce4-panel # Panel with system tray support
xfce4-settings # Settings daemon (enables compositing toggle, theming, etc.)
xfce4-terminal # Handy default terminal for the new environment
2025-10-13 10:21:35 +02:00
)
# Utility functions --------------------------------------------------------------
info() { echo "[INFO] $*"; }
warn() { echo "[WARN] $*" >&2; }
2025-11-01 15:36:22 +01:00
error() {
echo "[ERROR] $*" >&2
exit 1
2025-10-13 10:21:35 +02:00
}
ensure_pacman() {
require_command pacman "pacman" || error "Required command 'pacman' not found."
if ! grep -qi "arch" /etc/os-release 2> /dev/null; then
warn "This script was designed for Arch Linux; continuing anyway."
fi
2025-10-13 10:21:35 +02:00
}
install_packages() {
install_missing_pacman_packages "${TARGET_PACKAGES[@]}"
2025-10-13 10:21:35 +02:00
}
print_post_install_tips() {
cat << EOF
2025-10-13 10:21:35 +02:00
------------------------------------------------------------------------
XFCE session installed.
• i3 remains your default window manager. We did not modify ~/.xinitrc,
display manager defaults, or systemd targets.
• At your next graphical login, pick "${TARGET_SESSION_NAME}" (or "Xfce"),
then log in to enjoy compositing via xfwm4.
• Once you are done testing Unity, simply log out and choose i3 again.
We'll log you out now so you can switch sessions safely.
------------------------------------------------------------------------
EOF
}
logout_user() {
local session_id="${XDG_SESSION_ID:-}"
if [[ -n $session_id ]] && loginctl show-session "$session_id" > /dev/null 2>&1; then
info "Terminating current session (ID: $session_id) via loginctl."
loginctl terminate-session "$session_id"
return
fi
if loginctl list-sessions 2> /dev/null | awk '{print $1" "$3}' | grep -q " $USER$"; then
info "Terminating all sessions for user '$USER' via loginctl."
loginctl terminate-user "$USER"
return
fi
warn "loginctl could not terminate the session; attempting fallback logout."
pkill -KILL -u "$USER" || error "Failed to terminate user sessions. Please log out manually."
2025-10-13 10:21:35 +02:00
}
main() {
ensure_pacman
install_packages
print_post_install_tips
2025-10-13 10:21:35 +02:00
# Give the user a moment to read the instructions before logging out.
logout_user
2025-10-13 10:21:35 +02:00
}
main "$@"