corsairctl/scripts/hidpp-battery-waybar.sh
nevaforget 25eacfc02d fix: Audit-Befunde in Protokoll-Parsing, Error-Handling und Eingabe-Validierung
BragiResponse-Felder korrekt zugeordnet (endpoint=raw[1], command=raw[2],
status=raw[3]) gemäß Protokoll-Doku. PropertyNotSupported durch DeviceError
ersetzt, parse_response_validated in device.rs aktiviert, flush() mit
Iterationslimit gegen Endlosschleifen, Sidetone-Range per clap validiert
statt clamp, JSON-Escaping im hidpp-battery-waybar.sh, udev auf uaccess
umgestellt. 52 Tests grün.
2026-03-28 00:37:36 +01:00

36 lines
1.2 KiB
Bash

#!/bin/bash
# ABOUTME: Waybar-Modul für Logitech HID++ Geräte-Batterien.
# ABOUTME: Findet den richtigen hidpp_battery_* Eintrag dynamisch per MODEL_NAME.
MODEL="G515 LS TKL"
ICON="󰌌"
# hidpp_battery_* mit passendem MODEL_NAME finden
for dev in /sys/class/power_supply/hidpp_battery_*; do
[[ -d "$dev" ]] || continue
name=$(cat "$dev/model_name" 2>/dev/null)
if [[ "$name" == "$MODEL" ]]; then
capacity=$(cat "$dev/capacity" 2>/dev/null || echo 0)
status=$(cat "$dev/status" 2>/dev/null || echo "Unknown")
# Eingabe-Validierung gegen JSON-Injection
[[ "$capacity" =~ ^[0-9]+$ ]] || capacity=0
[[ "$status" =~ ^[A-Za-z\ ]+$ ]] || status="Unknown"
class="normal"
if [[ "$status" == "Charging" ]]; then
class="charging"
elif (( capacity <= 15 )); then
class="critical"
elif (( capacity <= 30 )); then
class="warning"
fi
echo "{\"text\":\"${capacity}% ${ICON}\",\"tooltip\":\"${MODEL}: ${capacity}% — ${status}\",\"class\":\"${class}\",\"percentage\":${capacity}}"
exit 0
fi
done
# Gerät nicht gefunden — nichts ausgeben, Waybar versteckt das Modul
exit 0