Electron Player

xiboplayer-electron

Self-contained desktop player for Linux with built-in Chromium browser and kiosk mode.

RPMDEBx86_64aarch64 GitHub
📺Video wall sync with <8ms precision
🔒Fullscreen kiosk, auto-hide cursor
🎬GPU acceleration (VAAPI)
🔄REST API first, SOAP fallback

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):

KeyAction
Ctrl+Shift+F12Show system tray menu
Ctrl+Shift+RReload player
Ctrl+Shift+IToggle DevTools (dev mode only)

Player shortcuts (disabled by default — enable via controls 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: trueSkip to next layout
/ PageUpcontrols.keyboard.playbackControl: trueGo to previous layout
Spacecontrols.keyboard.playbackControl: truePause / resume playback
Rcontrols.keyboard.playbackControl: trueRevert 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.

LevelUse case
DEBUGInitial deployment — verify CMS connectivity
INFONormal operation
WARNINGProduction default
ERRORProduction — 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:

GPUPackage (Fedora)
Intellibva-intel-media-driver
AMDmesa-va-drivers
NVIDIAlibva-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.