Sonos OS 6.3

Auch Sonos OS 6.3 läßt sich weiterhin unter Linux steuern. Der Funktionsumfang des Controllers ist inzwischen aber arg eingeschränkt, Musikdienste und Radiosender können nicht mehr ausgewählt werden. Lautstärkeregelung und Starten/Stoppen der Wiedergabe funktionieren noch.

Seit OS-Version ist die Minor-Version (das x in 32.x) zweistellig, sodass die vollständige Versionsnummer nicht mehr in an Stelle der alten gepatcht werden kann. Glücklicherweise scheint die Windows-Applikation nur Major und Minor-Version zu berücksichtigen, die Build-Nummer ist egal.

Daher kann die letzte Stelle einfach weggelassen werden. Aus dem Versionsstring „32.11-30071“ wird „32.11-3007“.

Die komplette Anleitung von 2013 gibt’s nach wie vor.

Sonos OS 6.0

Die kürzlich erschienene Sonos OS Version 6.0 unterstützt jetzt u.a. Apple Music. Allerdings bedarf es eines neuen Patchs der Controller-Software, damit diese weiterhin unter Linux benutzt werden kann. Die vollständige Anleitung gibt’s im Posting von 2013, die neue Versionsnummer lautet „31.3-22220“.

Sonos Controller mit OS 5.2 unter Ubuntu

Alle Jahre wieder… nach einem Sonos-OS-Update für die ZonePlayer möchte der Controller unter Linux nicht mehr zusammenarbeiten:

Sonos OS 5.2 unter Ubuntu

Aktuell ist jetzt OS-Version 5.2. Das Patchen der Versionsnummer in der Controller-Software funktioniert weiterhin. Eine detaillierte Anleitung dazu habe ich 2013 veröffentlicht, es muss lediglich die Versionsnummer auf „28.1-83040“ geändert werden.

Neue Sonos-App, neues OS 5.0, alter Controller unter Ubuntu

Sonos hat kürzlich eine überarbeitete Version der Controller-Apps für Android und iOS veröffentlicht. Das Update ist hübsch geworden, aber es war auch bitter nötig: Der alten Version merkte man ihr Alter deutlich an.

Daneben gab es auch eine neue OS-Version 5.0 für die Zone Player. Die letztes Jahr vorgestellte Vorgehensweise, um die Windows-Version der Controllersoftware unter Ubuntu zur Kooperation zu bewegen, funktioniert auch weiterhin. Der aktuelle Versionsstring lautet „26.1-76230“, sonst ändert sich nichts.

Paket-Cache für Debian & Ubuntu

Bei mir sammelt sich so langsam ein ganzer Zoo an Linux-Maschinen (physikalisch als auch virtualisiert) an. Dabei handelt es sich überwiegend um Ubuntu- und Debian-Systeme. Um ein bisschen Bandbreite beim alltäglichen apt-get update && apt-get dist-upgrade zu sparen, lohnt sich die Installation eines Paket-Caches. Apt-Cacher NG ist so ein praktisches Stück Software. Es arbeitet als http-Proxy und muss im Gegensatz zu debmirror, apt-mirror und Konsorten nicht erst einmal 80 GB pro Distribution und Architektur runterladen.

Die Installation erfolgt über:

sudo apt-get install apt-cacher-ng

Danach ist die Konfigurationsdatei /etc/apt-cacher-ng/acng.conf anzupassen. Ich habe lediglich den Speicherort auf ein NFS-Share umgebogen, da die VM nur über wenig Plattenplatz verfügt. Damit der Dienst beim Systemstart nicht startet, bevor das NFS-Share gemountet wurde, habe ich noch das Startskript angepasst und do_start erweitert:

# wait for nfs mount
while ! mountpoint -q /apt-cache; do
   sleep 5
done

Damit ein Client den Cache auch nutzt, muss man jeweils apt mitteilen, einen http-Proxy zu benutzen. Dazu habe ich eine neue Datei unter /etc/apt/apt.conf.d/ angelegt:

Acquire::http::Proxy "http://mein-apt-cache:3142";

Status und Effizienz des Caches kann man über eine Webseite abfragen:

http://mein-apt-cache:3142/acng-report.html

Siehe auch Create a Local Ubuntu Repository using Apt-Mirror and Apt-Cacher.

Aktuelles Sonos-System mit Sonos-Controller 3.6.1 unter Linux steuern

Vor einiger Zeit hatte ich schon etwas zum Einsatz des Sonos-Controllers unter Linux mithilfe von WINE geschrieben. Zufälligerweise war das die letzte Version, die unter WINE funktioniert hat, Version 3.7 und später laufen leider nicht mehr.

Das wäre halb so schlimm, gäbe es die automatische Update-Routine nicht. Diese prüft beim Start des Controllers, welche Version auf den lokalen Zone Playern installiert ist, und fordert ggf. zum Upgrade auf. Lehnt man dies ab, so verweigert der Controller den Dienst. Hmpf.

Nun bin ich heute über einen Beitrag bei cratoo.de gestolpert. Dort wird u.a. auf ein Posting im Sonos-Forum verwiesen, welches beschreibt, wie man den alten Controller dazu „überredet“, mit einer neueren Sonos-Version zusammenzuarbeiten. Es muss nur eine DLL gepatcht werden, sodass die hinterlegte Version mit der des Zone Players übereinstimmt. Die dort beschriebene Vorgehensweise habe ich heute ausprobiert, sie funktioniert auch noch mit Sonos-Version 4.2.

Hier nun meine Interpretation des Rezepts. Man nehme:

  • Sonos Controller für Windows in Version 3.6.1 – den gibt’s direkt bei Sonos, aber es schadet nicht, sich davon eine Sicherheitskopie anzufertigen. Wer weiss, wie lange Sonos diesen noch anbietet…
  • Die aktuelle Versionsnummer des lokalen Zone Players, zu finden z.B. über dessen Web-Interface: http://x.x.x.x:1400/status/VERSION, wobei x.x.x.x durch die IP-Adresse des ZP zu ersetzen ist.
    Die IP-Adresse findet man z.B. über den DHCP-Server (in meinem Fall eine Fritz!Box) oder über die Controller-App (Einstellungen > Über das Sonos-System) heraus, nmap -p1400 <lokales Netzwerk> geht selbstverständlich auch.
    In meinem Fall lautet die Versionsnummer „24.0-69180“, eventuell vorhandene Buchstaben am Ende ignoriert man.
  • WINE in einer halbwegs aktuellen Version; ich nutze Ubuntu 12.04.3 x86_64, die dort mitgelieferte Version wine-1.4 funktioniert.

Den Sonos Controller installiert man wie gewohnt und verbindet ihn mit dem lokalen Zone Player. Nun wird er nach einem Update verlangen, dies lehnt man ab und beendet die Anwendung.

Jetzt ist die Datei pcdcr.dll ist zu lokalisieren, bei mir befindet sie sich unter ~/.wine/drive_c/Programme/Sonos. Wer möchte macht davon zuerst eine Sicherheitskopie, anschließend geht’s an’s Patchen!

In der Datei ist der Text „16.7-48310“ durch die weiter oben identifizierte Versionsnummer zu ersetzen. Mit sed geht dies beispielsweise so:

sed -bi "s/16\.7-48310/24.0-69180/" ~/.wine/drive_c/Programme/Sonos/pcdcr.dll

Anschließend kann der Controller wieder gestartet werden, er sollte nun nicht mehr nach einem Update suchen und einfach funktionieren. Das Ergebnis schaut so aus:

Sonos Controller 3.6.1 mit Sonos-Version 4.2

Sollte Sonos wieder einmal ein Update verteilen, so muss man nur die neue Versionsnummer herausfinden und die DLL erneut patchen.

Viel Vergnügen beim Nachkochen!

Update 16. Mai 2014: Der Trick funktioniert auch mit der neuen Softwareversion 5.0, der Versionsstring lautet „26.1-76230“.

Update 7. März 2015: Auch mit der Softwareversion 5.2 funktioniert’s so weiterhin. Der Versionsstring lautet „28.1-83040“.

Update 13. Juli 2015: OS-Version 5.4 ist raus, der passende Versionsstring lautet „29.5-91030“.

Update 1. Januar 2016: Die kürzlich erschienene OS-Version 6.0 funktioniert weiterhin wie beschrieben, der passende Versionsstring lautet „31.3-22220“.

Update 19. August 2016: Bei OS-Version 6.3 lautet der Versionsstring „32.11-30071“. Aufgrund der jetzt zweistelligen Minor-Version muss man das letzte Zeichen weglassen, damit das Patchen weiter funktioniert, d.h. „32.11-3007“. Der Teil nach dem Bindestrich scheint nicht relevant zu sein.