Vorige: NGINX mit Lua konfigurieren, Nach oben: Systemkonfiguration [Inhalt][Index]
Bei MPD, dem Music Player Daemon, handelt es sich um eine vielseitige Server-Anwendung, mit der Sie Musik spielen lassen. Client-Programme an verschiedenen Maschinen im Netzwerk – einem Mobiltelefon, Laptop oder einer Desktop-Workstation – können sich damit verbinden und die Wiedergabe der Tondateien steuern, die Ihre eigene Musiksammung enthalten. MPD dekodiert die Tondateien und spielt sie auf einer oder mehreren Ausgaben ab.
MPD ist so voreingestellt, dass auf dem Standardtonausgabegerät abgespielt wird. Im folgenden Beispiel legen wir eine interessantere Architektur fest: einen Musik-Server, der ohne Bildschirm betrieben werden kann. Eine grafische Oberfläche fehlt, ein Pulseaudio-Daemon ist auch nicht da und es gibt keine lokale Tonausgabe. Stattdessen richten wir MPD für zwei Ausgaben ein: zum einen ein Bluetooth-Lautsprecher, zum anderen ein Web-Server, der Audio an Mediaplayer streamen kann.
Bluetooth einzurichten, ist oft eher frustrierend. Sie müssen Ihr
Bluetooth-Gerät koppeln und dabei beachten, dass zum Gerät automatisch eine
Verbindung aufgebaut sein soll, sobald es an ist. Das können Sie mit dem
Bluetooth-Systemdienst umsetzen, der von der Prozedur
bluetooth-service
geliefert wird.
Rekonfigurieren Sie Ihr System mit mindestens den folgenden Diensten und Paketen:
(operating-system
;; …
(packages (cons* bluez bluez-alsa
%base-packages))
(services
;; …
(dbus-service #:services (list bluez-alsa))
(bluetooth-service #:auto-enable? #t)))
Starten Sie den bluetooth
-Dienst und benutzen Sie dann
bluetoothctl
, um einen Scan nach Bluetooth-Geräten
durchzuführen. Versuchen Sie, Ihren Bluetooth-Lautsprecher unter dem
schwedischen Büfett aus anderen Smart-Home-Gerätschaften Ihrer Nachbarn
auszumachen, und merken Sie sich dessen Device-ID in der angezeigten
Liste. Das einmal zu machen, genügt:
$ bluetoothctl [NEW] Controller 00:11:22:33:95:7F BlueZ 5.40 [default] [bluetooth]# power on [bluetooth]# Changing power on succeeded [bluetooth]# agent on [bluetooth]# Agent registered [bluetooth]# default-agent [bluetooth]# Default agent request successful [bluetooth]# scan on [bluetooth]# Discovery started [CHG] Controller 00:11:22:33:95:7F Discovering: yes [NEW] Device AA:BB:CC:A4:AA:CD My Bluetooth Speaker [NEW] Device 44:44:FF:2A:20:DC My Neighbor's TV … [bluetooth]# pair AA:BB:CC:A4:AA:CD Attempting to pair with AA:BB:CC:A4:AA:CD [CHG] Device AA:BB:CC:A4:AA:CD Connected: yes [Mein Bluetooth-Lautsprecher]# [CHG] Device AA:BB:CC:A4:AA:CD UUIDs: 0000110b-0000-1000-8000-00xxxxxxxxxx [CHG] Device AA:BB:CC:A4:AA:CD UUIDs: 0000110c-0000-1000-8000-00xxxxxxxxxx [CHG] Device AA:BB:CC:A4:AA:CD UUIDs: 0000110e-0000-1000-8000-00xxxxxxxxxx [CHG] Device AA:BB:CC:A4:AA:CD Paired: yes Pairing successful [CHG] Device AA:BB:CC:A4:AA:CD Connected: no [bluetooth]# [bluetooth]# trust AA:BB:CC:A4:AA:CD [bluetooth]# [CHG] Device AA:BB:CC:A4:AA:CD Trusted: yes Changing AA:BB:CC:A4:AA:CD trust succeeded [bluetooth]# [bluetooth]# connect AA:BB:CC:A4:AA:CD Attempting to connect to AA:BB:CC:A4:AA:CD [bluetooth]# [CHG] Device AA:BB:CC:A4:AA:CD RSSI: -63 [CHG] Device AA:BB:CC:A4:AA:CD Connected: yes Connection successful [My Bluetooth Speaker]# scan off [CHG] Device AA:BB:CC:A4:AA:CD RSSI is nil Discovery stopped [CHG] Controller 00:11:22:33:95:7F Discovering: no
Wir gratulieren: Sie bekommen jetzt eine automatische Verbindung zu Ihrem Bluetooth-Speaker!
Es wird Zeit, ALSA einzurichten. Dabei müssen Sie es anweisen, das
Bluetooth-Modul bluealsa zu verwenden, so dass Sie ein ALSA-pcm-Gerät
definieren können, das Ihrem Bluetooth-Lautsprecher entspricht. Wenn Ihr
Server keine Bedienelemente haben soll, ist es einfacher, wenn Sie
bluealsa mit einem festen Bluetooth-Gerät verbinden lassen, statt mit
Pulseaudio ein Umschalten der Streams einzurichten. ALSA einzurichten, geht
so: Wir schreiben eine passende alsa-configuration
für den
alsa-service-type
. In der Konfiguration deklarieren Sie den
pcm
-Typ bluealsa
aus dem Modul bluealsa
des Pakets
bluez-alsa
. Für diesen Typ definieren Sie dann ein pcm
-Gerät
für Ihren Bluetooth-Lautsprecher.
Was bleibt, ist, MPD die Audiodaten an dieses ALSA-Gerät schicken zu lassen. Zusätzlich fügen wir eine zweite MPD-Ausgabe hinzu, womit die aktuell abgespielten Tondateien auch als Stream über einen Web-Server auf Port 8080 dargeboten werden. Es ermöglicht, dass man mit anderen Geräten im Netzwerk einen tauglichen Mediaplayer die Daten vom HTTP-Server, auf Port 8080, abspielen lässt, egal ob der Bluetooth-Lautsprecher läuft.
Es folgt ein Umriss, wie eine Betriebssystemdeklaration aussehen kann, die die oben genannten Aufgaben erfüllen dürfte:
(use-modules (gnu)) (use-service-modules audio dbus sound #;… etc) (use-package-modules audio linux #;… etc) (operating-system ;; … (packages (cons* bluez bluez-alsa %base-packages)) (services ;; … (service mpd-service-type (mpd-configuration (user "ihr-benutzername") (music-dir "/pfad/zu/ihrer/musik") (address "192.168.178.20") (outputs (list (mpd-output (type "alsa") (name "MPD") (extra-options ;; Der Name muss derselbe sein wie in der ;; ALSA-Konfiguration unten. '((device . "pcm.btspeaker")))) (mpd-output (type "httpd") (name "streaming") (enabled? #false) (always-on? #true) (tags? #true) (mixer-type 'null) (extra-options '((encoder . "vorbis") (port . "8080") (bind-to-address . "192.168.178.20") (max-clients . "0") ;keine Begrenzung (quality . "5.0") (format . "44100:16:1")))))))) (dbus-service #:services (list bluez-alsa)) (bluetooth-service #:auto-enable? #t) (service alsa-service-type (alsa-configuration (pulseaudio? #false) ;brauchen wir nicht (extra-options #~(string-append "\ # Bluetooth-Audiogerätetyp \"bluealsa\" aus dem bluealsa-Modul deklarieren pcm_type.bluealsa { lib \"" #$(file-append bluez-alsa "/lib/alsa-lib/libasound_module_pcm_bluealsa.so") "\" } # Control device type \"bluealsa\" aus demselben Modul deklarieren ctl_type.bluealsa { lib \"" #$(file-append bluez-alsa "/lib/alsa-lib/libasound_module_ctl_bluealsa.so") "\" } # Das eigentliche Bluetooth-Audiogerät definieren. pcm.btspeaker { type bluealsa device \"AA:BB:CC:A4:AA:CD\" # Unique Device Identifier profile \"a2dp\" } # Einen zugehörigen Controller definieren. ctl.btspeaker { type bluealsa } "))))))
Genießen Sie nun, wie die Musik aus dem MPD-Client Ihrer Wahl erschallt, oder einem Mediaplayer, der über HTTP streamen kann!
Vorige: NGINX mit Lua konfigurieren, Nach oben: Systemkonfiguration [Inhalt][Index]