Sonos Update to 3.7 and Linux

  • 21 March 2012
  • 72 replies
  • 56694 views


Show first post
This topic has been closed for further comments. You can use the search bar to find a similar topic, or create a new one by clicking Create Topic at the top of the page.

72 replies

Userlevel 2
ianmacd your post about getting v3.6 to work with upgraded firmware was great and allowed me to get the application to run under Wine (Fedora 14).

However, I can't make the initial connection to the system as part of the setup process.


I suspect you have some iptables firewall rules configured and that they are blocking the necesary traffic. What does the following command say?

code:
$ iptables -L


If that returns some rules, flush them and try again with Sonos.

I'm travelling at the moment and probably won't see your reply until 3rd June at the earliest.
Badge
You are probably right. The Linux box is running Amahi Server software which does use iptables for a lot of stuff. I am going to avoid messing with that aspect of things as I don't want to break the whole system. I'm not knowledgeable enough to do this correctly

Thanks anyway
Badge
OK so I have stopped the iptables from operating and still no joy on getting the Sonos controller to see the components. There are some notes on the website for port opening but they aren't working either
Userlevel 2
OK so I have stopped the iptables from operating and still no joy on getting the Sonos controller to see the components. There are some notes on the website for port opening but they aren't working either

You shouldn't need to forward any ports to get the DCR working on Linux.

Is your computer on the same subnet as the Sonos gear? That's essential.

And make sure you haven't just stopped iptables from being run in the future, but have also flushed any rules already in effect from the last time it was started.
Badge
That's what I thought regarding the port forwarding.

My linux box is also my DHCP and DNS server and it issues static IP addresses to all the Sonos components so I am assuming they are on the same subnet. I will have a dig about to see what I can find
Userlevel 4
Badge +3
I'm currently using Windows 7 but considering switching back to Linux because of some problems with Windows... but obviously I don't want problems with Sonos after the switch...

So, I'm using the 3.8 controller on Windows, what are the prospects of Wine being able to run that in the next 12 months?

If that fails, I might have to buy a CR200 for the room where my computer is (I want a dedicated, readily available controller, not one buried away on a smartphone), although paying around £300 not to run Windows is a bit annoying.

However, do Sonos intend to support the CR series going forward? My CR100 doesn't have much life in it, the CR200 is nice (after they replaced it following touch screen problems), but will they release a CR300 with slightly thinner body/bigger screen and/or will they support the CR200 with software updates for many years to come?

So many questions, but the changes brought about with the desktop controller make me nervous about Sonos making further changes that cause problems.

The new controller looks nice in my opinion, but doesn't really offer anything new, it just takes up more space.
The easiest solution would be to use an andriod/iOS device as the additional controller......
Userlevel 2
The easiest solution would be to use an andriod/iOS device as the additional controller......

As a Linux user, I must concur. The old-style DCR is crumbling with each new release of the firmware.

The DLL hack I wrote about still allows basic functionality, but the passing of music service credentials changed in 3.8, for example, so I can no longer control Spotify with the pre-3.7 DCR.

The ACR is the most usable controller I have these days.
Userlevel 2
My pleasure, but just to be clear, your firmware will stay at whichever version it's at now. Only the desktop controller will go back to 3.6.

The following assumes you're a Linux user, but the same trick would work on Windows for any user with an incentive to go back.

First of all, remove the 3.7 DCR from your system. Go through the proper uninstall procedure under WINE.

Next, reinstall 3.6. If you don't have the installation .exe still lying around, you can currently still obtain it from Sonos, but I strongly advise you to save a copy of this somewhere safe, as Sonos will probably remove it from their server at some point as obsolete.

Install the controller under WINE and associate it with your Sonos system. Then, exit the program.

Step 3 is to go to the following address in a Web browser:

code:
http://x.x.x.x:1400/status/VERSION


Replace x.x.x.x with the IP address of one of your zone players.

You'll see something like this:

code:
contents of /VERSION
xx.x-xxxxx


Whichever version number you see is unimportant. Just note it down. It's actually just the build number available under About My Sonos System on the controllers, but it appears here in punctuated form and we'll need that string for the next step.


Edit: If your version happens to have a letter following the final five digits, drop the letter. Thanks to MDBill.


Finally, pull up pcdcr.dll in a binary editor. Unless you're running an odd WINE configuration, it will have landed here on a 32 bit machine:

code:
~/.wine/drive_c/Program Files (x86)/Sonos/pcdcr.dll

or here on a 64 bit one:

code:
~/.wine/drive_c/Program Files (x86)/Sonos/pcdcr.dll

I use vim with the -b flag as my binary editor. Whichever tool you use doesn't matter, so long as it treats the file as a binary. All hell will break loose when you save this file if your editor treats the contents as text, so do make sure you are operating in binary mode.

Locate the string 16.7-48310 in this file and replace it with the version number returned in step 3 above. The two strings should be identical in length. Then, save the file. Did I mention that you must ensure you do this in binary mode? Good.

That's it!

Fire up the old desktop controller and it will now be fooled into thinking that it's up to date with the rest of the system. You won't be prompted to upgrade it, so neither will it baulk and refuse service.

It's a hack, but it works.

You will need to repeat the binary edit part of this procedure every time Sonos update the firmware to a new major revision number. At that point, the desktop controller will see that it lags behind the minimum required version number and prompt you to upgrade it. What we are doing here is defeating that check by convincing the desktop controller that it has the same version number as the firmware running on the rest of the system.

Hopefully, the day will soon come that the 3.7 DCR runs on Linux. Until then, there's this.

Thanks to Henkelis for the idea.


Ian,
I just read your instruction on how to keep desktop controller 3.6 working with upgraded Sonos devices.
I wonder if you have, or know of, a way to keep old iPod sonos app working with upgraded Sonos devices. I upgraded to 3.8, but my old iPod does not support iOS 4.0 needed for it.
Userlevel 2
Ian,
I just read your instruction on how to keep desktop controller 3.6 working with upgraded Sonos devices.
I wonder if you have, or know of, a way to keep old iPod sonos app working with upgraded Sonos devices. I upgraded to 3.8, but my old iPod does not support iOS 4.0 needed for it.


I don't know of a way, but that doesn't mean there isn't one. I'm not familiar enough with the details of Apple products.

Any solution would involve the same approach, namely subverting the version check when the application starts up. If you can find a way to do that, it may be possible.
Userlevel 2
Sonos.app keeps several .plist files.
In Info.plist there are a couple of fields:
Bundle version
Bundle version string

I thought modifying this file would have the desired effect of tricking Sonos to believe it has an up-to-date version. However, sonos.app must be getting its bundle version from somewhere else.

Does anyone know where that information may be stored in the case of an iPod application?
Userlevel 2
Thankyou Ian.

I was very happy to be able to control our new Sonos system on our linux home computer systems. We were stuck with using our cell phones which whilst it works fine isn't as convenient.if you are already working on the computer.

We have used Linux at home now for over 14 years. It is definitely not a cost issue for us ... as most of the computers we have bought over the years have already had windows on them anyhow ... which we then go to extra cost to remove and replace!

We just prefer the freedom of the Linux environment. Thanks again.

Cheers

Garry and Jacqui
Userlevel 2
Badge +1
thanks Ian for the dll hex edit and deeplink to the old 3.6 version.

the android client for Sonos is actually really nice and I appreciate that Sonos made the entire system setup possible from it... however it will be nice to have the desktop client available in wine also.
like for many others, installing an entire windows vm or buying a mac for 1 app is a no-go :)

cheers
Userlevel 2
THank you very much everyone for the great support on running Sonos on Linux! I used the pearl scrip to modify the .dll file and still no luck...here is my setup -

I am running ubuntu 12.10 and have installed the version 3.6 of Sonos controller under Wine.

Used the pearl script to modify version number in dll and was successful:

code:
System is currently running version 19.4-60120.
Updating DLL version 16.7-48310 to 19.4-60120...


Now when I open sonos for setup I have the screen to connect the component to the DCR and it does not connect. I am on the same network as other computers/cellphones that can connect. The only thing that is different is now v.19 is out and I hope the 3.6 software is compatible.

Any help on how to get my system connected to the DCR would be appreciated!
Hi,

Any idea of how to install Sonos Controller on a recently installed Linux (which does not have the controller 3.6 yet) ?


I installed Win7 in VirtualBox and then in Win7 the S O N O S Controller! Works OK so far!
Userlevel 2

code:
System is currently running version 19.4-60120.
Updating DLL version 16.7-48310 to 19.4-60120...


Now when I open sonos for setup I have the screen to connect the component to the DCR and it does not connect. I am on the same network as other computers/cellphones that can connect. The only thing that is different is now v.19 is out and I hope the 3.6 software is compatible.

Any help on how to get my system connected to the DCR would be appreciated!


Make sure you don't have any firewall rules (iptables) blocking traffic on the PC running WINE.

Version 19 should run fine for you, although you won't be able to use the DCR to control music services, because something changed a while back in the way the credentials are passed by Sonos and the DCR pre-dates the new way of doing things.
Userlevel 2
Make sure you don't have any firewall rules (iptables) blocking traffic on the PC running WINE.


I don't know what the issue with wine was but I uninstalled the package from ubuntu and added the backport to wine 1.5 and reinstalled. after that it worked great! Thanks
Userlevel 2
Badge
Dear All

Just stumbled across this. I have old Win XP machines that I use for midi and sequencing etc (P3 512 RAM) minimal software installed - Antivirus is the biggest killer of limited resources, so don't bother with that and these PCs don't do internet. When Sonos V3.7 came out and required Net 4 it almost killed them.
So after updating to Sonos 4.0 last night, I tried this and it works. I only want to add some music and pause, so didn't want to spend any money on controllers or other kit.
I am sure it won't take long for you guys to come up with your own controller for LINUX.

Regards and thanks

Brazza
Userlevel 4
Badge +14
Anybody tested to run the Android controller on linux?

http://www.ubuntuvibes.com/2012/11/how-to-run-3d-android-games-and-apps-in.html

Apparently there is a working Sonos app for Intel platform, which would be the preferred choice (instead of the ARM compiled one). One would need to extract that from an intel phone (RAZR perhaps), but requires root. Unless Sonos is kind enough to offer a direct download of the apk :)

Maybe that's a better option than trying to run an old version in Wine.
Userlevel 2
I don't know what the issue with wine was but I uninstalled the package from ubuntu and added the backport to wine 1.5 and reinstalled. after that it worked great! Thanks

Hello

I have encountered the same problem while installing Sonos. Could you elaborate on how you solved the non-detection of the devices?

Thanks a lot!
Userlevel 1
BTW I noticed this thread hasn't been updated, so I thought I would just update it in case anyone didn't notice that version 4.1 of the Sonos controller works pretty much perfectly with wine 1.6, provided that the dotnet40 package and the tahoma font are installed through winetricks.
Userlevel 2
Hi guys, first of all many many thanks to you all for this great thread!! I confirm what baroncelli said: 4.1 controller works great with wine 1.6!!
At first the application didn't start on my Ubuntu 12.04LTS, but I configure it following steps from a link I cannot insert in this post because it's my first message on the forum... 🙂 I'll post for sure in the next ones...
Now the controller starts and I can manage music and services from my Ubuntu pc!
The only problem I have is to share local folders on the Sonos network:
I go in Music Library Settings -> Add Folder -> Choose the right path -> Next
Sonos asked me to - add windows file and printer sharing to the windows firewall exception list; - set windows sleeping settings to never
I checked both than -> Next
The application crashed and in the terminal I read this phrase I cannot understand:
code:
err:ole:CoGetClassObject no class object {e2b3c97f-6ae1-41ac-817a-f6f92166d7dd} could be created for context 0x17
fixme:hnetcfg:fw_app_get_Enabled 0x843e498, 0x10bee444
fixme:shell:URL_ParseUrl failed to parse L"Sonos.Controller.Desktop"

Unhandled Exception: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> Sonos.Controller.Desktop.Utilities.BugsenseWrappedException: Rethrown exception. See innerexception for details. ---> System.NotImplementedException: The method or operation is not implemented.

I've also the output of wine: (it's much longer than this, I can post in a future post if someone think it could be usefull...)
code:
Unhandled exception: 0xe0434352 in 32-bit code (0x7b83bbd5).
Register dump:
CS:0023 SS:002b DS:002b ES:002b FS:0063 GS:006b
EIP:7b83bbd5 ESP:03b2db34 EBP:03b2dba8 EFLAGS:00000287( - -- I S - -P-C)
EAX:7b8267d5 EBX:7b8b4ff4 ECX:80131604 EDX:03b2db54
ESI:00000005 EDI:e0434352
Stack dump:
0x03b2db34: 03b2dc0c 00000014 03b2dbb0 e0434352
0x03b2db44: 00000001 00000000 7b83bbd5 00000005
0x03b2db54: 80131604 00000000 00000000 00000000
0x03b2db64: 79140000 00000059 00000000 03b2dc0c
0x03b2db74: 00cd24b0 02000059 03b2db8c 79150579
0x03b2db84: 03b2db94 02000059 03b2db98 7915bc5e
Backtrace:
=>0 0x7b83bbd5 in kernel32 (+0x2bbd5) (0x03b2dba8)
1 0x791cac08 in clr (+0x8ac07) (0x03b2dc40)
2 0x793b5e83 in clr (+0x275e82) (0x03b2dc60)
3 0x793b5eff in clr (+0x275efe) (0x03b2dc8c)
4 0x793b5f3d in clr (+0x275f3c) (0x03b2dcbc)
5 0x793b5f50 in clr (+0x275f4f) (0x03b2dcd0)
6 0x79445b9f in clr (+0x305b9e) (0x03b2de10)
7 0x7933b2a3 in clr (+0x1fb2a2) (0x03b2dfc0)
8 0x792cefc9 in clr (+0x18efc8) (0x03b2e190)
9 0x792cf122 in clr (+0x18f121) (0x03b2e258)
10 0x039f57ee (0x03b2e27c)
11 0x039f5729 (0x03b2e294)
12 0x039f56e3 (0x03b2e2b4)
13 0x039f53db (0x03b2e2d0)
14 0x039f530b (0x03b2e2ec)
15 0x039f520b (0x03b2e304)
16 0x791421db in clr (+0x21da) (0x03b2e314)
17 0x79164a2a in clr (+0x24a29) (0x03b2e390)
18 0x79164bcc in clr (+0x24bcb) (0x03b2e4d4)
19 0x79164c01 in clr (+0x24c00) (0x03b2e4f0)
20 0x792db512 in clr (+0x19b511) (0x03b2e6fc)
21 0x791f5c05 in clr (+0xb5c04) (0x03b2e710)
22 0x791f5c87 in clr (+0xb5c86) (0x03b2e7c0)
23 0x791f5d42 in clr (+0xb5d41) (0x03b2e820)
24 0x791f5dd9 in clr (+0xb5dd8) (0x03b2e844)
25 0x792db3e5 in clr (+0x19b3e4) (0x03b2e85c)
26 0x792db2e0 in clr (+0x19b2df) (0x03b2e8f4)
27 0x791f5a08 in clr (+0xb5a07) (0x03b2ea18)
28 0x7bc78e30 call_thread_func_wrapper+0xb() in ntdll (0x03b2ea28)
29 0x7bc7be3d call_thread_func+0x7c() in ntdll (0x03b2eaf8)
30 0x7bc78e0e RtlRaiseException+0x21() in ntdll (0x03b2eb18)
31 0x7bc820f9 in ntdll (+0x720f8) (0x03b2f368)
32 0xf75edd4c start_thread+0xcb() in libpthread.so.0 (0x03b2f468)
0x7b83bbd5: movl 0xfffffff0(%ebp),%ecx
Modules:
Module Address Debug info Name (162 modules)
PE 330000- 343000 Deferred sonos.controller.desktop.startupC:\Program Files\Sonos\Sonos.Controller.Desktop.Startup.Glue.dll
PE 400000- 40e000 Deferred sonos
ELF 5cd0000- 5eb9000 Deferred sonos.controller.desktop.sonosadC:\Program Files\Sonos\Sonos.Controller.Desktop.SonosAdm.Glue.dll

I'm sure it's not a problem concerning iptables:
code:
$ iptables -L

showed me no rules...
Reading this thread, before find the last post, I tried to install the 3.6 controller following the (thank you very much, it's great!!) procedure by ianmacd at #17. I installed the controller and I could manage radio and music, but at the same exact point as with the 41 controller the procedures stopped when I tried to add a share folder.
Does someone have any suggest?
Thank you very much in advance!
Userlevel 1
This does not work for me. Winetricks says .net 4
or higher is already installed. Installing Sonos under Wine 1.6 , Linux Mint 14 KDE 64 bit says .net 4 must be installed. I will just use my tablet and smart phones as Sonos refuses to support Linux.
I see no way to uninstall donet40 under wine.
Userlevel 2
This does not work for me. Winetricks says .net 4
or higher is already installed. Installing Sonos under Wine 1.6 , Linux Mint 14 KDE 64 bit says .net 4 must be installed

The application should work with Mint 14, you can search "sonos controller" in the search box of the wine official page, there are some pages of documentation, with the procedure to follow. (I'm sorry, as I wrote in the previous post, I can't show you the direct link)

The problem for me is the impossibility to add shared folders from ubuntu desktop (that I want to use as server)

I will just use my tablet and smart phones as Sonos refuses to support Linux.

It's fine to use Android app for that, and I don't want to control Sonos from Ubuntu. But I want to add the local music I store on the desktop. Does anybody know if there is a place where to define the paths of the folders without using the application?

Thank you!
Userlevel 2
Hi guys, I want to share with you the partial solution I found:
with the last update of Android controller App Sonos permit to streaming on the Sonos network the files stored in the Android device. So I configure my Ubuntu Desktop as SSH server (it's very easy, it's enough to install the components:
sudo apt-get install openssh-server openssh-client ssh )
and I mount the folders on Android through SSHFSAndroid App. Sonos sees the files as if they were local files on Android.
Bye!