157 lines
4.9 KiB
Bash
157 lines
4.9 KiB
Bash
#!/bin/bash
|
|
# 💫 https://github.com/JaKooLit 💫 #
|
|
# Temperature Monitor - CPU/GPU Temperature Alerts #
|
|
|
|
temp=(
|
|
lm_sensors
|
|
libnotify
|
|
)
|
|
|
|
|
|
## WARNING: DO NOT EDIT BEYOND THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING! ##
|
|
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
|
|
|
# Change the working directory to the parent directory of the script
|
|
PARENT_DIR="$SCRIPT_DIR/.."
|
|
cd "$PARENT_DIR" || { echo "${ERROR} Failed to change directory to $PARENT_DIR"; exit 1; }
|
|
|
|
# Source the global functions script
|
|
if ! source "$(dirname "$(readlink -f "$0")")/Global_functions.sh"; then
|
|
echo "Failed to source Global_functions.sh"
|
|
exit 1
|
|
fi
|
|
|
|
# Set the name of the log file to include the current date and time
|
|
LOG="Install-Logs/install-$(date +%d-%H%M%S)_temp-monitor.log"
|
|
|
|
# Temperature Monitor
|
|
printf "${NOTE} Installing ${SKY_BLUE}Temperature Monitor${RESET} Packages...\n"
|
|
for TEMP in "${temp[@]}"; do
|
|
install_package "$TEMP" "$LOG"
|
|
done
|
|
|
|
# Detect sensors
|
|
printf "${NOTE} Detecting ${YELLOW}hardware sensors${RESET}...\n"
|
|
sudo sensors-detect --auto 2>&1 | tee -a "$LOG"
|
|
|
|
# Create temperature monitoring script
|
|
printf "${NOTE} Creating ${YELLOW}temperature monitoring${RESET} script...\n"
|
|
|
|
TEMP_SCRIPT="$HOME/.config/hypr/scripts/temp-monitor.sh"
|
|
mkdir -p "$HOME/.config/hypr/scripts"
|
|
|
|
cat > "$TEMP_SCRIPT" << 'EOF'
|
|
#!/bin/bash
|
|
# Temperature Monitoring Script
|
|
# Monitors CPU and GPU temperatures and sends alerts
|
|
|
|
# Configuration
|
|
CPU_TEMP_WARNING=75
|
|
CPU_TEMP_CRITICAL=85
|
|
GPU_TEMP_WARNING=75
|
|
GPU_TEMP_CRITICAL=85
|
|
CHECK_INTERVAL=30 # Check every 30 seconds
|
|
|
|
# Track notification state
|
|
NOTIFIED_CPU_WARN=false
|
|
NOTIFIED_CPU_CRIT=false
|
|
NOTIFIED_GPU_WARN=false
|
|
NOTIFIED_GPU_CRIT=false
|
|
|
|
while true; do
|
|
# Get CPU temperature (average of all cores)
|
|
CPU_TEMP=$(sensors | grep -i 'Package id 0:\|Tdie:' | awk '{print $4}' | sed 's/+//;s/°C//' | head -1)
|
|
|
|
# If Package id not found, try other methods
|
|
if [ -z "$CPU_TEMP" ]; then
|
|
CPU_TEMP=$(sensors | grep -i 'Core 0:' | awk '{print $3}' | sed 's/+//;s/°C//' | head -1)
|
|
fi
|
|
|
|
# Get GPU temperature (if available)
|
|
GPU_TEMP=$(sensors | grep -i 'edge:\|temp1:' | awk '{print $2}' | sed 's/+//;s/°C//' | head -1)
|
|
|
|
# Check CPU temperature
|
|
if [ -n "$CPU_TEMP" ]; then
|
|
CPU_TEMP_INT=${CPU_TEMP%.*}
|
|
|
|
if [ "$CPU_TEMP_INT" -ge "$CPU_TEMP_CRITICAL" ]; then
|
|
if [ "$NOTIFIED_CPU_CRIT" = false ]; then
|
|
notify-send -u critical -i temperature-high "Critical CPU Temperature" "CPU temperature is ${CPU_TEMP}°C! System may throttle or shutdown."
|
|
NOTIFIED_CPU_CRIT=true
|
|
NOTIFIED_CPU_WARN=true
|
|
fi
|
|
elif [ "$CPU_TEMP_INT" -ge "$CPU_TEMP_WARNING" ]; then
|
|
if [ "$NOTIFIED_CPU_WARN" = false ]; then
|
|
notify-send -u normal -i temperature-normal "High CPU Temperature" "CPU temperature is ${CPU_TEMP}°C"
|
|
NOTIFIED_CPU_WARN=true
|
|
fi
|
|
else
|
|
NOTIFIED_CPU_WARN=false
|
|
NOTIFIED_CPU_CRIT=false
|
|
fi
|
|
fi
|
|
|
|
# Check GPU temperature
|
|
if [ -n "$GPU_TEMP" ]; then
|
|
GPU_TEMP_INT=${GPU_TEMP%.*}
|
|
|
|
if [ "$GPU_TEMP_INT" -ge "$GPU_TEMP_CRITICAL" ]; then
|
|
if [ "$NOTIFIED_GPU_CRIT" = false ]; then
|
|
notify-send -u critical -i temperature-high "Critical GPU Temperature" "GPU temperature is ${GPU_TEMP}°C!"
|
|
NOTIFIED_GPU_CRIT=true
|
|
NOTIFIED_GPU_WARN=true
|
|
fi
|
|
elif [ "$GPU_TEMP_INT" -ge "$GPU_TEMP_WARNING" ]; then
|
|
if [ "$NOTIFIED_GPU_WARN" = false ]; then
|
|
notify-send -u normal -i temperature-normal "High GPU Temperature" "GPU temperature is ${GPU_TEMP}°C"
|
|
NOTIFIED_GPU_WARN=true
|
|
fi
|
|
else
|
|
NOTIFIED_GPU_WARN=false
|
|
NOTIFIED_GPU_CRIT=false
|
|
fi
|
|
fi
|
|
|
|
sleep "$CHECK_INTERVAL"
|
|
done
|
|
EOF
|
|
|
|
chmod +x "$TEMP_SCRIPT"
|
|
|
|
printf "${OK} Temperature monitoring script created at ${YELLOW}$TEMP_SCRIPT${RESET}\n"
|
|
|
|
# Create systemd user service
|
|
printf "${NOTE} Creating ${YELLOW}systemd user service${RESET} for temperature monitoring...\n"
|
|
|
|
SYSTEMD_DIR="$HOME/.config/systemd/user"
|
|
mkdir -p "$SYSTEMD_DIR"
|
|
|
|
cat > "$SYSTEMD_DIR/temp-monitor.service" << EOF
|
|
[Unit]
|
|
Description=Temperature Monitor
|
|
After=graphical-session.target
|
|
|
|
[Service]
|
|
Type=simple
|
|
ExecStart=$TEMP_SCRIPT
|
|
Restart=on-failure
|
|
RestartSec=10
|
|
|
|
[Install]
|
|
WantedBy=default.target
|
|
EOF
|
|
|
|
printf "${OK} Systemd service created\n"
|
|
|
|
# Enable and start the service
|
|
printf "${NOTE} Enabling and starting ${YELLOW}temp-monitor${RESET} service...\n"
|
|
systemctl --user daemon-reload
|
|
systemctl --user enable temp-monitor.service 2>&1 | tee -a "$LOG"
|
|
systemctl --user start temp-monitor.service 2>&1 | tee -a "$LOG"
|
|
|
|
printf "${OK} Temperature monitor service is now running!\n"
|
|
printf "${INFO} You can check status with: ${YELLOW}systemctl --user status temp-monitor${RESET}\n"
|
|
printf "${INFO} View temperatures: ${YELLOW}sensors${RESET}\n"
|
|
|
|
printf "\n%.0s" {1..2}
|