COMMUNITY EDITION · SETUP GUIDE

Set up your own PianoRT on an HP Chromebox G3

Alpha · plain-language guide

This guide is for anyone who wants a dedicated Pianoteq computer for a home, a school or a church. It explains what you need, what each step does, and where you’ll need someone who’s comfortable with Linux. The exact commands are tucked into the “For your tech volunteer” boxes.

Honest expectations. This is an early alpha, and the setup isn’t one-click yet. With the right person helping, it’s an afternoon’s project. The finished result is a small computer that opens Pianoteq when it starts. Typical practice and accompaniment work well on the G3. Very dense, heavily layered playing can push it past its limits.

Is this right for you?

A good fit if…

  • You have a volunteer who has installed Linux before and is happy using a terminal.
  • You’d enjoy a do-it-yourself project and can live with the occasional rough edge.
  • Your playing is mostly piano, organ or accompaniment, not huge layered sound stacks.
  • You’re OK with community help instead of a warranty.

Probably not yet if…

  • Nobody on hand has used Linux, or you need it working by Sunday.
  • You need guaranteed reliability for every service or performance.
  • You want a ready-made box you just plug in.

If the right-hand list sounds like you, wait for a later release with a full installer, or look at the Founders Edition, which arrives set up and tested.

What you’ll need

HP Chromebox G3
The model tested here (board name “Noibat”). Other computers may work, but the audio fixes in this release are for this one.
A Pianoteq license
Bought from Modartt, the company that makes Pianoteq. It isn’t included, and you’ll need its Linux download.
Your keyboard and a MIDI link
A digital piano or keyboard, plus a USB MIDI cable or interface if it has no USB port.
Speakers or headphones
The tested output is the G3’s headphone jack, feeding headphones, powered speakers or a mixer.
A temporary screen, keyboard and mouse
Needed for setup. Afterwards the screen just shows Pianoteq.
A USB stick (8 GB or more)
For installing Debian Linux.

The steps

1

Prepare the Chromebox to run Linux

A Chromebox arrives running ChromeOS, so it needs to be set up to start Linux. There are two ways. Replacing the firmware isn’t required, but it gives the best result.

  • Best result: replace the firmware. Free UEFI firmware, such as the MrChromebox project’s, makes the G3 start straight into Linux like an ordinary PC, with no warning screen. That’s what you want for a computer that just turns on and plays. Done carefully it’s routine. Done wrong it can leave the box unable to start, so let an experienced volunteer do it.
  • Without flashing: developer-mode legacy boot. The Chromebox can also start Linux from developer mode. It works, but a developer-mode warning screen appears every time it powers on, which is awkward for a church or classroom.
For your tech volunteer

For the best result, follow the MrChromebox documentation for the Puff/Noibat family: disable firmware write protection, then flash the UEFI full ROM. Save the stock firmware backup it offers somewhere safe. Otherwise, enable developer mode and use its legacy boot path. Either way, the PianoRT packages don’t ship or flash firmware themselves.

2

Install Debian 13

Install Debian 13 (“trixie”) from a USB stick, choosing a normal desktop. Create one user account for the piano, for example “piano”. Set it to log in automatically so Pianoteq can open on its own later.

For your tech volunteer

Use the amd64 installer, with a wired network cable for the install rather than Wi-Fi. Enable the non-free-firmware component (the installer usually does this), because the G3 audio needs firmware-sof-signed. Keep a second administrator login and console access available. Turn on automatic login for the piano user in the desktop’s user settings.

3

Install Pianoteq and activate your license

Download Pianoteq for Linux from your Modartt account, unpack it, start it once and activate it with your license. Check that you can hear it before going further.

For your tech volunteer

PianoRT starts Pianoteq from a fixed path, so point that path at the real program. Replace the source path with wherever you unpacked Pianoteq’s 64-bit Linux binary:

sudo mkdir -p /opt/pianoteq/current
sudo ln -sfn "/home/piano/Pianoteq 9/x86-64bit/Pianoteq 9" /opt/pianoteq/current/Pianoteq

Or set PIANORT_EXECUTABLE in /etc/pianort/player.conf after step 4.

4

Install the two PianoRT packages

Download both packages from the Community Edition page and install them. They add the audio settings, the G3 headphone fixes and a small launcher. They don’t change the volume or any Pianoteq settings, and they don’t touch the firmware.

For your tech volunteer

Download SHA256SUMS into the same folder and check the packages against it, then install both with apt so dependencies come in automatically:

sha256sum -c --ignore-missing SHA256SUMS
sudo apt install ./pianort-config_0.1.0~alpha3_amd64.deb ./pianort-g3-audio_0.1.0~alpha3_amd64.deb

pianort-g3-audio requires exactly firmware-sof-signed (= 2025.01-1), the Debian 13 version. If apt complains, check that non-free-firmware is enabled. If an older /etc/systemd/user/pianoteq.service exists, back it up and remove it, because it overrides the packaged one.

5

Give the piano user permission for real-time audio

This lets Pianoteq run at high priority so the audio stays smooth. It takes effect after you log out and back in.

For your tech volunteer
sudo groupadd -f pianort
sudo usermod -aG pianort,audio piano

Log the piano user out and in, or reboot. If ulimit -r doesn’t show 95 and ulimit -l doesn’t show unlimited in the new session, add LimitRTPRIO=95 and LimitMEMLOCK=infinity under [Service] in /etc/systemd/system/[email protected]/90-pianort.conf, using the piano user’s own UID, then reboot.

6

Restart, test, then make it start by itself

Restart the computer so the new audio settings load. Start Pianoteq through PianoRT, play for a while, and check the sound and your sustain pedal. Once it works, turn on automatic start so Pianoteq opens whenever the piano user logs in.

For your tech volunteer

As the piano user, in the desktop session:

systemctl --user start pianoteq.service
systemctl --user status pianoteq.service
pw-top        # should show a 64/48000 quantum and no climbing error counts

When manual start works:

systemctl --user enable pianoteq.service

On the G3, check that the headphone sink reports api.alsa.disable-tsched=true with period 64 and headroom 256 (pw-cli or wpctl inspect). Leave Pianoteq’s CPU overload protection on.

7

Turn Wi-Fi off. This is required.

Wi-Fi must be off whenever the piano is in use. Failure to disable Wi-Fi may cause unexpected results. Turn it off once setup is finished, and leave it off. When you need updates, plug in a network cable instead.

For your tech volunteer
sudo nmcli radio wifi off
sudo rfkill block wifi
rfkill list        # Wireless LAN should show "Soft blocked: yes"

Both settings survive a reboot on Debian (NetworkManager and systemd-rfkill remember them). Check rfkill list again after a restart. Bluetooth isn’t used by PianoRT either, so you can block it too with sudo rfkill block bluetooth.

8

Set your sound and do a real rehearsal

Pick the instrument you’ll actually use and set the volume. Start quiet, because the packages leave the volume wherever it was. Then do a full run-through of real music before relying on it. Unplug the power and plug it back in once, to make sure it comes back up on its own.

Optional: PianoRT firmware for the best result

Once everything above works, you can replace the Chromebox’s firmware with PianoRT’s own. It starts straight into the PianoRT real-time kernel with the TuxPiano boot splash, with no boot menu and no warning screen, and goes directly to Pianoteq. This step is optional. Everything above works without it.

Read this first. Flashing firmware is at your own risk. If it goes wrong, the Chromebox may not start, and the only way back is a CH341A USB SPI programmer with a SOIC-8 clip, used from another computer with the backup the flasher saves. Have one on hand before you start. Also know that with this firmware:
  • Debian must be on an NVMe SSD.
  • USB-C displays don’t work. Use HDMI or DisplayPort.
  • Every unit uses the same Ethernet MAC address. Give each its own if you run several on one network (see FLASHER.md).
  • The computer boots the kernel built into the firmware, so Debian’s own kernel updates no longer change the running kernel.
F

Customize, check, then flash

The flasher first builds a copy of the firmware set up for your unit and stops, so you can read what it will do. It only writes to the firmware when you ask it to, after saving and checking a backup of what’s there now.

For your tech volunteer

Write protection must be off first. If you installed MrChromebox’s UEFI firmware, it already is. Download the files listed in the firmware notes into one directory (at least pianort-ce-noibat-0.1.0.rom.xz, pianort-ce-noibat-0.1.0-bzImage, pianort-ce-flash, cbfstool and SHA256SUMS), then:

sha256sum -c --ignore-missing SHA256SUMS
unxz -k pianort-ce-noibat-0.1.0.rom.xz
chmod +x pianort-ce-flash cbfstool
sudo apt install flashrom
sudo ./pianort-ce-flash --image pianort-ce-noibat-0.1.0.rom --kernel pianort-ce-noibat-0.1.0-bzImage --sums SHA256SUMS

Read the .rom.txt report it writes. When you’re ready, run the same command with --flash added. It saves a backup, asks you to type FLASH, then writes only the BIOS region and verifies it. Copy the backup file off the Chromebox before rebooting. If you later reinstall Debian or replace the SSD, run the flasher again before rebooting, or the computer won’t find its disk.

The firmware is pure upstream coreboot with three small PianoRT patches, plus Linux 7.3-rc6 with one NVMe patch. The complete source, patches, build configs and licenses are listed in the firmware notes, and the image rebuilds byte for byte from that source.

Optional: performance tuning

A third package, pianort-g3-tuning, holds the CPU, interrupt and thread settings used on the reference G3. It installs switched off, and you turn on the parts you want. It helps most together with the PianoRT firmware above, which sets aside CPUs for audio, but it also works without it.

What it changes once you turn it on. The CPU is held at 3 GHz with hyper-threading off (4-core models only), and its sustained power limit goes up to 20 W. That’s what stopped dropouts on dense passages in testing on the i7-10610U model, but it means more heat and fan noise. Interrupts and Pianoteq’s audio threads are kept on their own CPUs. The desktop’s power-mode setting stops working, because the tuning replaces it. Every value can be changed in /etc/pianort/tuning.conf, and turning the services off and restarting undoes it all.
T1

Turn on the tuning

Install the package, check what it would do, then switch it on and restart.

For your tech volunteer
sudo apt install ./pianort-g3-tuning_0.1.0~alpha3_amd64.deb
sudo /usr/libexec/pianort/g3-tuning plan     # read-only: shows the CPUs and IRQs it will use
sudo systemctl disable --now irqbalance.service power-profiles-daemon.service
sudo systemctl enable pianort-g3-cpu-profile.service pianort-g3-irq.service \
  pianort-g3-placement.service pianort-g3-audio-power.service
sudo reboot

After the restart, systemctl status 'pianort-g3-*' should show all four services active, and journalctl -u pianort-g3-cpu-profile shows the frequency and power limit it applied. It’s fine if irqbalance or power-profiles-daemon isn’t installed. To undo, run sudo systemctl disable pianort-g3-cpu-profile.service pianort-g3-irq.service pianort-g3-placement.service pianort-g3-audio-power.service and restart.

T2

Turn off services a piano doesn’t need

A normal desktop runs printing, scanning, network discovery and automatic updates in the background. None of them help a piano, and automatic updates can start in the middle of playing. Turning them off keeps the computer quieter. Keep the login screen, the network manager and the cooling settings as they are: the guide’s setup needs them.

For your tech volunteer
for u in cups.service cups.socket cups.path cups-browsed.service ipp-usb.service \
         saned.socket avahi-daemon.service avahi-daemon.socket \
         apt-daily.timer apt-daily-upgrade.timer; do
  sudo systemctl disable --now "$u" 2>/dev/null
done
sudo systemctl disable --now bluetooth.service   # only if you don't use Bluetooth

With the update timers off, update by hand on a quiet day (sudo apt update && sudo apt upgrade) and test afterwards. Don’t disable or mask the display manager (gdm3), NetworkManager or thermal and fan services. The full list of choices is in /usr/share/pianort/service-policy.json.

Good to know

Getting help

Community Edition help is best-effort. Email [email protected] with “Community Edition” in the subject, and say which step you’re on, what you expected and what happened. If you’re comfortable, include a short screenshot or the last few lines of an error message. Please don’t send whole system backups or license files.

The full technical notes are in INSTALL.md for anyone who wants the details.

← Back to the Community Edition