🌐

Chromium Player

xiboplayer-chromium

Lightweight kiosk player that uses the existing system Chromium browser.

RPMDEBnoarch GitHub
πŸͺΆUses system browser, minimal footprint
πŸ“ΊVideo wall sync support
πŸ”§Architecture-independent (noarch)
πŸ”„Automatic updates via package manager

Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Chromium (kiosk mode)                  β”‚
β”‚  http://localhost:8766/player/pwa/      β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Node.js Server (localhost:8766)        β”‚
β”‚  β”œβ”€ /player/pwa/*  β†’ bundled PWA files  β”‚
β”‚  β”œβ”€ /xmds-proxy    β†’ CMS SOAP API      β”‚
β”‚  β”œβ”€ /rest-proxy    β†’ CMS REST API       β”‚
β”‚  └─ /file-proxy    β†’ CMS media files    β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                β”‚
         β”Œβ”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”
         β”‚  Xibo CMS   β”‚
         β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Key Features

  • Multi-display sync (v0.7.0) β€” video wall support with <8ms precision, 12 choreography effects. Binds to 0.0.0.0 automatically when configured as sync lead. Full sync guide
  • Instance-aware (v0.7.0) β€” run multiple displays from one machine with --instance=NAME, each with isolated config, data dir, and browser profile
  • Lightweight β€” uses system Chromium, no bundled browser (~10MB vs ~150MB for Electron)
  • REST API first β€” uses the CMS REST API as primary protocol, SOAP fallback
  • Auto-restart β€” browser crash recovery with automatic relaunch
  • Kiosk mode β€” fullscreen, no address bar, disable screen blanking (X11 + Wayland)
  • First-run wizard β€” enter CMS URL, key, and display name in the browser

Installation

Fedora / RHEL

# Fedora 44
sudo dnf install \
  https://dl.xiboplayer.org/rpm/fedora/43/noarch/xiboplayer-release-43-7.fc43.noarch.rpm

# Fedora 43
sudo dnf install \
  https://dl.xiboplayer.org/rpm/fedora/43/noarch/xiboplayer-release-43-7.fc43.noarch.rpm
sudo dnf install xiboplayer-chromium

Ubuntu / Debian

curl -fsSLO https://dl.xiboplayer.org/deb/ubuntu/24.04/all/xiboplayer-release_1.0.2_all.deb
sudo apt install ./xiboplayer-release_1.0.2_all.deb
sudo apt update && sudo apt install xiboplayer-chromium

Configuration

On first run, Chromium opens the PWA setup page where you enter your CMS URL, key, and display name. No manual config editing needed.

Optional config at ~/.config/xiboplayer/chromium/config.json:

{
  "kioskMode": true,
  "fullscreen": true,
  "hideMouseCursor": true,
  "preventSleep": true,
  "transport": "rest",
  "browser": "chromium",
  "extraBrowserFlags": "",
  "controls": {
    "keyboard": {
      "debugOverlays": false,
      "setupKey": false,
      "playbackControl": false,
      "videoControls": false
    },
    "mouse": {
      "statusBarOnHover": false
    }
  }
}

All controls are disabled by default. Set individual control groups to true to enable them. Chromium-only options: browser, extraBrowserFlags.

KeyDescription
kioskModeRun in kiosk mode (default: true)
fullscreenStart in fullscreen (default: true)
hideMouseCursorHide the mouse cursor (default: true)
preventSleepPrevent display sleep (default: true)
transportCMS transport: rest or soap
browserBrowser binary: chromium (default) or google-chrome-stable
extraBrowserFlagsAdditional Chromium flags (space-separated)
controlsControl groups β€” each must be explicitly set to true
serverPortLocal server port (default: 8766)
relaxSslCertsAccept invalid SSL certs for media streams (default: true)

Usage

# First run β€” opens setup page
xiboplayer-chromium

# Run a named instance (isolated config, data, and port)
xiboplayer-chromium --instance=lobby --port=8767

# Enable auto-start on login
systemctl --user enable --now xiboplayer-kiosk.service

# Check status / logs
systemctl --user status xiboplayer-kiosk.service
journalctl --user -u xiboplayer-kiosk.service -f

Keyboard Shortcuts

All player keyboard shortcuts and mouse hover are disabled by default. Enable them via the controls section in config.json.

KeyRequiresAction
Tcontrols.keyboard.debugOverlays: trueToggle timeline overlay
Dcontrols.keyboard.debugOverlays: trueToggle download overlay
Vcontrols.keyboard.videoControls: trueToggle video controls
β†’ / PageDowncontrols.keyboard.playbackControl: trueNext layout
← / PageUpcontrols.keyboard.playbackControl: truePrevious layout
Spacecontrols.keyboard.playbackControl: truePause / resume
Rcontrols.keyboard.playbackControl: trueRevert to schedule

Click any layout in the timeline overlay to jump directly to it (requires controls.keyboard.debugOverlays: true).

When to Choose Chromium vs Electron

ChromiumElectron
BrowserUses system ChromiumBundles its own
Package size~5 MB (noarch)~80 MB (x86_64)
UpdatesBrowser updated by OSBrowser tied to Electron version
DependenciesRequires Chromium installedSelf-contained
Best forKiosks, embedded devicesGeneral deployments

Performance monitoring

Enable Chrome DevTools Protocol to monitor FPS, memory and renderer performance. Not enabled by default.

# Enable (port 9222)
systemctl --user set-environment XIBOPLAYER_DEBUG_PORT=9222
systemctl --user restart xiboplayer-chromium

# Query targets
curl -s http://localhost:9222/json

# Disable
systemctl --user unset-environment XIBOPLAYER_DEBUG_PORT
systemctl --user restart xiboplayer-chromium

The port binds to 127.0.0.1 only. Use Performance.getMetrics via the WebSocket URL to read FPS, JS heap size, DOM node count and layout counts.