Electron Player
xiboplayer-electron
Self-contained desktop player for Linux with built-in Chromium browser and kiosk mode.
Key Features
- Multi-display sync (v0.7.0) — video wall support with <8ms precision, 12 choreography effects, token-authenticated WebSocket relay. Full sync guide
- Fullscreen kiosk mode — no window chrome, auto-hide cursor, always-on-top
- Built-in HTTP server — serves PWA files on localhost:8765, doubles as sync relay for video walls
- CORS handling — strips and re-injects CORS headers automatically
- systemd integration — auto-start on boot via user service
- REST API first — uses the CMS REST API as primary protocol, SOAP fallback
- GPU acceleration — VAAPI video decode for Intel, AMD, and NVIDIA
- Multiple instances — run several displays from one machine with
--instance=NAME, each with isolated config and data - Console log forwarding — renderer logs forwarded to proxy stdout for easier debugging
Installation
Fedora / RHEL
# Add the repository (one-time)
# 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
# Install
sudo dnf install xiboplayer-electron
Ubuntu / Debian
# Add the repository (one-time)
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
# Install
sudo apt update && sudo apt install xiboplayer-electron
Configuration
Configuration file: ~/.config/xiboplayer/electron/config.json
{
"cmsUrl": "https://your-cms.example.com",
"serverPort": 8765,
"kioskMode": true,
"fullscreen": true,
"hideMouseCursor": true,
"preventSleep": true,
"autoLaunch": false,
"transport": "rest",
"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. Electron-only option: autoLaunch.
Command-Line Arguments
xiboplayer-electron --dev # Development mode (DevTools enabled)
xiboplayer-electron --no-kiosk # Disable kiosk mode
xiboplayer-electron --port=8080 # Custom server port
xiboplayer-electron --cms-url=URL # Override CMS URL
xiboplayer-electron --cms-key=KEY # Override CMS key
xiboplayer-electron --display-name=NAME # Override display name
xiboplayer-electron --instance=lobby # Run a named instance (isolated config/data)
Auto-Start on Boot
# Enable
systemctl --user enable --now xiboplayer-electron.service
# Check status
systemctl --user status xiboplayer-electron.service
# View logs
journalctl --user -u xiboplayer-electron.service -f
Keyboard Shortcuts
Electron shortcuts (always available):
| Key | Action |
|---|---|
Ctrl+Shift+F12 | Show system tray menu |
Ctrl+Shift+R | Reload player |
Ctrl+Shift+I | Toggle DevTools (dev mode only) |
Player shortcuts (disabled by default — enable via controls 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 | Skip to next layout |
← / PageUp | controls.keyboard.playbackControl: true | Go to previous layout |
Space | controls.keyboard.playbackControl: true | Pause / resume playback |
R | controls.keyboard.playbackControl: true | Revert to scheduled layout |
Mouse hover on the status bar also requires controls.mouse.statusBarOnHover: true.
Log Levels
Default: WARNING (production-safe). Use --dev for DEBUG logging.
| Level | Use case |
|---|---|
DEBUG | Initial deployment — verify CMS connectivity |
INFO | Normal operation |
WARNING | Production default |
ERROR | Production — only failures |
Log levels only affect logging verbosity. Debug overlays (timeline, download) are controlled exclusively by controls.keyboard.debugOverlays in config.json, not by the log level.
Video Wall (Multi-Display Sync)
Electron is the recommended player for video walls. Multiple Electron instances synchronize layout transitions and video playback across screens.
Same machine (multiple outputs): Use --instance=NAME to run separate instances — they sync automatically via BroadcastChannel.
Across devices (LAN): The lead player's proxy server acts as a WebSocket relay. Add to each display's config.json:
{
"syncGroup": "lead",
"syncPublisherPort": 8765,
"listenAddress": "0.0.0.0"
}
Followers set syncGroup to the lead's LAN IP (e.g. "192.168.1.100"). See Video Wall Setup for the full guide.
GPU Hardware Acceleration
Install the appropriate VAAPI driver for your GPU:
| GPU | Package (Fedora) |
|---|---|
| Intel | libva-intel-media-driver |
| AMD | mesa-va-drivers |
| NVIDIA | libva-nvidia-driver (RPM Fusion) |
Verify with vainfo.
Troubleshooting
Player won't start
# Check if port is available
ss -tlnp | grep 8765
# Try different port
xiboplayer-electron --port=8080
# Check logs
journalctl --user -u xiboplayer-electron.service -n 50
Can't exit kiosk mode
Press Ctrl+Shift+F12 to show system tray menu, then select "Exit Player". Or from terminal: pkill -f xiboplayer-electron.
Performance monitoring
Enable Chrome DevTools Protocol to monitor FPS, memory and renderer performance. Not enabled by default.
# Enable (port 9223)
systemctl --user set-environment XIBOPLAYER_DEBUG_PORT=9223
systemctl --user restart xiboplayer-electron
# Query targets
curl -s http://localhost:9223/json
# Disable
systemctl --user unset-environment XIBOPLAYER_DEBUG_PORT
systemctl --user restart xiboplayer-electron
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.
