//nbkelley /homelab

Jellyfin LXC GPU Passthrough & Hardware Acceleration#

What Was Established#

Successfully configured Intel UHD Graphics 630 GPU passthrough to a Jellyfin LXC container on Proxmox for hardware-accelerated transcoding via Intel QuickSync (QSV).

Key Decisions#

  • GPU Passthrough Method: LXC container-level GPU device mapping (not full VM passthrough)
  • Hardware Acceleration: Intel QuickSync (QSV) selected over VAAPI for Jellyfin’s native support
  • Monitoring Constraints: Accepted that LXC container restrictions prevent full GPU monitoring tools (dmesg, intel_gpu_top) from functioning; validated functionality through actual transcoding tests instead

Current Configuration#

Host GPU Details#

  • GPU: Intel Corporation CoffeeLake-S GT2 [UHD Graphics 630]
  • PCI Address: 00:02.0
  • Driver: i915 (loaded)
  • Related Modules: drm_buddy, ttm, drm_display_helper, cec, i2c_algo_bit, video

LXC Container GPU Devices#

  • /dev/dri/card0 — character special (major 226, minor 0)
  • /dev/dri/renderD128 — character special (major 226, minor 128)
  • Permissions: crw-rw---- root:video (226/0 and 226/128)

Jellyfin Configuration#

  1. User Group Assignment: jellyfin user added to video group (usermod -a -G video jellyfin)
  2. Dashboard → Playback Settings:
    • Hardware Acceleration: Intel QuickSync (QSV)
    • Enable hardware encoding: Yes
    • Enable hardware decoding: Yes
    • Enable tone mapping: Yes
    • Allow encoding in HEVC: Yes
    • Allow encoding in AV1: Yes (if supported)

Validation Commands#

# Verify GPU device accessibility
ls -la /dev/dri/

# Check if processes are using GPU during playback
lsof /dev/dri/renderD128

# Monitor Jellyfin logs for hardware acceleration
sudo journalctl -u jellyfin -f | grep -i "hardware\|qsv\|quicksync\|vaapi"

# Check active transcoding sessions in Jellyfin UI
# Dashboard → Active Devices → look for (HW) indicator

Historical Notes#

  • dmesg restriction: dmesg: read kernel buffer failed: Operation not permitted — expected in LXC containers without full device access
  • intel_gpu_top limitation: GPU monitoring tools that require kernel debugfs access will not work inside the LXC; validated via actual transcoding performance and log inspection instead
  • i915 driver loaded: Confirmed via lsmod | grep i915 showing 3,928,064 bytes loaded
  • No GPU debug info: /sys/kernel/debug/dri not available in container — accepted limitation

Open Questions#

  • Does AV1 hardware encoding actually work on Coffee Lake-S (Gen 9.5) — typically limited to H.264/H.265
  • Performance baseline: what CPU load reduction is observed with QSV vs software transcoding?
  • Can GPU passthrough be extended to other LXC containers (e.g., Plex, if migrated)
  • Plex Transcoding LXC — similar GPU passthrough patterns for Plex
  • Proxmox LXC Configuration — LXC container setup patterns
  • Servarr - Media Automation Stack — media server ecosystem

Gluetun VPN Service

Open WebUI Deployment

Servarr Stack - Gluetun VPN Troubleshooting

Sources#

  • DeepSeek conversation: Jellyfin LXC GPU passthrough troubleshooting (2024–2025)