mirror of
https://github.com/kuhyx/testsAndMisc.git
synced 2026-07-04 21:23:16 +02:00
git-subtree-dir: linux_configuration git-subtree-mainline:11427631cdgit-subtree-split:0762e3d07b
85 lines
2.6 KiB
Bash
Executable File
85 lines
2.6 KiB
Bash
Executable File
#!/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"
|
|
|
|
# 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
|
|
)
|
|
|
|
# Utility functions --------------------------------------------------------------
|
|
info() { echo "[INFO] $*"; }
|
|
warn() { echo "[WARN] $*" >&2; }
|
|
error() {
|
|
echo "[ERROR] $*" >&2
|
|
exit 1
|
|
}
|
|
|
|
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
|
|
}
|
|
|
|
install_packages() {
|
|
install_missing_pacman_packages "${TARGET_PACKAGES[@]}"
|
|
}
|
|
|
|
print_post_install_tips() {
|
|
cat << EOF
|
|
|
|
------------------------------------------------------------------------
|
|
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."
|
|
}
|
|
|
|
main() {
|
|
ensure_pacman
|
|
install_packages
|
|
print_post_install_tips
|
|
|
|
# Give the user a moment to read the instructions before logging out.
|
|
logout_user
|
|
}
|
|
|
|
main "$@"
|