Controls for the Sony ULT WEAR (WH-ULT900N), built into the Omarchy bar.
Battery status, noise control, ULT modes, sound feedback, and PipeWire codec switching are available from one keyboard-friendly panel. LDAC is shown as active only after PipeWire confirms the negotiated codec.
Warning
This plugin was vibecoded for my personal setup and has only been tested on my WH-ULT900N. It is not affiliated with or supported by Sony or Omarchy. The headset protocol is unofficial, so use it at your own risk.
| Control panel | Bar widget |
|---|---|
![]() |
![]() |
- Battery percentage and charging status
- Noise cancellation, Ambient Sound, Voice Focus, and Off
- ULT Off, ULT 1, and ULT 2
- Verified LDAC, AAC, SBC, and SBC XQ switching through PipeWire
- Live state updates when controls are changed on the headphones
- Optional local chimes for noise-control changes and bass cues for ULT changes
- Compact bar status with battery percentage and an LDAC badge
- Mouse and keyboard control using Omarchy's native panel components
- Omarchy 4 with Quickshell
- Sony ULT WEAR paired through the normal Bluetooth panel
- BlueZ, PipeWire, WirePlumber,
pactl, and Python 3 pw-playfor optional sound feedback- PipeWire's LDAC codec plugin if LDAC is required
omarchy plugin add https://github.com/pats01/sony-ult-wear-omarchy.git --enable --yesUpdate it later with:
omarchy plugin update pats01.sony-ult-wear --yesThe plugin looks for a connected device named ULT WEAR or WH-ULT900N.
Bluetooth addresses are discovered at runtime and are never stored in the
repository.
| Section | Available actions |
|---|---|
| Listening | Off, ANC, Ambient, Voice Focus |
| ULT Sound | Off, ULT 1, ULT 2 |
| Audio codec | Every codec advertised by PipeWire |
| Sound feedback | Enable or disable local confirmation sounds |
Keyboard shortcuts:
n,a,v,o: ANC, Ambient, Voice Focus, Off0,1,2: ULT Off, ULT 1, ULT 2d: switch to LDAC when availables: toggle sound feedbackr: refresh- Arrow keys or
h/j/k/l: move between controls - Enter or Space: apply the selected control
- Tab: switch panels
- Escape: close
The Omarchy service keeps one RFCOMM connection open while the headphones are connected. It avoids reconnecting and repeating the Sony handshake after every click.
On my ULT WEAR, a mode change dropped from 1.410 seconds to 0.248–0.329 seconds. Those figures are from a small local test, not a general benchmark.
Sony state notifications are used when available. A lightweight readback on the same connection runs once a second as a fallback, so pressing the physical ULT or NC button should also update the panel.
Codec changes use PipeWire's runtime BlueZ interface. The plugin switches only to codecs advertised for the current connection and checks the active codec afterward. It does not rewrite WirePlumber configuration or restart audio services.
LDAC may be unavailable when:
- multipoint is enabled on the headphones;
- Sony Sound Connect is set to prioritize connection stability;
- a call has placed the device in an HFP/HSP profile; or
- the host does not have PipeWire's LDAC codec support installed.
Stop the Omarchy shell before using one-shot commands because the shell owns the warm headset-control connection while it is running.
./sony-ult status --address AA:BB:CC:DD:EE:FF --json
./sony-ult set-noise anc --address AA:BB:CC:DD:EE:FF --json --sound-cue
./sony-ult set-ult 2 --address AA:BB:CC:DD:EE:FF --json --sound-cue
./sony-ult set-codec LDAC --address AA:BB:CC:DD:EE:FF --jsonThe internal long-running interface is also available with:
./sony-ult serve --address AA:BB:CC:DD:EE:FFIt accepts JSON-line commands on standard input and emits responses and live state events on standard output.
python -m unittest discover -s tests -p 'test_*.py'
deno test tests/model_test.js
omarchy plugin validate .See HARDWARE_VALIDATION.md for the local test record and THIRD_PARTY_NOTICES.md for the protocol projects used as references.

