Files
btd700linux/README.de.md
T
Justin fcff22abef
AppImage / build (push) Has been cancelled
AppImage / release (push) Has been cancelled
Tests / unit (de, 3.14) (push) Has been cancelled
Tests / unit (en, 3.10) (push) Has been cancelled
Tests / unit (en, 3.14) (push) Has been cancelled
Tests / unit (de, 3.10) (push) Has been cancelled
Align package version and verify release metadata
2026-09-05 21:37:29 +02:00

10 KiB
Raw Blame History

BTD 700 Control für Linux

English · AppImage herunterladen · Fehler melden

Native GTK-4-App zur Steuerung des Sennheiser BTD 700, mit einem Menü im Infobereich von GNOME/KDE. Eigenständige Implementierung des HID-Steuerprotokolls, analysiert anhand der offiziellen Windows-Anwendung Dongle Control 1.0.5.

Keine Firmware-Updates, Firmware-Downloads oder Update-Schnittstellen. Die App benötigt weder Windows/Wine noch eine Netzwerkverbindung. Sennheiser-Programmcode, Logos und Firmware werden nicht mitgeliefert. Dies ist ein unabhängiges Projekt.

Mit KI entwickelt · Experimentell · Ohne Gewähr

Dieses Projekt entstand mit KI-Unterstützung durch OpenAI Codex, einschließlich Protokollanalyse, Implementierung, Dokumentation und Tests. Es gibt keine Garantie, dass es mit deinem Dongle, deiner Firmware oder deinem Linux-System funktioniert. Nutzung auf eigenes Risiko; die Software wird im vorhandenen Zustand ohne Gewährleistung unter der MIT-Lizenz bereitgestellt. Das Projekt ist unabhängig von Sennheiser und Sonova.

Bilder der App

Echte Fensteraufnahmen unter Linux mit ausdrücklich simulierten Demo-Daten. Die Bilder zeigen die englische Oberfläche; Deutsch ist ebenfalls enthalten.

Hauptfenster mit Modus, Codec und Verbindung Auracast-Einstellungen und Infobereich-Optionen

AppImage herunterladen

Das AppImage findest du unter GitHub Releases. Python, GTK, libadwaita und die Tray-Bibliothek sind enthalten. Das Paket ist für x86-64 mit glibc 2.39 oder neuer, etwa Ubuntu 24.04+ oder das getestete Bazzite 44.

chmod +x BTD_700_Control-0.3.1-x86_64.AppImage
./BTD_700_Control-0.3.1-x86_64.AppImage

Datei zuerst an ihren dauerhaften Platz legen. Mit --install-desktop legst du einen Anwendungsmenü-Eintrag an; „Beim Anmelden starten“ in der App aktiviert den Autostart im Tray. --remove-desktop entfernt beide Einträge. Nach Verschieben oder Umbenennen der Datei den Menüeintrag neu anlegen und Autostart aus-/einschalten.

Ohne FUSE funktioniert der Start mit APPIMAGE_EXTRACT_AND_RUN=1 ./BTD_700_Control-0.3.1-x86_64.AppImage. Die AppImage-Anleitung erklärt dauerhaftes Entpacken und eigene Builds. Prüfsummen und Bibliotheksquellen liegen beim Release. Die USB-Berechtigung und ein Tray-Host bleiben nötig; GNOME benötigt eine StatusNotifier/AppIndicator-Erweiterung.

Alternativ: Quellcode herunterladen

git clone https://github.com/justin-eckenweber/btd700linux.git
cd btd700linux

Alternativ Quellcode v0.3.1 als ZIP entpacken und bash run.sh im Projektordner ausführen.

Starten

./run.sh

Das Fenster zeigt den echten Dongle-Status. Beim Schließen bleibt die App im Infobereich aktiv. „Beenden“ im Symbolmenü oder das Beenden-Symbol im Fenster beendet die App vollständig. Wenn der Desktop keinen Infobereich anbietet, beendet das Schließen des Fensters die App.

python3 install.py       # Anwendungsmenü-Eintrag für diesen Projektordner
./run.sh --background   # Nur im Infobereich starten
./run.sh --demo         # Simulierter Dongle, keinerlei USB-Zugriff

Mit python3 install.py --uninstall entfernst du den Menüeintrag und Autostart. Den Projektordner nach der Installation behalten. „Beim Anmelden starten“ in der App aktiviert bei Bedarf den Autostart im Infobereich. Er ist standardmäßig aus.

Sprache

Die App, das Infobereich-Menü, CLI-Hilfe und Fehlermeldungen verwenden auf deutschen Systemen Deutsch und sonst Englisch. Bei Bedarf explizit festlegen:

./run.sh --language de
./run.sh --language en
BTD700_LANGUAGE=de ./run.sh --background

Eine bereits laufende Instanz vorher über „Beenden“ schließen. Ein weiterer Start öffnet sonst das bestehende Fenster in seiner bisherigen Sprache.

Steuerung

  • Standard / Gaming / Auracast direkt im Fenster oder Symbolmenü wählen.
  • Aktiven Codec, Auflösung, Abtastrate und Verbindungsstatus ablesen.
  • Codecs auswählen, die der Dongle für die aktuelle Verbindung meldet. Die Auswahl steht im Standard-Modus zur Verfügung; Gaming setzt seinen Codec selbst.
  • Bluetooth Classic / LE Audio / Automatisch auswählen, entsprechend den vom angeschlossenen Kopfhörer gemeldeten Möglichkeiten.
  • Bereits gekoppelte Kopfhörer verbinden / trennen.
  • Auracast: Name, Passwortschutz, öffentliche Auffindbarkeit und Qualität. Das Symbolmenü bietet Schalter und Untermenüs; für Name/Passwort öffnet es die Eingabe im Fenster.
  • Werkseinstellungen nur nach ausdrücklicher Bestätigung im Dialog. Dabei werden die Kopplungen gelöscht. Die App führt niemals automatisch einen Reset aus.

Das Passwort wird verdeckt eingegeben und weder gespeichert noch protokolliert. Ein leeres Passwortfeld behält das bisherige Passwort; „Passwortschutz“ ausschalten sendet ohne Passwortschutz. Der Name erlaubt 416 ASCII-Buchstaben/Ziffern mit inneren Leerzeichen; ein leerer Name stellt den Gerätenamen wieder her. Passwörter verwenden 416 ASCII-Buchstaben/Ziffern, entsprechend den Original-Eingabegrenzen.

„Öffentlich auffindbar“ ist die Auracast-Ankündigung, kein Ein/Aus-Schalter für Audio. Zum Starten/Beenden der Übertragung den Audiomodus umstellen. Die angezeigten Bit-/kHz-Werte stammen vom Dongle. Die USB-Abtastrate wird vom Audiosystem (z. B. PipeWire) bestimmt und ist kein hier nachgewiesener Stellbefehl. Koppeln erfolgt über die Taste am Dongle; „Verbinden“ versucht die bestehende Kopplung.

Voraussetzungen für den Start aus dem Quellcode

Python ≥ 3.10, PyGObject, GTK ≥ 4.10, libadwaita ≥ 1.5 und libdbusmenu mit GObject-Introspection. Auf dem hier verwendeten Bazzite sind die benötigten Bibliotheken bereits vorhanden; keine zusätzlichen Pakete waren erforderlich.

Für andere Systeme typischerweise:

# Fedora (klassisch, veränderliches System)
sudo dnf install python3-gobject gtk4 libadwaita libdbusmenu

# Debian / Ubuntu
sudo apt install python3-gi gir1.2-gtk-4.0 gir1.2-adw-1 gir1.2-dbusmenu-glib-0.4

Auf GNOME muss der Desktop StatusNotifier/AppIndicator-Symbole unterstützen; beispielsweise mit „AppIndicator and KStatusNotifierItem Support“. Auf dem getesteten GNOME ist derselbe Dienst bereits für JetBrains Toolbox und andere Apps aktiv. KDE stellt diese Schnittstelle über seinen Infobereich bereit.

Fehlt die Menü-Bibliothek, bleibt das Fenster nutzbar. Das Terminalinterface benötigt ausschließlich die Python-Standardbibliothek.

USB-Zugriff

Es wird ausschließlich die passende HID-Steuerschnittstelle des Geräts 3542:3001 geöffnet, identifiziert über ihren Report-Deskriptor. Die zweite Schnittstelle für Updates bleibt geschlossen. Audiotreiber werden nicht getrennt.

Falls die App fehlende Berechtigungen meldet:

sudo install -m 0644 packaging/70-btd700-control.rules /etc/udev/rules.d/70-btd700-control.rules
sudo udevadm control --reload-rules

Anschließend den Dongle aus- und wieder einstecken. Die Regel beschränkt den Zugriff auf die Steuerungsschnittstelle und den aktiven lokalen Benutzer. Die App nicht als root starten. Auf dem getesteten System ist bereits Zugriff vorhanden.

Terminal

./run.sh devices
./run.sh status
./run.sh mode standard
./run.sh mode gaming
./run.sh mode standard --transport auto
./run.sh codec adaptive
./run.sh disconnect
./run.sh connect
./run.sh auracast --name 'Wohnzimmer' --quality high --public on
./run.sh auracast --password --encryption on  # Passwort verdeckt abfragen
./run.sh mode auracast

status gibt JSON aus und liest kein Passwort. Nur eine Instanz darf den Dongle halten: Vor CLI-Befehlen eine laufende GUI über „Beenden“ schließen. Mehrere Dongles lassen sich mit --device /dev/hidrawN vor dem Unterbefehl auswählen.

Verifikation

python3 -m unittest discover -s tests -v
python3 tools/check_gui.py

check_gui.py verwendet ausschließlich einen simulierten Dongle, öffnet eine Demo-Oberfläche in der bestehenden Sitzung und prüft die Menüaktionen über den echten D-Bus-Menüexport. Es speichert Fensterbilder unter /tmp/btd700-gui-test*.png.

Nachgewiesen am angeschlossenen BTD 700 mit Firmware 3.11.0:

  • Erkennung und Öffnen der korrekten HID-Schnittstelle ohne Treiberwechsel.
  • Echte Antworten auf Status-, Modus-, Codec-, Audioqualitäts-, LE-Zustands-, Transport-, Auracast-Konfigurations-, Namens- und Firmwareversionsabfragen.
  • Anzeige im GTK-Fenster und Registrierung im GNOME-Infobereich.

Schreibbefehle wurden aus der Originalsoftware rekonstruiert und in Simulation geprüft. Der Nutzer hat die Funktion der App am eigenen Dongle bestätigt. Eine Aufschlüsselung aller dabei getesteten Funktionen liegt nicht vor; der automatisierte Hardware-Umschalttest wurde bisher nicht ausgeführt.

Das vorbereitete tools/check_hardware.py --run schaltet Modi und Codec um, prüft Auracast-Werte und versucht anschließend die gesicherten Originalwerte wiederherzustellen. Es führt weder Firmware-Updates noch einen Werksreset aus. Den Hardwaretest nur bewusst starten: Er unterbricht kurz die Audiowiedergabe und verändert vorübergehend gespeicherte Einstellungen einschließlich des Passworts. Bei USB-Trennung während einer Änderung ist eine Wiederherstellung nicht garantiert.

Protokoll, Herkunft und bekannte Grenzen: docs/PROTOCOL.md.

Lizenz und Mitarbeit

Eigener Projektcode und Dokumentation stehen unter MIT. Drittsoftware und Herstellerkennzeichen behalten ihre eigenen Rechte; siehe THIRD_PARTY_NOTICES.md. Beiträge, Übersetzungen und Kompatibilitätsberichte sind willkommen: CONTRIBUTING.md.