Roon Extension: Roon Web Controller v1.2.0

(Mike Plugge) #122

Roon Web Controller v1.2.4 is now available.

New Features:

  • Added option for 4K cover images on the Now Playing screen. (Settings -> Use 4k Images)

Bugs Fixed

  • Fixed compatibility issue with older versions of IOS Safari.

Upgrade Notes
The package dependencies have been updated to the latest versions. It is recommended to perform an update.

On the Node.js server:

  1. Stop the extension
  2. Run git pull
  3. Run npm install
  4. Run npm update
  5. Start the extension node .

See the for complete list of changes

(Mike Plugge) #123

@streamy68 - with v1.2.4, you should be able go back to official. Thanks again for your bug report and testing!


1.2.4. works well here :+1:

(Mike Plugge) #125

Roon Web Controller is now listed on NPM!


Hi, i’m a Roon Web Controller big “fan” and i’m successfully using it on Mac and PC.
Congrats @Mike_Plugge !

I would like to setup PI + official 7" PI Touchscreen as an always on Roon control point.
This PI would be out of the audio path, only command and control.

I’ve installed HW (PI+Touchscreen) but now, for SW, i need some help to install and auto-run Chromium in kiosk mode and display web controller page (i’m using DietPi v159 on another setup).

Any hints or guide ?


(Wim) #127

Try RoPieee. Install and forget. Works flawlessly. :grinning:
Search here under Audio Products/Ropieee or go to


Thank you @seagull, i will try Ropiee.

But, also, i would like to use Roon Web Controller to browse my library with my touchscreen.
So interested in how manually install and configure Chromium kiosk mode auto-start with DietPi.

(Mike Plugge) #129

@volpone - thanks!

There aren’t any guides that I am aware of at this time. It is on my todo list to create one because that is exactly how I use the web controller. EDIT: I am working on one right now. I will put a draft on here for comments before I finalize it.

Quite a few folks use DietPi with Chromium running in kiosk mode, though. If I remember correctly, DietPi has an option to have Chromium start automatically at boot up.

(Wim) #130

RoPieee does not allow you to use Roon Web Controller on the RPi display. It shows album art, titles and simple controls for play / Pauze / previous and next track / radio and shuffle.

(Mike Plugge) #131

I have posted a draft walk through of the installation on Diet Pi here. This was created as I did the install on a Raspberry Pi 2. It should work with no changes on a Raspberry Pi 3. Once finalized, the instructions will work on the devices that I have on hand and can test: Raspberry Pi 2, Rapsberry Pi 3, Odroid C2, and Asus Tinkerboard.

For whatever reason, the mouse cursor still shows up (which it shouldn’t) when Chromium is full screen and there are a few other tweaks that I want to do as well. I am planning on going through these instructions again on a clean install of DietPi to make it as minimal as possible.

So while this is mostly complete and should work, it is still a draft.

(Mike Plugge) #132

Those instructions are created on the following assumptions:


  1. Install should be a minimal as possible

Server (if desired)

  1. The Node.js instance for Roon Web Controller starts on system boot
  2. The Node.js instance does NOT run as root!


  1. Chromium runs in full screen kiosk mode without a mouse cursor at system boot
  2. Chromium does NOT run as root!
  3. Chromium points to the server

Roon Bridge (if desired)

  1. The Roon Bridge software starts at system boot


Than you @Mike_Plugge , that’s exactly what i’m looking for. I will give it a try !

(Mike Plugge) #134

You are in luck, I just updated it with the final copy of the installation instructions! This is a bit simpler than the previous version and uses a lot fewer custom scripts.

This has now been tested on a Raspberry Pi 2 and a Raspberry Pi 3 with a Raspberry Pi touchscreen. Odroid C2 and Asus Tinkerboard testing will come soon.

(Robert Brace) #135

Mike, everything was going great on the node.js install until I got to here

Enable the unit file to start at boot time and start it immediately
systemctl enable --now roon-web-controller.service

And I got the message

root@DietPi:~# systemctl daemon-reload
root@DietPi:~# systemctl enable --now roon-web-controller.service
systemctl: unrecognized option ‘–now’

I was running dietpi latest version, not sure where to go now.



(Mike Plugge) #136

Weird… I wrote that while on DietPi…

Use this instead then:
systemctl enable roon-web-controller.service
systemctl start roon-web-controller.service

(Robert Brace) #137

Thanks Mike,

They worked, but the extension isn’t showing up, I suspect it is because I am running pihole on the same Pi so I’ll run up another in the next couple of days.

Sorry to use up your time.


(Mike Plugge) #138

No worries.

I have updated the documentation to say this instead:
systemctl enable roon-web-controller.service
systemctl start roon-web-controller.service


Hi Mike,
I’ve just followed your detailed install instructions / guide. I succeed with no issues (RPI3 + official 7" touchscreen / DietPi V159) for server and client install. Thank you.

Some remarks and questions regarding Web Controller (1.2.5) usage with touchscreen (Chromium kiosk mode, no RoonBridge installation on the device for SQ reasons, control and command only):

  • Screen seems blanked (black until touchscreen pressed again) after 1mn even if music is still playing. This is not optimal for a “now playing device”. Any possibility to disable screen blanking when playing ?
  • A clock would be fine on the blanked screen when device is idle, possible ?
  • How to set screen brightness ?``
  • How to get a screen keyboard to type in the “search” field in Library mode ?

Thank you and, again, congrats !

(Mike Plugge) #140

Thanks @volpone - great comments!

Completely understandable. I use my Raspberry Pi touch screen as a browser client only since I have the Node.js instance running on the same Virtual Machine as my Roon Server. In addition to the sound quality concerns, the fast ethernet connection tends to get overrun with Hi-Res files, too. The gigabit Ethernet connection on the Odroid C2 or the Asus Tinkerboard is one of many areas that these boards beat out the Raspberry Pi.

But since a lot of folks do want to use DietPi as a Roon endpoint, I wanted to make sure they were covered too.

I have not yet implemented this because it was not really a feature that I wanted. The trend over the last few years on desktop systems has been to allow the screen to go to power save mode.

Doing some searches on how to do it and it seems like disabling power save mode in a web browser is possible… Let me do some more research and if I can implement it, I will add it as an optional configuration item in settings.

In the mean time, you can make the timeout longer than a minute if you wish, though. In the User Configuration section, the line that says xset dpms 60 60 60 & is what sets the 1 minute time out. The values are in seconds. You can set it to never turn off the display by using xset -dpms & instead.

Theoretically this could be done with something like XScreensaver. But once again, the trend over the last few years on desktop systems has been phasing out screen savers and instead letting the monitor go into power save mode. As a result, many screen savers are no longer actively developed.

Perhaps another way would be to turn off the power saving mode entirely and put a clock in the “Not Playing” section of the app. But I would still need to preserve a way to switch zones and a clock may not look right on a full desktop or in portrait mode.

This one is really in the weeds. And as you may have noticed, there is not an option for this in the “Display Options” program. Since the guide I wrote was intended to be as entry level as possible, I intentionally left out the section on screen brightness. After reading the following, do you think I should add it?

In a nutshell, setting the screen brightness on the Raspberry Pi with a Raspberry Pi touchscreen is possible via a pseudo file under the /sys pseudo file system. To see the current brightness setting, run:
cat /sys/class/backlight/rpi_backlight/brightness
where “0” is off (0%) and “255” is as bright as possible (100%).

Other displays use other locations so these instructions will not work on different displays.

You can set the brightness to a different value by switching to the root user and using a command like:
echo 128 > /sys/class/backlight/rpi_backlight/brightness
This will set the screen brightness to 50%.

But that may or may not stay set after a reboot.

If it does not stay set, you can create a file under /etc/tmpfiles.d to set it for you at boot time. Once you determine which brightness you want (128 in this example):
nano /etc/tmpfiles.d/rpi_backlight.conf
With the contents:

w /sys/class/backlight/rpi_backlight/brightness - - - - 128

Then save and exit.

The recommended way is to use a Chrome extension like this.

Unfortunately, this is very inconsistent right now because the app uses iFrames. One of the road map items for a future release is to stop using iFrames so that the linked extension works correctly.


Thank’s Mike for your quick and useful insights.

Brightness: OK to setup brightness via editing rpi_backlight.conf. Perfect !

Screen Blanking I agree with your point about “green” behavior. However, for my use case i would appreciate blanking disabled when audio is playing. No change needed from the current mechanism when no playing (OK to setup timeout delay via .xsession).

Virtual keyboard I will try via Chrome extension. I understand iFrames issue.

Library Browsing My feeling is that library browsing part of your app is less robust than “now playing” command and control. Sometimes touchscreen seems unresponsive. I will test and give you more context to reproduce.