Website-Suche

Musik-App automatisch beim Verbinden von Bluetooth in Linux öffnen


Suchen Sie nach einer Möglichkeit, Ihren bevorzugten Musikplayer automatisch zu starten, wenn Sie ein Bluetooth-Gerät (z. B. Headset oder Lautsprecher) an Ihr Linux-System anschließen? Dieser Leitfaden zeigt Ihnen, wie Sie eine Automatisierung einrichten, um eine Musik-App automatisch zu öffnen, wenn ein Bluetooth-Gerät verbunden wird, mithilfe von systemd und einem einfachen Bash-Skript. Wir verwenden Rhythmbox als Musikplayer, aber Sie können ihn durch jede andere App ersetzen.

Ich habe dieses Setup mit meinem Fingers Bluetooth-Headset auf einem Debian 12 Cinnamon-Desktop-System getestet, und es hat perfekt funktioniert!

Schritte zum automatischen Öffnen einer Musik-App bei Bluetooth-Verbindung in Linux

Schritt 1: Finden Sie die MAC-Adresse Ihres Bluetooth-Geräts

Bevor Sie das Skript einrichten, müssen Sie die MAC-Adresse Ihres Bluetooth-Geräts finden. Eine MAC-Adresse ist ein eindeutiger Identifikator für Ihr Gerät.

A. Schalten Sie Ihr Bluetooth-Gerät ein

Stellen Sie sicher, dass Ihr Bluetooth-Gerät eingeschaltet und im Kopplungsmodus ist.

B. Aufgelistete verbundene Bluetooth-Geräte

Öffnen Sie ein Terminal und führen Sie aus:

bluetoothctl devices

Dies zeigt eine Liste von Bluetooth-Geräten zusammen mit ihren MAC-Adressen. Identifizieren Sie die richtige MAC-Adresse für Ihr Gerät.

Beispielausgabe:

Device 01:B6:ED:14:1F:8F FINGERS FC-SoundStorm

Notieren Sie die MAC-Adresse (z. B. 01:B6:ED:14:1F:8F). Sie werden diese in den nächsten Schritten benötigen.

Schritt 2: Ein Skript erstellen, um die Bluetooth-Verbindung zu erkennen

Erstellen Sie zunächst ein Skript, das überprüft, ob Ihr Bluetooth-Gerät verbunden ist, und Rhythmbox startet, falls es noch nicht läuft.

Öffnen Sie ein Terminal und erstellen Sie eine neue Datei:

nano ~/bluetooth-music.sh

Fügen Sie das folgende Skript hinzu:

#!/usr/bin/env bash
# ------------------------------------------------------------------
# Script Name:   bluetooth-music.sh
# Description:   A Bash script to Auto-launch Music Player 
                 on Bluetooth Connect
# Website:       https://gist.github.com/ostechnix
# Version:       1.0
# ------------------------------------------------------------------
DEVICE_MAC="01:B6:ED:14:1F:8F"
APP="rhythmbox"
FLAG_FILE="/tmp/bluetooth_music.flag"
# Check if Bluetooth device is connected
bluetoothctl info "$DEVICE_MAC" | grep -q "Connected: yes"
if [ $? -eq 0 ]; then
    # If Rhythmbox is not running and wasn't manually closed, start it
    if ! pgrep -f "$APP" > /dev/null && [ ! -f "$FLAG_FILE" ]; then
        DISPLAY=:0 "$APP" &
    fi
else
    # Remove flag when Bluetooth disconnects
    rm -f "$FLAG_FILE"
fi
  • Ersetzen Sie 01:B6:ED:14:1F:8F durch die MAC-Adresse Ihres Bluetooth-Geräts.
  • Ersetzen Sie rhythmbox durch den Befehl für Ihre bevorzugte Musik-App (z. B. clementine, spotify, vlc).

Speichern Sie die Datei und beenden Sie sie, indem Sie Ctrl + X, dann Y und dann Enter drücken.

Führen Sie den folgenden Befehl aus, um das Skript ausführbar zu machen:

chmod +x ~/bluetooth-music.sh

Schritt 3: Erstellen Sie einen systemd-Dienst, um das Skript auszuführen

Jetzt müssen wir einen systemd-Dienst einrichten, um das Skript im Hintergrund auszuführen.

Erstellen Sie die systemd-Dienstdatei:

nano ~/.config/systemd/user/bluetooth-music.service

Fügen Sie die folgende Konfiguration hinzu:

[Unit]
Description=Auto-launch Music Player on Bluetooth Connect
After=bluetooth.target

[Service]
ExecStart=/bin/bash -c 'while sleep 2; do ~/bluetooth-music.sh; done'
Restart=always
Environment=DISPLAY=:0
Environment=XDG_RUNTIME_DIR=/run/user/%U

[Install]
WantedBy=default.target

Stellen Sie sicher, dass der Pfad zur Datei bluetooth-music.sh in der Service-Konfiguration korrekt ist. Drücken Sie CTRL+O und CTRL+X, um die Datei zu speichern und zu schließen.

Führen Sie die folgenden Befehle aus, um den Dienst zu aktivieren und zu starten:

systemctl --user daemon-reload
systemctl --user enable bluetooth-music.service
systemctl --user start bluetooth-music.service

Nun wird Rhythmbox automatisch geöffnet, wenn Ihr Bluetooth-Gerät sich verbindet!

Ein kleines Problem mit diesem Ansatz ist, dass das Skript die Rhythmbox-Anwendung automatisch neu startet, wenn Sie sie schließen. Dies geschieht, weil das Skript alle paar Sekunden prüft, ob Ihr Bluetooth-Gerät verbunden ist. Wenn Rhythmbox nicht läuft, startet das Skript es erneut. Ihnen könnte dies unangenehm sein und störend erscheinen.

Um dieses Verhalten zu verhindern, führen Sie den folgenden Schritt aus.

Schritt 4: Verhindern, dass Rhythmbox nach manuellem Schließen neu startet

Da das Skript Rhythmbox immer wieder neu öffnet, verwenden Sie eine Flag-Datei, um anzuzeigen, wann Sie es manuell schließen.

Um dies zu tun, erstellen Sie ein Alias, um Rhythmbox manuell zu schließen:

echo "alias closemusic='touch /tmp/bluetooth_music.flag && pkill rhythmbox'" >> ~/.bash_aliases

Dies erstellt einen Befehl namens closemusic, der Rhythmbox schließt und eine Markierung setzt, um zu verhindern, dass es wieder geöffnet wird.

Bitte beachten Sie, dass wir die Datei /tmp/bluetooth_music.flag bereits in unserem Skript definiert haben, das wir zuvor in Schritt 2 erstellt haben.

Jetzt überprüft das Skript die Datei /tmp/bluetooth_music.flag. Wenn sie existiert, wird Rhythmbox nicht neu gestartet.

Lade die Datei ~/.bash_aliases neu:

source ~/.bash_aliases

Ab sofort können Sie den Befehl closemusic ausführen, anstatt Rhythmbox normal zu schließen:

closemusic

Dies sagt dem Skript, Rhythmbox nicht erneut zu öffnen, es sei denn, Ihr Bluetooth-Gerät trennt die Verbindung und verbindet sich erneut.

Schritt 5: Fehlerbehebung

Wenn Rhythmbox nicht startet oder der Dienst sich unerwartet verhält, versuchen Sie diese Schritte:

A. Überprüfen Sie, ob das Skript manuell ausgeführt wird

Führen Sie das Skript aus, um zu sehen, ob es funktioniert:

./bluetooth-music.sh

Wenn Rhythmbox nicht startet, überprüfen Sie, ob Ihr Bluetooth-Gerät verbunden ist:

bluetoothctl info 01:B6:ED:14:1F:8F

Stellen Sie sicher, dass Connected: yes in der Ausgabe erscheint.

Beispielausgabe:

Device 01:B6:ED:14:1F:8F (public)
	Name: FINGERS FC-SoundStorm
	Alias: FINGERS FC-SoundStorm
	Class: 0x00260404
	Icon: audio-headset
	Paired: yes
	Bonded: yes
	Trusted: yes
	Blocked: no
	Connected: yes
	LegacyPairing: no
	UUID: Headset
[...]

B. Überprüfen Sie den Systemd-Dienststatus

systemctl --user status bluetooth-music.service

Suche nach Fehlern im Output.

C. Überprüfen Sie die Protokolle auf detaillierte Fehler

journalctl --user -u bluetooth-music.service -n 50 --no-pager

Wenn Sie Cannot open display sehen, bestätigen Sie, dass DISPLAY=:0 in der Service-Datei gesetzt ist.

D. Überprüfen Sie den Pfad des Skripts in der Systemd-Konfiguration

Stellen Sie sicher, dass Sie den korrekten Pfad des Skripts bluetooth-music.sh in Ihrer systemd-Konfiguration definiert haben.

E. Starten Sie den Dienst nach Änderungen neu

systemctl --user restart bluetooth-music.service

Fazit

Mit dieser Einrichtung wird Ihr Musikplayer automatisch gestartet, wenn Sie Ihr Bluetooth-Gerät verbinden, und Sie haben die volle Kontrolle, ihn bei Bedarf zu stoppen. Diese Methode sorgt für ein reibungsloses Erlebnis unter Linux ohne unnötige Neustarts.

Wenn Sie diesen Leitfaden hilfreich fanden, teilen Sie ihn bitte mit anderen Linux-Benutzern!

Ausgewähltes Bild von LIN LONG von Pixabay.