From 95802c5d373f0a7148a6a13289cacdc9a669034a Mon Sep 17 00:00:00 2001 From: nevaforget Date: Fri, 27 Mar 2026 23:41:08 +0100 Subject: [PATCH] feat: Waybar-Wrapper mit File-Locking und Cache MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Waybar startet pro Monitor eine eigene corsairctl-Instanz. Mehrere Prozesse auf demselben HID-Gerät verursachen Response-Mixups. Der Wrapper cached den JSON-Output für 10s und nutzt flock damit nur ein Prozess gleichzeitig das Gerät anspricht. --- PKGBUILD | 1 + scripts/corsairctl-waybar.sh | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+) create mode 100755 scripts/corsairctl-waybar.sh diff --git a/PKGBUILD b/PKGBUILD index 8f10397..02ba722 100644 --- a/PKGBUILD +++ b/PKGBUILD @@ -27,5 +27,6 @@ build() { package() { cd "$pkgname" install -Dm755 "target/release/$pkgname" "$pkgdir/usr/bin/$pkgname" + install -Dm755 "scripts/corsairctl-waybar.sh" "$pkgdir/usr/bin/corsairctl-waybar" install -Dm644 "udev/99-corsair.rules" "$pkgdir/usr/lib/udev/rules.d/99-corsair.rules" } diff --git a/scripts/corsairctl-waybar.sh b/scripts/corsairctl-waybar.sh new file mode 100755 index 0000000..6922bbd --- /dev/null +++ b/scripts/corsairctl-waybar.sh @@ -0,0 +1,23 @@ +#!/bin/bash +# ABOUTME: Waybar-Wrapper für corsairctl — cached JSON-Output. +# ABOUTME: Verhindert dass mehrere Waybar-Bars gleichzeitig das HID-Gerät ansprechen. + +CACHE="/tmp/corsairctl-waybar.json" +LOCK="/tmp/corsairctl-waybar.lock" +MAX_AGE=10 + +# Cache frisch genug? +if [[ -f "$CACHE" ]]; then + age=$(( $(date +%s) - $(stat -c %Y "$CACHE") )) + if (( age < MAX_AGE )); then + cat "$CACHE" + exit 0 + fi +fi + +# Lock holen und aktualisieren +( + flock -n 9 || { [[ -f "$CACHE" ]] && cat "$CACHE"; exit 0; } + corsairctl json > "$CACHE" 2>/dev/null + cat "$CACHE" +) 9>"$LOCK"