Bitfocus AS
logo
logo
Bitfocus AS
logo
logo
Sign upSign in

Loading...

Bitfocus

Subscribe to our newsletter

The latest news, articles, and resources, sent to your inbox.

FacebookInstagramGitHubYouTubeLinkedIn

Products

  • Buttons
  • Companion

Integrations

  • Supported Devices
  • Developer Community
  • Connection Development

Support

  • Support Overview
  • Documentation
  • Video Tutorials
  • Community Forum

Sales

  • Resellers & Integrators
  • Buttons Pricing

Updates

  • Case Studies
  • Events & Trade Shows
  • Press Releases
  • Product Updates
  • Webinars

Legal

  • Legal Overview
  • Privacy Policy
  • Buttons EULA
  • Terms & Cookie Policy

Company

  • About us
  • Press kit
  • Careers

© 2026 Bitfocus AS. All rights reserved.

Install Buttons on Debian or Ubuntu
Docs for
Overview
Getting started
What is Bitfocus Buttons?
Install Buttons and get started
Manage your Buttons license
Activate Buttons offline
Find your way around Buttons
Create your first backup
Add an ATEM connection
Choose a control method
Choose an installation path
Install Buttons on Debian or Ubuntu
Understand HA clustering
Kubernetes HA
Update or remove Buttons
Positions
Understand positions
Create a position
Add controls and sections to a position
Create your first button
Use a connection's presets
Build more capable button actions
Add more feedback to a button
Organize controls in a section
Shift Section
Organize controls with a Folder Section
Add a Popover Section
Build and reuse a Shared Section
Build a Router Section
Understand Custom Routers
Custom Router panel
Surfaces
Surface compatibility
Add and attach a surface
Device orientation
Connections
Update a connection's module safely
Monitor and troubleshoot a connection
Router integrations
VideoHub and AJA KUMO
Utah Scientific BPS
Generic SW-P-08
Nevion VideoIPath
Arkona BLADE//runner
Routing
Physical routing
Configure ports and labels
Take a physical route
Understand route status
Topology graph
Routing Presets
Get started with virtual routing
Configure Nested Shapes
Reverse routing
Tielines
Routing Projects
Routing settings
Troubleshoot a route
Tally
Understand the Tally system
Send ATEM tally and labels to a UMD
Interpret Active Tally state
TSL/UMD connections
Diagnose tally problems
NMOS
Understand NMOS in Buttons
Connect Buttons to an NMOS Registry
Built-in Registry Server
Configure NMOS connections
Discover and adopt
Browse the NMOS inventory
Manage NMOS multicast addresses
Diagnose NMOS problems
Understand Cuelists
Build a Cuelist
Read and advance a running Cuelist
Control a Cuelist from a Position
Workflows
Understand workflows
Build your first workflow
Reuse a group of workflow nodes safely
Troubleshoot a workflow
Recipes
Sequence a timed automation
Call an HTTP endpoint from a workflow
REST endpoint
Use variables
Understand variable scope
Understand nested variables
Update expressions for v1.8
Plan and use Tags
Access
Create and manage users
Create roles and assign permissions
Grant access to specific resources
Show different controls by role
Sessions
Set up PIN and NFC sign-in
SSO
Get started with SSO
Connect a generic OIDC provider
Connect LDAP or Active Directory
Map identity claims to roles
Secure a Buttons deployment
Integrations
External control
Connect to Bitfocus Listener
USB Relay
Install USB Relay on Windows
Install USB Relay on macOS
Install USB Relay on Linux
Install USB Relay on a Raspberry Pi
Get started with the Control API
Secure and monitor the Control API
Control API reference
API reference
Administration
Enable and manage installable features
Services and health
Configure and monitor scheduled backups
Restore a backup and verify it
Export or import Buttons configuration
Store and rotate connection secrets
Replace the HTTPS certificate
HA backup and recovery
Settings
Collect support information
Reference
Glossary
Button Inspector reference
Network ports reference
Expressions
Internal actions reference
Routing Presets panel reference
Startup configuration reference
Workflow nodes
Connection workflow nodes
Workflow workflow nodes
Internal workflow nodes
Position workflow nodes
API workflow nodes
Utility workflow nodes

Loading...

Previous
← Choose an installation path
Next
Understand HA clustering →
Contact support →
You are viewing documentation for Buttons 1.8.See the docs for Buttons 1.6
Buttons/Installation/Install Buttons on Debian or Ubuntu

Install Buttons on Debian or Ubuntu

Buttons runs as a set of managed background services, so it fits onto a dedicated Debian or Ubuntu server the same way any other production service does: no desktop session required, and it restarts on its own if the machine reboots. This page covers installing the headless Linux build, running it manually to confirm it works, and setting it up as a systemd service for unattended operation.

Before you begin#

  • sudo access and an internet connection on the target machine.
  • A Debian or Ubuntu system. Buttons requires PostgreSQL 17 specifically, installed from the official PostgreSQL repository rather than the distribution's default package.
  • The downloaded Linux build, extracted to a working directory.

Install prerequisites#

  1. Update the system and install curl:
   sudo apt update
   sudo apt upgrade
   sudo apt install curl
  1. Add the official PostgreSQL repository and install PostgreSQL 17:
   sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
   curl -fsSL https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/postgresql.gpg
   sudo apt update
   sudo apt install -y postgresql-17
Buttons manages and runs its own PostgreSQL instance, so disable the system-wide one:
   sudo systemctl disable postgresql
   sudo systemctl stop postgresql
  1. Install Valkey and Avahi (for mDNS/Bonjour discovery):
   sudo apt install -y valkey-server avahi-daemon libnss-mdns libudev1
Buttons manages and runs its own Valkey instance, so disable the system-wide one:
   sudo systemctl disable valkey-server
   sudo systemctl stop valkey-server
  1. Create a group for device access, copy in the udev rules, and reload:
   sudo addgroup buttons
   sudo adduser $USER buttons
   sudo cp 50-bitfocus-buttons.rules /etc/udev/rules.d/
   sudo udevadm control --reload-rules
Replug any Stream Decks so they pick up the reloaded rules, and open a new terminal session so your group membership takes effect before continuing.

Run manually#

From the extracted build directory:
./watchdog-cli 127.0.0.1 4440
reaches the UI at http://127.0.0.1:4440 (https://127.0.0.1:4443) from the local machine only. Use 0.0.0.0 instead of 127.0.0.1 to make it reachable from other machines on the network. If Buttons is already running, stop it first; starting a second instance conflicts with the one already using these ports and this configuration.
Configuration, data, and logs are stored under $HOME/.config/bitfocus-buttons for whichever user ran the command: include that directory in your backup plan alongside the in-app backups described in Create your first backup.

Run as a service#

The build includes an example systemd unit (bitfocus-buttons.service) that expects a buttons user to exist and belong to a buttons group, running from /opt/bitfocus-buttons. None of that exists yet after the steps above: set it up:
sudo useradd --system --create-home --shell /usr/sbin/nologin --gid buttons buttons
sudo mkdir -p /opt/bitfocus-buttons
sudo cp -r . /opt/bitfocus-buttons/
sudo chown -R buttons:buttons /opt/bitfocus-buttons
sudo cp /opt/bitfocus-buttons/bitfocus-buttons.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable --now bitfocus-buttons
The provided unit listens on 0.0.0.0:4440; edit /etc/systemd/system/bitfocus-buttons.service before enabling it if you need different arguments.
Check that it's running:
sudo systemctl status bitfocus-buttons
journalctl -u bitfocus-buttons -f
Because the service runs as the buttons system user, its configuration and data live under that user's home directory rather than yours: keep that in mind when locating logs or planning backups for a service install.

Where to go next#

  • Create your first backup, to protect the configuration you're about to build.
  • Manage your Buttons license, or activate Buttons offline if this machine has no internet access.
  • Choose an installation path, for how this fits alongside the other supported ways to install Buttons.
  • Startup configuration reference, for every command-line flag and environment variable watchdog-cli supports.
  • Update or remove Buttons, for what happens later when you update or remove this installation.

Was this helpful?

Was this helpful?

0 of 0 users found this page helpful