This commit is contained in:
2026-02-11 22:03:06 +00:00
parent 3030d51fd1
commit 547fb2c462
9 changed files with 2038 additions and 0 deletions
+189
View File
@@ -0,0 +1,189 @@
#!/bin/bash
# =============================================
# Graphical Environment Manager Script
# Disables/enables graphical environment to save RAM
# Must be run with sudo!
#
# Usage:
# ./gui_manager.sh [enable|disable|status]
# GUI_ACTION=enable|disable ./gui_manager.sh
# =============================================
# --- Configuration ---
LOG_FILE="/var/log/gui_manager.log"
# --- Functions ---
# Function to check if system uses systemd
is_systemd() {
[ -d /run/systemd/system ] && return 0 || return 1
}
# Function to get current display manager
get_display_manager() {
if [ -f /etc/X11/default-display-manager ]; then
cat /etc/X11/default-display-manager
elif systemctl list-units --type=service | grep -q "gdm"; then
echo "/usr/sbin/gdm3"
elif systemctl list-units --type=service | grep -q "lightdm"; then
echo "/usr/sbin/lightdm"
elif systemctl list-units --type=service | grep -q "sddm"; then
echo "/usr/sbin/sddm"
elif systemctl list-units --type=service | grep -q "lxdm"; then
echo "/usr/sbin/lxdm"
else
echo "unknown"
fi
}
# Function to get current target
get_current_target() {
if is_systemd; then
systemctl get-default
else
echo "System doesn't use systemd"
fi
}
# Function to show GUI status
show_gui_status() {
if ! is_systemd; then
echo "$(date): System doesn't use systemd" | tee -a "$LOG_FILE"
return 1
fi
current_target=$(get_current_target)
dm=$(get_display_manager)
echo "$(date): Current system target: $current_target" | tee -a "$LOG_FILE"
echo "$(date): Display Manager: $(basename "$dm")" | tee -a "$LOG_FILE"
if [ "$current_target" = "graphical.target" ]; then
echo "$(date): Graphical environment is ENABLED" | tee -a "$LOG_FILE"
else
echo "$(date): Graphical environment is DISABLED" | tee -a "$LOG_FILE"
fi
# Show memory usage
echo "$(date): Memory usage:" | tee -a "$LOG_FILE"
free -h | awk '/^Mem:/ {print " Total: " $2 ", Used: " $3 ", Free: " $4}' | tee -a "$LOG_FILE"
}
# Function to disable graphical environment
disable_gui() {
if ! is_systemd; then
echo "$(date): Error: This system doesn't use systemd" | tee -a "$LOG_FILE"
return 1
fi
current_target=$(get_current_target)
if [ "$current_target" != "graphical.target" ]; then
echo "$(date): Graphical environment is already disabled" | tee -a "$LOG_FILE"
return 0
fi
echo "$(date): Disabling graphical environment..." | tee -a "$LOG_FILE"
# Get current display manager
dm=$(get_display_manager)
if [ "$dm" = "unknown" ]; then
echo "$(date): Error: Could not determine display manager" | tee -a "$LOG_FILE"
return 1
fi
# Show memory usage before
echo "$(date): Memory usage before disabling GUI:" | tee -a "$LOG_FILE"
free -h | awk '/^Mem:/ {print " Total: " $2 ", Used: " $3 ", Free: " $4}' | tee -a "$LOG_FILE"
# Stop display manager
echo "$(date): Stopping display manager $(basename "$dm")..." | tee -a "$LOG_FILE"
systemctl stop "$(basename "$dm")"
# Disable graphical target
echo "$(date): Setting default target to multi-user.target..." | tee -a "$LOG_FILE"
systemctl set-default multi-user.target
# Show memory usage after
echo "$(date): Memory usage after disabling GUI:" | tee -a "$LOG_FILE"
free -h | awk '/^Mem:/ {print " Total: " $2 ", Used: " $3 ", Free: " $4}' | tee -a "$LOG_FILE"
echo "$(date): Graphical environment disabled successfully" | tee -a "$LOG_FILE"
return 0
}
# Function to enable graphical environment
enable_gui() {
if ! is_systemd; then
echo "$(date): Error: This system doesn't use systemd" | tee -a "$LOG_FILE"
return 1
fi
current_target=$(get_current_target)
if [ "$current_target" = "graphical.target" ]; then
echo "$(date): Graphical environment is already enabled" | tee -a "$LOG_FILE"
return 0
fi
echo "$(date): Enabling graphical environment..." | tee -a "$LOG_FILE"
# Get current display manager
dm=$(get_display_manager)
if [ "$dm" = "unknown" ]; then
echo "$(date): Error: Could not determine display manager" | tee -a "$LOG_FILE"
return 1
fi
# Enable graphical target
echo "$(date): Setting default target to graphical.target..." | tee -a "$LOG_FILE"
systemctl set-default graphical.target
# Start display manager
echo "$(date): Starting display manager $(basename "$dm")..." | tee -a "$LOG_FILE"
systemctl start "$(basename "$dm")"
echo "$(date): Graphical environment enabled successfully" | tee -a "$LOG_FILE"
return 0
}
# --- Main Execution ---
# Create log directory if it doesn't exist
mkdir -p /var/log
# Determine action based on parameters or environment variable
ACTION=""
# Check for command line parameter
if [ $# -gt 0 ]; then
ACTION="$1"
fi
# Check for environment variable if no parameter provided
if [ -z "$ACTION" ] && [ -n "$GUI_ACTION" ]; then
ACTION="$GUI_ACTION"
fi
# Default to status if no action specified
if [ -z "$ACTION" ]; then
ACTION="status"
fi
# Execute the appropriate action
case "$ACTION" in
disable)
disable_gui
;;
enable)
enable_gui
;;
status)
show_gui_status
;;
*)
echo "Usage: $0 [enable|disable|status]"
echo "Or: GUI_ACTION=enable|disable $0"
echo "Invalid action: $ACTION"
exit 1
;;
esac