Lauscher

Rating: 
5
Your rating: None Average: 5 (2 votes)

Lauscher — Sony headphone control for Sailfish OS

Lauscher talks to your Sony headphones the way Sony's own phone app does, over Bluetooth: it reads their battery levels and settings and lets you change them from your SailfishOS device, without an account, a cloud service or a second phone.

It is a control channel, not an audio one. Your music keeps playing over the usual Bluetooth route while Lauscher is open.

What it shows and changes

  • Connect. Lists the paired devices that speak MDR, and only those; phones, speakers and car kits never appear. If exactly one supported headset is already connected when the app starts, it opens straight away.
  • Reconnect by itself. Buds going into their case take the control channel with them, which is not a fault. The app waits, says what it is waiting for, and picks the session up when the headset comes back.
  • Battery and identity. Per-side battery levels, model name, firmware, serial and the codec in use.
  • Playback. Track names, play/pause, next and previous, and volume as a percentage.
  • Ambient sound control. Off, noise cancelling, ambient sound with its level, and focus on voice.
  • Listening modes. Standard, background music with its distance, cinema, voice boost and sound leakage reduction — whichever of them the device advertises.
  • Equalizer. The presets the headset itself reports, the band steps as a strip of faders (five bands or ten, whichever the device has), and clear bass where it exists.
  • DSEE. Sony's upscaling, under its own name — DSEE, DSEE HX, DSEE Ultimate — as the device reports it.
  • Connected devices (multipoint). Which source devices the headset holds, which of them has playback, moving playback between them, and whether the headset may move it by itself.
  • The headset's own settings. The booleans the device defines, multipoint among them, and what its Bluetooth link is tuned for: sound quality or connection stability.
  • Cover page. Battery, volume and the active mode at a glance, with cover actions for the listening mode, the background music distance and the ambient sound control — whichever two of those the device has.

Lauscher shows only what your headset advertises. Two Sony models rarely offer the same set of features, so a section that is missing is one this device did not offer — the LinkBuds Clip, for instance, is open-ear and has no noise cancelling at all.

Before you start

Pair the headset in the Bluetooth settings first. Lauscher lists what is paired and speaks the Sony protocol, and connects on tap. If your headset is paired but missing from the list, connect it once in the Bluetooth settings so the phone reads its services again.

Only one app can hold the control channel at a time. Leaving the device page closes it on purpose, so Sony's own app — or another phone — can take over right away.

Devices

Developed and tested against the Sony LinkBuds Clip and the WF-C700N, on a Jolla Phone (2026). Other Sony headsets speaking the same protocol are expected to work, and the app shows whichever features they report. Community members report that devices like WH-1000XM4 and its generation is also working. Reports welcome!

Development

Please post bugs, errors and improvement suggestions as issues on GitHub: https://github.com/Wunderfitz/harbour-lauscher/issues

Interested people can also join our Telegram Group to exchange ideas, debug builds etc: https://t.me/+lLi7QF5RCC4xZDMy

Languages

English and German.

Credits and licence

The protocol is spoken by libmdr from the SonyHeadphonesClient project (MIT), formatting inside it uses fmt (MIT), and the Bluetooth connection is set up by BlueZ through the profile API bluetoothd already offers every app on the phone.

Lauscher is free software under the GNU GPLv3 or later. Sources: https://github.com/Wunderfitz/harbour-lauscher

Lauscher is an independent project. It is not affiliated with, endorsed or certified by Sony.

Lauscher was written together with Claude, Anthropic's AI assistant, in Claude Code.

Screenshots: 
Application versions: 
AttachmentSizeDate
File harbour-lauscher-0.1-1.aarch64.rpm471.62 KB07/09/2026 - 00:19
File harbour-lauscher-0.2-1.aarch64.rpm484.74 KB12/09/2026 - 23:35
Changelog: 

- Added an equalizer page: the presets the headset advertises, the band steps as
a strip of faders, and clear bass where the device has it. The button that
opens it names the preset that is on.
- Added a switch for DSEE, the headset's upscaling. It sits beside the equalizer
button because the headset takes both away on the same terms: while a
listening mode other than Standard is active, neither applies.
- Added a settings page for what the headset keeps about itself rather than
about the sound: the booleans it defines, multipoint among them, and what its
Bluetooth link is tuned for. Changing either drops the Bluetooth links for a
moment, which the page says before it happens.
- The app now reconnects by itself when a headset that went away comes back.
Buds going into their case are not a fault, so the app waits and says so
rather than reporting a failure, and picks the session up when they return.
- Launching with exactly one supported headset already connected now opens it
straight away. Two of them, or none, still open the picker.
- The cover can now switch the ambient sound control - off, noise cancelling,
ambient sound - which is the whole of what a closed-back headset offers there.
Before this the cover had no actions at all on a headset without listening
modes.
- The app now rotates into landscape.
- Fixed four faults on MDR version 1 headphones, WH-1000XM4 and older, reported
and diagnosed by JimKnopfIoT against that headset: voice guidance taking the
whole connection down, so that no such headset could connect at all; track
names never refreshing after the first; ambient sound being unreachable
because every mode read as noise cancelling; and the equalizer ignoring both
preset changes and band moves.
- Fixed a second headset being shown under the first one's name, which read as
the app connecting to the wrong one. Fixed the app accepting a Bluetooth
connection from a headset it had not asked for, and acting on a disconnection
meant for one it was not talking to.
- Fixed connecting to the same headset a second time hanging on "Connecting..."
for good. Leaving the device page closed this app's end of the control
channel, but BlueZ held the other end open, so the headset's one control
session stayed occupied; the app now tells BlueZ to let go of it.
- The new pages and controls are translated into German.

Comments

ahjolinna's picture

I cant connect WH-1000XM3 I get: "unable to initialize MDR V1 (Timed out)
 gdb logs just say this: https://paste.opensuse.org/pastes/5cdc3081b66a

ahjolinna's picture

great too see this app, I never even though it was possible as I assumed it was 100% propriatery.

not a must thing, but it could be nice if this was moved into the settings app instead of standalone app.

when I tried DSEE on LinkBuds I didnt get any audio at first, but when I reconnected the device it worked, I would recommend adding a small info that reconnection might be needed when enabled

nthn's picture

This is really great to have, thank you. I'm looking forward to the new release for my XM4 headphones.

Matt's picture

My Sony WF-1000XM5 works fine otherwise, but even at maximum the volume via bluetooth is quite low.

edit: there was another volume control in Lauscher app, setting that to 100% solved that.

Jakub's picture

I double checked wf1000xm5. Everything works like a charm :)

maffo999's picture

Tested this with WF1000-XM4 but connection to the earbuds fails with:

[W] unknown:0 - [lauscher] "Validation failed: data.settingValue == PriorMode::CONNECTION_QUALITY_PRIOR [../../harbour-lauscher/libmdr/upstream/src/Generated/ProtocolV2T1Validation.cpp:470] (Malformed payload)"

If you want to reach me out directly on jolla forum (same username) I'll be happy to beta test it further with these earbuds

fingus's picture

Got the same Error like you on JP2026 on 5.2.0.17 with my WF-C700N. Have also WF-C500 and will test it later and report back here!

Thanks for this great app @WerkWolf, this was really missed very hardly!

I did file this error also on your Gitguh-page!

WerkWolf's picture

Oh wow, great to see that there is interest! However, really strange that the WF-C700N doesn't work on your side. I have the exact same model and it works like a charm. Maybe another firmware version? 

@fingus @maffo999 Do you also have Telegram? IMHO a group there would be the easiest to exchange new builds and debug files for future improvements.

fingus's picture

With your new (experimental?) build on github it works now, see there. Works also with WF-C500.

WerkWolf's picture

Great! For the others, see the GitHub issue here: https://github.com/Wunderfitz/harbour-lauscher/issues/1#issuecomment-557... New release will come up soon if this build fixes the error for multiple people.

maffo999's picture

I've tried the nightly with WF-1000XM4 and the following seems to work ok:

1) connection to headset
2) battery level report (for each headset and case)
3) volume control
4) noise canceling/ambient sound setting

I still however have a minor issue where if I disconnect the headset from Lauscher, I need to completely kill the app for it to connect again. If I try to connect to the headset again without killing the app first, it will just try to connect and seemingly hang there.

Jakub's picture

This idea is great. I always wanted full controll of my headphones :D . I use "sony wf1000xm5". The app can connect to them and change audio, but switching ambient sound does not seem to work, or if if does, I cannot hear a difference. I can also test "sony 1000x the collection" when I get home.