My Perfect Roon Core/Bridge

Great write up thank you. I have the screen working great on an old laptop “Lenovo Y70-70 with 16gig ram” which also is my roon core.
I have one question. Is it possible to remove the roon logo when the display is disabled on the webpage, or to get even more funky, display a plain black web page when music is paused and re-activate it once the music has started again?

I have no idea (I do not see how that could be done as this is sent by the roon server so you’d need to tweak the server itself… Or you’d need a plugin that changes the browser url depending on whether music is currently played or not) and I love the roon logo! :wink:

Yeah I do love the logo myself. To be honest its just to prevent screen burn on the screen when roon is sitting idle. But I am especially proud how it is all starting to come together. :grinning:


More of my “in progress” work here

Phenomenal minimal ubuntu server write-up that should prove useful for a variety of systems and use cases. I’m running RoonServer in a ubuntu server 20.04 VM with a passed-through AMD 7770 GPU on unRAID. For archival sake, here are the additions that suited my use case.

Additional Packages

I needed drivers for my video card plus alsa-utils as the GPU was muted by default. I also appreciated @florib’s suggestion of unclutter
sudo apt install --no-install-recommends xserver-xorg-video-ati alsa-utils unclutter

Delay Roon Display

I had an issue with RoonServer not recognizing the local Roon display as qutebrowser was opening before RoonServer was loaded. Adding a 30 second delay before launching qutebrowser solved that issue.
/opt/roonkiosk.sh

#!/bin/bash
xset -dpms
xset s off
openbox-session &
sleep 30s
qutebrowser --override-restore :fullscreen

Qutebrowser Quickstart Supression

@Zulu’s solution, which prevents qutebrowser from opening the quickstart page at launch, can be accomplished by first creating the necessary directory
sudo mkdir -p /home/roon/.local/share/qutebrowser

Then create the file /home/roon/.local/share/qutebrowser/state with the following contents

[general]
quickstart-done = 1

Finally, set the proper permissions
sudo chown -R roon:roon /home/roon/.local

Remove cloud-init

By default, ubuntu server 20.04 installs cloud-init. It can be removed by removing it’s datasource
echo 'datasource_list: [ None ]' | sudo -s tee /etc/cloud/cloud.cfg.d/90_dpkg.cfg

Uninstalling all it’s packages
sudo apt-get purge cloud-init

Deleting all it’s configuration files
sudo rm -rf /etc/cloud/; sudo rm -rf /var/lib/cloud/

Finally, removing open-iscsi as the iSCSI daemon will wait indefinitely and hang the boot process if it’s not removed when cloud-init is removed
sudo apt remove open-iscsi

Deep Harmony

Additionally, I am a Harmony Hub user and found the Deep Harmony Extension to be quite useful. I installed it via docker-compose on my server.

  deepharmony:      
    image: khazul/roon-extension-deep-harmony                                            
    container_name: deepharmony                                                 
    restart: always                                            
    network_mode: host                                       
    environment:
      PGID: 100                                                                           
      PUID: 99
      TZ: America/New_York
4 Likes

If you are experiencing problem with your display after upgrading to 1.8, check your display URL: it seems that IP port moved from 9100 to 9330.

Updated /home/roon/.config/qutebrowser/config.py content:

# QuteBrowser Config file for Kiosk mode

## Hide the statusbar unless a message is shown.
## Type: Bool
c.statusbar.hide = True

## When to show the tab bar.
## Type: String
## Valid values:
##   - always: Always show the tab bar.
##   - never: Always hide the tab bar.
##   - multiple: Hide the tab bar if only one tab is open.
##   - switching: Show the tab bar when switching tabs.
c.tabs.show = 'multiple'

## Page to open if :open -t/-b/-w is used without URL. Use `about:blank`
## for a blank page.
## Type: FuzzyUrl
c.url.default_page = 'http://127.0.0.1:9330/display'

## Page(s) to open at the start.
## Type: List of FuzzyUrl, or FuzzyUrl
c.url.start_pages = ['http://127.0.0.1:9330/display']

## Always restore open sites when qutebrowser is reopened.
## Type: Bool
c.auto_save.session = False

QuteBrowser parameters were updated:

statusbar.hide has been renamed to statusbar.show with the possible values being always (hide = False), never (hide = True) or in-mode

So you need to update /home/roon/.config/qutebrowser/config.py to:

# QuteBrowser Config file for Kiosk mode

config.load_autoconfig(False)

## Hide the statusbar unless a message is shown.
## Type: Bool
#c.statusbar.hide = True
c.statusbar.show = 'never'


## When to show the tab bar.
## Type: String
## Valid values:
##   - always: Always show the tab bar.
##   - never: Always hide the tab bar.
##   - multiple: Hide the tab bar if only one tab is open.
##   - switching: Show the tab bar when switching tabs.
c.tabs.show = 'multiple'

## Page to open if :open -t/-b/-w is used without URL. Use `about:blank`
## for a blank page.
## Type: FuzzyUrl
c.url.default_page = 'http://rooncore_ip:9330/display'

## Page(s) to open at the start.
## Type: List of FuzzyUrl, or FuzzyUrl
c.url.start_pages = ['http://rooncore_ip:9330/display']

## Always restore open sites when qutebrowser is reopened.
## Type: Bool
c.auto_save.session = False

After almost 5 years without a glitch, I’m starting to encounter some troubles.

I update my Roon Core on a regular basis (apt-upgrade, now running Ubuntu 22.04.2 LTS, Roon Core version 2 build 1277).

Latest updates are consuming much more CPU than before.

So much CPU that the music eventually stops in the middle of a song (then skips to the next one).
I am using the same Intel i3 as Roon Core and Roon Bridge with a web browser (Qutebrowser) as display.

Has anybody had similar issues?

Is that build still using MONO?

As far as I know, yes…

I’m thinking you need to put .NET on it. Roon advised Linux users to do that a while back.

AFAIK, RoonServer for Linux comes prepackaged with .NET, installed on /opt/RoonServer/RoonDotnet. That’s how it is on my Linux servers, anyway.

@Benjamin_Bellamy,

A bit late to this party. :slight_smile: Great write up and detail you’ve provided in this post. I may try something like this in the future. Looks like you’ve built a lot of extra/cool functionality into this roon implementation. I’m using ROCK on a NUC at the moment (have been for a few years now), and been very happy. I enjoy building roon end-points with SBCs. RPis mostly, but have used VIMs, RockPis, NanoPis, Tinkerboard, and other multi-platform SBCs like the LattePanda Alpha. They’re all scattered around my house, including garage and shop. :slight_smile: I’ve also used all the available ‘bridges’ - roon bridge, ropieee and VitOS. Lately, I’ve been trying to incorporate LCD screens in a few of my endpoint builds. All electronics used are IanCanada DACs and other associated support boards. I do have a couple of less critical endpoints that use the Toneboard 1 & 2 Pro from Khadas(older DACs, but still worthy of their budget appeal). Great fun. Thanks again.

2 Likes