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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
This lets Pianoteq run at high priority so the audio stays smooth. It takes effect after you log out and back in.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
/etc/pianort/tuning.conf, and turning the services off and restarting undoes it all.Install the package, check what it would do, then switch it on and restart.
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.
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 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.
sudo apt remove pianort-g3-audio pianort-config removes the packages. Debian keeps any settings files you edited unless you choose “purge”.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