Roon Extension: Roon Web Controller v1.2.0

Hi @Mike_Plugge,
i still have the issue with the “buttons” in the library browser which are clickable, but do do not “fire” an action. Last setup was a DietPi Setup, now i tried a new setup from scratch with Rasbian Lite and I installed everything manuall.

The problem only occurs, if i use the locally installed chromium browser on the RPI3 with a local 7" RPI-touchdisplay. If I use a remote web browser (Windows 10 Firefox edition) connecting to that RPI-machine, everything is working as expected and i can select albums, titles, internet radios from the web controlled zone.

So the problem occurs only on the local chromium browser - is this possible?

Any ideas?


It is entirely possible that it is a problem with the locally installed browser. It certainly sounds like it.

Do you run into issues when you use a mouse? To see the mouse cursor, remove the -nocursor from the xinit line in step 3 of this section of the documentation:

What version of Chromium is installed? To see the full Chromium menus, disable kiosk mode by removing --kiosk from the /root/ file in step 7 of the system configuration section at the above link.

For what it is worth, I almost exclusively use Chromium and this software works as far back as version 58. Possibly even older.

the installed version of chromium is 65.0.3325.181

That should be supported browser.

Have you tried it with a mouse?

Last few days I’ve need to re-enable the extension (1.2.9) every morning.

works fine after enabling

Hi @Derek_Wyman,

Guess you are using the Extension Manager. It had a bug that caused the problem you described.

Please update the Extension Manager to version 0.9.2 and let me know if it solves the problem.

thanks, Jan

I was showing v0.9.2 but I went ahead and updated it.

So far so good

If it was already updated to v0.9.2 then it probably needed one Web Controller update to restore a critical file. If you manually update the Web Controller now does it remain enabled?

Hello Mike,
thank you for your work. it `s working fine, but i have a few questions

i am using the Webcontroller via a Dietpi. i Followed the wiki and got the chromium running in kiosk mode.
right now the kioskmode starts http://localhost:8080 is it possible to pass that url the zone that i want to choose ?
I saw that i can configure a screentimout to be enabled while playing. everytime i reboot the client, the settings are gone. is there a configfile or something like that ?
and my last question :slight_smile: can i get the screen back on without touching it ?

kind regards

Short answer: No

Long answer:
The zone selection is stored in a cookie so that your browser will default to the last selected zone. But there is no way to specify a zone with the URL.

The display name is not used as a unique identifier in the software because of the possibility of duplication and that spaces in display names can be a pain to work with in a URL. That friendly display name is completely meaningless to the software - it is only displayed for user convenience.

The unique identifier for most things in the Roon api is the zone id. The zone selection buttons in the software show the friendly display name, but set the zone by zone id. The zone id is a unique 36 character hexadecimal number that is generated by the Roon core. And the zone id can change if zones get grouped and un-grouped. As an example, this is one of the zone ids for one of my systems:
As you can see, that is not exactly easy to remember.

The only exception is the output id which is used with the volume controls. And that is a different 36 character hexadecimal number which looks very similar to a zone id.

I think you are asking about the amount of time until the screen goes blank if there is no activity. If so, then in the system configuration section of the document here, step 7 is the file. There is a line that says:
xset dpms 60 60 60 &

That is where you would change the time out. The numbers are in seconds. The first number is standby, the second is suspend, the third is off. You can change the 60 to any number of seconds that you choose and this should survive a reboot. If you change this line, make sure that the & is at the end or the script will hang and the browser wont start.

Any input event will wake up the screen. A keyboard press, a mouse movement, or a touch event are all input events that will wake up the screen. The most common for most people would be a touch event since most people do not have a keyboard or mouse attached.

Theoretically you can hook buttons to the GPIO pins on the Raspberry Pi and program a piece of software to convert a GPIO event to an input event. Another option would be to use LIRC to convert IR events to input events. But both of these options are WAY beyond the scope of this software.

Hi Mike,

thank you for your long answer. You said that the Browser is automatically use the last zone. i think my installation of chroium in kiosk mode maybe has problems to save cookies.

-Thats should be the same case as my question with the timeout while playing. the broswer forget everything i set when the system is booting.

  • i use now a flirc usb dongle to get the screen back on :slight_smile: thank you for your tip
    klind regards

Diet Pi does some “interesting” things with user profiles that I find incredibly frustrating when coming from another more standards compliant distro of Linux. It is entirely possible that you are not doing anything wrong and that the problem is Diet Pi resetting the profile…

This would explain why the last selected zone and the “disable screensaver while playing” option is not being preserved since both of those are settings that are saved in the cookie…

Unfortunately, I will not be able to test this out for at least a month or so. I am packing to get ready to move at the end of this month, and all of my Pis are already packed away…

1 Like

Sorry guys but how do I install this? My RoonCore is running on a Mac Mini and I want to use the Web client roon player on an older iPad1 (iOS9). The github wiki installation talks in riddles.

Hi Mike,
thank you for the analysis. i think i find my way with the user profile. i din`t know that dietpi behaves this way
kind regards


The wiki page is specific to Diet Pi, a distribution of Linux.

Since you are running Mac OS, you can install the Roon Extension Manager and use it to install the Web Controller on your core. After that, Web Controller is a web page that you open in a browser.

Note that this web app uses CSS and JavaScript that may not work on Safari older than IOS 9. And if memory serves, the original iPad is maxed at IOS 6, which will not work with this web app.

Thanks Mike, I managed to get things going after about 60 minutes of fiddling with getting homebrew, nodejs and git installed. I now have web controller working as an extension on my RoonCore. I had a quick play around with the web client and when I went via library, found an album and hit play music did not play. I will try some more tonight and make sure its not related to the iPad (FYI my Ipad is definitely running iOS9 so it might be a more recent model)

The library and the now playing screen are actually different html pages. This is a huge point of frustration for me and will be corrected as part of a complete rewrite later this year.

The library will read the cookie to get the selected zone, but only on the initial page load.

In other words, even after you select a zone on the now playing screen, you may also need to select a zone on the library page. There are three icons at the top left. If the text beside those icons says “zoneList”, then the library does not have a selected zone. Tap the word “zoneList” to get the zone selection dialog.

After that, the album play should work.

And yes, that is annoying - it bugs me too. The next major release of this will most likely be based on Vue.js which has MUCH better cross page state tracking. I have a working prototype already, but it is no where near release ready. The main challenge is gutting out all of the jquery dependencies so that I can drop jquery completely.

1 Like

Thanks again Mike, by deleting my unnecessary extra zone I was able to get it working. The only other issue was that node crashed out today while I was at work. See output.

-> CONTINUE 1 Changed {“message”:“Started: roon-web-controller”,“is_error”:false}

-> CONTINUE 1 Changed {“message”:“Started: roon-web-controller”,“is_error”:false}

-> CONTINUE 1 Changed {“message”:“Started: roon-web-controller”,“is_error”:false}

It’s update time!

2019-03-13T15:00:02.949Z - Inf: Terminating: roon-extension-repository…

-> CONTINUE 1 Changed {“message”:“Terminating: roon-extension-repository…”,“is_error”:false}

2019-03-13T15:00:02.951Z - Inf: Updating: roon-extension-repository…

-> CONTINUE 1 Changed {“message”:“Updating: roon-extension-repository…”,“is_error”:false}


404: Not Found

2019-03-13T15:00:11.393Z - Inf: Updated: roon-extension-repository (0.2.2)

-> CONTINUE 1 Changed {“message”:“Updated: roon-extension-repository (0.2.2)”,“is_error”:false}

2019-03-13T15:00:11.398Z - Inf: Terminating: roon-web-controller…

-> CONTINUE 1 Changed {“message”:“Terminating: roon-web-controller…”,“is_error”:false}


2019-03-13T15:00:11.400Z - Inf: Extension Repository loaded

-> CONTINUE 1 Changed {“message”:“Extension Repository loaded”,“is_error”:false}

2019-03-13T15:00:11.416Z - Inf: Terminated: roon-web-controller (SIGTERM)

-> CONTINUE 1 Changed {“message”:“Terminated: roon-web-controller (SIGTERM)”,“is_error”:false}

2019-03-13T15:00:11.417Z - Inf: Updating: roon-web-controller…

-> CONTINUE 1 Changed {“message”:“Updating: roon-web-controller…”,“is_error”:false}

-> CONTINUE 1 Changed {“message”:“Updating: roon-web-controller…”,“is_error”:false}


2019-03-13T15:00:41.916Z - Inf: Updated: roon-web-controller (1.2.9)

-> CONTINUE 1 Changed {“message”:“Updated: roon-web-controller (1.2.9)”,“is_error”:false}

2019-03-13T15:00:41.919Z - Inf: Terminating: roon-extension-manager…

-> CONTINUE 1 Changed {“message”:“Terminating: roon-extension-manager…”,“is_error”:false}

<<<crashed out, restarted >>>>>

RoonCore:roon-extension-manager roon$ node .

{ ‘roon-extension-manager’: ‘0.9.5’,

‘roon-extension-repository’: ‘0.2.2’,

‘roon-web-controller’: ‘1.2.9’ }

Docker not found

2019-03-14T08:42:16.603Z - Inf: Roon Extension Manager started!

And is there a way to get it to show album/artist art on the artist/album pages? Its a bit plain at the moment by default at least. Thanks.

Those look like messages from the extension manager… you may want to use extension manager to remove the Web Controller then reinstall it.

@Jan_Koudijs - ideas?