KDE system tray battery monitor for the HyperX Cloud Flight wireless headset.
Shows a permanent tray icon with real-time battery percentage, charging state, and color-coded levels. Communicates directly with the headset dongle over HID using the reverse-engineered protocol from HeadsetControl and hyperx-cloud-flight.
| Headset | VID | PID |
|---|---|---|
| Cloud Flight (old) | 0x0951 |
0x16C4 |
| Cloud Flight (new) | 0x0951 |
0x1723 |
- Qt 6 (Core, Gui, Widgets)
- hidapi (hidraw backend)
- g++ with C++17 support
On Arch Linux:
pacman -S qt6-base hidapi
./build.sh
Or with CMake:
cmake -B build && cmake --build build
./install.sh
./uninstall.sh
sudo cp udev/70-hyperx-headset.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules && sudo udevadm trigger
Unplug and replug the dongle after installing the rules so logind can apply the uaccess ACL.
./build/kde-hyperx
cp desktop/kde-hyperx-autostart.desktop ~/.config/autostart/
A background thread polls the Cloud Flight dongle every 30 seconds via a 20-byte HID report (0x21 0xFF 0x05 ...). The response carries a big-endian voltage value in bytes 3–4 which is mapped to a percentage (about 3600 mV empty, 4075 mV full). Voltages above 0x100B indicate charging. The headset also pushes 2-byte events for power on/off and mic mute which are handled in real time.
The tray icon is rendered dynamically with QPainter — green above 60%, amber 25–60%, red below 25%, and blue with a lightning bolt overlay when charging. A red mic badge appears when the headset reports mute. Unknown readings show -- rather than a fake 0%. The icon stays off while the dongle is plugged in but the headset is powered down.
MIT