Chromium Player
xiboplayer-chromium
Lightweight kiosk player that uses the existing system Chromium browser.
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.0automatically 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.
| Key | Description |
|---|---|
kioskMode | Run in kiosk mode (default: true) |
fullscreen | Start in fullscreen (default: true) |
hideMouseCursor | Hide the mouse cursor (default: true) |
preventSleep | Prevent display sleep (default: true) |
transport | CMS transport: rest or soap |
browser | Browser binary: chromium (default) or google-chrome-stable |
extraBrowserFlags | Additional Chromium flags (space-separated) |
controls | Control groups β each must be explicitly set to true |
serverPort | Local server port (default: 8766) |
relaxSslCerts | Accept 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.
| Key | Requires | Action |
|---|---|---|
T | controls.keyboard.debugOverlays: true | Toggle timeline overlay |
D | controls.keyboard.debugOverlays: true | Toggle download overlay |
V | controls.keyboard.videoControls: true | Toggle video controls |
β / PageDown | controls.keyboard.playbackControl: true | Next layout |
β / PageUp | controls.keyboard.playbackControl: true | Previous layout |
Space | controls.keyboard.playbackControl: true | Pause / resume |
R | controls.keyboard.playbackControl: true | Revert 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
| Chromium | Electron | |
|---|---|---|
| Browser | Uses system Chromium | Bundles its own |
| Package size | ~5 MB (noarch) | ~80 MB (x86_64) |
| Updates | Browser updated by OS | Browser tied to Electron version |
| Dependencies | Requires Chromium installed | Self-contained |
| Best for | Kiosks, embedded devices | General 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.
