My Perfect Roon Core/Bridge


(Ben) #1

Installing a graphical Roon Core / Roon Bridge


I was looking for the perfect Roon Core / Roon Bridge that would:

  • Output multichannel audio.
  • Use an HDMI output and understand CEC.
  • Be reliable.
  • Be cheap (that is very subjective).
  • Output DSD files throught HDMI (I could not find a solution for this).

I initially planned on using Roon Optimized Core Kit on an Intel NUC.

I eventually changed my mind and decided to install Roon Core “manually” on top on Linux because:

  • ROCK does not provide any ssh access.
  • ROCK does not use the video output (you just get Linux text gibberish). I was planning to use it also as a Roon Bridge, connected to my 5.1 audio/video amplifier so I wanted a nice looking video ouput even though I hardly use it.

TLDR;

This post explains what I did:

  • Bought a NUC with HDMI-CEC Adapter.
  • Installed Ubuntu Server 18.10.
  • Installed openbox as window manager (kiosk-like).
  • Installed qutebrowser to display Roon graphical informations.
  • Installed my custom made Roon CEC Controller Extension.

Get the hardware

I bought an Intel NUC because you can install Roon Optimized Core Kit on them (even though I gave up on ROCK).

I picked the smallest and cheapest one, the NUC7i3BNK.
I added a 120Gb hard drive (Corsair Force MP300 120 Gb) and 8Gb RAM (G.Skill RipJaws Series SO-DIMM 8 Gb DDR4 2133 MHz CL15).
So far it has never failed me.

Then I added an Intel NUC HDMI-CEC Adapter so that the NUC is able to send and receive HDMI-CEC commands.

Before going to the software installation you probably want to update the NUC firmware.

Also I strongly suggest that you get a micro SD card and use it to store Roon Core automatic backups: in the event of hard drive failure, or if you just want to reinstall the Roon Core server and its OS, you will be able to get all your data back very easily. Moreover, this will allow you to get your backups out of the NUC just by ejecting the SD card.

Install Ubuntu server

I chose Ubuntu because I like it. Server because I wanted a minimal installation. I chose 18.10 over 18.04 LTS because it has more packages that I needed already installed by default. And I will probably upgrade it every 6 months but you may want go with the LTS, that is up to you.

You may get Ubuntu Server here.

Install it the usual way.

I recommend that you select “English” as language even if that is not your native language (it’s not mine), because it will be easier to google error messages when you get some.

When you install Ubuntu, pick a nice server name, such as rooncore, and a nice admin user name, such as your own first name.

There is no snap to install, we won’t need any.
SSH server is already installed.

Then you probably need to update the software:

sudo apt-get update
sudo apt-get upgrade

And install your favorite text editor:

sudo apt-get install vim

Install Roon Core

Everything you need to know is here.

Install some mandatory packages:

sudo apt-get install curl ffmpeg cifs-utils

Then install Roon Core:

cd
wget http://download.roonlabs.com/builds/roonserver-installer-linuxx64.sh
chmod a+x roonserver-installer-linuxx64.sh
sudo ./roonserver-installer-linuxx64.sh

If you have a micro SD inserted in the NUC, now is a good time to configure Roon automatic backup to use it. I recommend FAT formating.

Depending on your configuration it could look like this:

sudo mkdir /media/ROONBACK

Get your SD name with this:

sudo fdisk -l

Then add this to /etc/fstab with something like this:

/dev/mmcblk0p1  /media/ROONBACK vfat    user,fmask=0111,dmask=0000   0   0

Create a Roon Kiosk

This part is about automatically launching a web browser showing the Roon display page on boot.

Create a roon user. This user should have no privilege (he should not be a sudoer) as he will automatically log in and launch the web browser with no password asked.

sudo adduser roon

Then install X server, openbox and qutebrowser.
I chose qutebrowser over Chromium or Firefox because you can use it with just a keyboard and no mouse. (And I like VIM.)

sudo apt install --no-install-recommends xorg xserver-xorg-legacy openbox qutebrowser

Then create /opt/roonkiosk.sh:

#!/bin/bash

xset -dpms
xset s off
openbox-session &

qutebrowser

Then

sudo chmod a+x /opt/roonkiosk.sh

Edit /etc/X11/Xwrapper.config:

allowed_users=anybody
needs_root_rights=yes

Create /etc/systemd/system/roonkiosk.service:

[Unit]
Description=RoonKiosk
After=systemd-user-sessions.service
Requires=roonserver.service

[Service]
Type=simple
User=roon
ExecStart=/usr/bin/startx /etc/X11/Xsession /opt/roonkiosk.sh
Restart=always

[Install]
WantedBy=multi-user.target

Then

sudo systemctl daemon-reload
sudo systemctl enable roonkiosk
sudo mkdir -p /home/roon/.config/qutebrowser

Then edit qutebrowser parameters in /home/roon/.config/qutebrowser/config.py with roon user:

# 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:9100/display'

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

## Always restore open sites when qutebrowser is reopened.
## Type: Bool
c.auto_save.session = False
sudo chown -R roon:roon /home/roon/.config

If you need to close the default tab, press [d]. To switch to fullscreen press [F11].

Enable this display from Roon controller software.

CEC Controller Extension

If you want to control Roon from your amplifier and/or TV set remote control, install Roon CEC Controller Extension.

This should do it:

wget -qO- https://deb.nodesource.com/setup_8.x | sudo -E bash -
sudo apt-get install nodejs cec-utils
sudo usermod -a -G dialout nobody
cd
git clone https://github.com/benjaminbellamy/roon-cec-controller-extension.git
cd roon-cec-controller-extension/
npm install
cd ..
sudo mv roon-cec-controller-extension /var/
sudo chown -R roon:roon /var/roon-cec-controller-extension/
sudo cp /var/roon-cec-controller-extension/roon-cec-controller-extension.service /etc/systemd/system/
sudo systemctl start roon-cec-controller-extension.service
sudo systemctl enable roon-cec-controller-extension.service

Enable the extension from Roon controller.

Et voilà !

PS1: If you notice any mistake, please feel free to tell me.

PS2: Of course all this is a perpetual work in progress. Any piece of advice will be welcome.


Roon Server Install Ubuntu
(Mr Fix It ) #2

Great write up Ben… looking forward to seeing the screen shots of what’s showing in the browser and your software extension. It all sounds like fun stuff.


#3

Sorry for sidetracking, but could you point me to the roon sticker on your nuc? I’d love one of those!


(Martin Webster) #4

(mike trogni) #5

Have you confirmed multichannel audio works?


(Ben) #6

YES it does work. Both PCM or DSD (converted by Roon to PCM) are played perfectly and gapless.


(Ben) #7

I just made it with my Silhouette Portrait.


(mike trogni) #8

Benjamin, thanks for confirming. I also am handy with the unix command line and miss SSH’ing into the server. Originally I installed Debian stretch on my NUC but while the Core and 2 channel stereo HDMI output worked, I could never get multi-channel audio working. I have a decent-sized library of multichannel PCM and a couple of DSD albums that I rarely listen to. When I installed ROCK it all worked “out of the box”. Maybe I will try ubuntu and follow your instructions someday.


(Ben) #9

Installing Ubuntu 18.10 and Roon core just takes a few minutes and works right away.
(All the other steps are just here for displaying Roon web page and use CEC.)