aboutsummarylogtreecommitdiffstats
path: root/fnq-monitor.sh
blob: a1129d38abc2d254c18e038e8bf81df06aa9a039 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#!/bin/bash

# Check if icon directory exists
ICON_BASE="/usr/share/icons/breeze-dark/status/16"
if [[ ! -d "$ICON_BASE" ]]; then
    logger -t fnq-monitor "Icon directory $ICON_BASE not found. Falling back to default icon."
    ICON_BASE="/usr/share/icons/hicolor/scalable/status"
fi

ACPI_CALL_PATH="/proc/acpi/call"
METHOD_NAME="\_SB.PCI0.LPC0.EC0.GZ44"

# Check if acpi_call module is loaded
if [[ ! -e "$ACPI_CALL_PATH" ]]; then
    logger -t fnq-monitor "acpi_call module not loaded. Attempting to load..."
    pkexec modprobe acpi_call || {
        logger -t fnq-monitor "Failed to load acpi_call module"
        exit 1
    }
fi

logger -t fnq-monitor "Starting Fn+Q monitoring service..."

# Monitor ACPI events
acpi_listen | while read -r line; do
    if [[ "$line" == "wmi PNP0C14:00 000000d5 00000000" ]]; then
        result=$(echo "$METHOD_NAME" | pkexec tee "$ACPI_CALL_PATH" > /dev/null && pkexec cat "$ACPI_CALL_PATH" | tr -d '\000\r\n')

        case "$result" in
            0x0)
                ICON="$ICON_BASE/temperature-normal.svg"
                TEXT="Intelligent Cooling"
                ;;
            0x1)
                ICON="$ICON_BASE/temperature-warm.svg"
                TEXT="Extreme Performance"
                ;;
            0x2)
                ICON="$ICON_BASE/temperature-cold.svg"
                TEXT="Quiet Mode"
                ;;
            *)
                ICON="$ICON_BASE/temperature.svg"
                TEXT="Unknown Mode ($result)"
                ;;
        esac

        # Check if qdbus is available
        if command -v qdbus >/dev/null 2>&1; then
            qdbus org.freedesktop.Notifications /org/kde/osdService org.kde.osdService.showText "$ICON" "$TEXT" || \
                logger -t fnq-monitor "Failed to show notification"
        else
            logger -t fnq-monitor "qdbus not found, notification skipped"
        fi
    fi
done