Skip to content

[BUG] VAAPI hardware transcoding fails on Intel N150 (Alder Lake-N) with Debian Trixie / kernel 6.12 — Plex bundled musl libva 2.21.0 returns Device creation failed: -22 #446

@C-M-Ryan

Description

@C-M-Ryan

Is there an existing issue for this?

  • I have searched the existing issues

Current Behavior

VAAPI hardware transcoding fails with exit code 187 in ClusterPlex workers (and reproducible
directly via Plex Transcoder binary). Plex's bundled libva 2.21.0 returns:
[AVHWDeviceContext @ 0x7f977c3a7dc0] No VA display found for device /dev/dri/renderD128.
Device creation failed: -22.
Failed to set value 'vaapi=vaapi:/dev/dri/renderD128' for option 'init_hw_device': Invalid argument
Error parsing global options: Invalid argument
This occurs regardless of whether LIBVA_DRIVERS_PATH points to Plex's own bundled iHD driver
(/usr/lib/plexmediaserver/lib/dri) or the system iHD driver (/usr/lib/x86_64-linux-gnu/dri).
Both renderD128 and card0 fail identically. Tests were run as root inside the container,
ruling out group permission issues entirely.

Suggested Fix / Upstream Request
This is ultimately a Plex upstream issue (bundled musl libva 2.21.0 + iHD 24.1.5 cannot
initialise VAAPI on N150 + kernel 6.12)

1 update bundled libva beyond 2.21.0 and iHD beyond 24.1.5
2 Document the limitation in the image README for users on Debian Trixie / kernel 6.12+
with Alder Lake-N hardware
3 Investigate whether a custom init script can patch Plex's libva path at container startup
once a compatible musl-built libva becomes available

As a work around, I am currently using FFMPEG_HWACCEL=none (CPU transcoding) which works correctly.
Software transcoding across 3 N150 nodes via ClusterPlex is functional this way, but I as a lifetime pass holder i would love to have proper hw transcoding on my shiny new setup.

Expected Behavior

VAAPI hardware transcoding initialises successfully and Plex Transcoder is able to use Intel
Gen 12 Xe GPU on the N150 for encode/decode acceleration.

Steps To Reproduce

Steps to Reproduce

Deploy linuxserver/plex:latest on Debian Trixie (kernel 6.12) with Intel N150 hardware
Mount /dev/dri:/dev/dri in the container
Set FFMPEG_HWACCEL=vaapi, LIBVA_DRIVER_NAME=iHD
Attempt a transcode or run the transcoder binary directly:

bashdocker exec -it sh -c "
LIBVA_DRIVER_NAME=iHD
LIBVA_DRIVERS_PATH=/usr/lib/plexmediaserver/lib/dri
/usr/lib/plexmediaserver/'Plex Transcoder'
-init_hw_device vaapi=vaapi:/dev/dri/renderD128
-hwaccel vaapi -hwaccel_output_format vaapi 2>&1
| grep -v 'configuration:|enable|disable|rpath|conan|extra'"
Result: No VA display found for device /dev/dri/renderD128. Device creation failed: -22.

Environment

OS: Debian Trixie (Debian 13)
How docker service was installed: Docker via apt (Docker Swarm mode)
Linux kernel: 6.12.63+debl3-amd64
Architecture: x86-64
CPU / iGPU: Intel N150 (Alder Lake-N, Gen 12 Xe Graphics) × 3 nodes
Linuxserver/plex image version: 1.43.0.10492-121068a07-ls295 (latest at time of report)
Plex FFmpeg build: 74455c4-a119aa85fdef32b7dbfbf8a2
Plex bundled libva version: 2.21.0-9
Plex bundled iHD driver version: intel-media-driver 24.1.5
System libva: 2.22.0 (Debian Trixie)
System iHD driver: intel-media-va-driver-non-free 25.2.3

CPU architecture

x86-64

Docker creation

version: '3.8'
services:
  plex:
    image: ghcr.io/linuxserver/plex:latest
    networks:
      - proxy_public
      - clusterplex_private
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/London
      - VERSION=docker
      - DOCKER_MODS=ghcr.io/pabloromeo/clusterplex_dockermod:latest
      - CLUSTER_MODE=remote
      - ORCHESTRATOR_URL=http://orchestrator:3500
      - PMS_SERVICE=plex
      - LOCAL_RELAY_ENABLED=1
      - LOCAL_RELAY_PORT=32499
    volumes:
      - /mnt/containerdata/plex/config:/config
      - /mnt/synology/watchables:/data
      - /mnt/containerdata/plex/config/Codecs:/codecs
      - /mnt/containerdata/plex/transcode:/transcode
      - /mnt/containerdata/plex/wgetrc_insecure:/etc/wgetrc:ro
    ports:
      - 32400:32400
      - 32499:32499
    deploy:
      placement:
        constraints: [node.hostname == Portainer-vm1]

  orchestrator:
    image: ghcr.io/pabloromeo/clusterplex_orchestrator:latest
    networks:
      - clusterplex_private
    environment:
      - TZ=Europe/London
      - LISTENING_PORT=3500
      - WORKER_SELECTION_STRATEGY=LOAD_RANK
    deploy:
      placement:
        constraints: [node.hostname == Portainer-vm1]

  worker:
    image: ghcr.io/linuxserver/plex:latest
    networks:
      - clusterplex_private
    environment:
      - PUID=1000
      - PGID=992
      - TZ=Europe/London
      - VERSION=docker
      - DOCKER_MODS=ghcr.io/pabloromeo/clusterplex_worker_dockermod:latest
      - ORCHESTRATOR_URL=ws://orchestrator:3500
      - LISTENING_PORT=3501
      - WORKER_CPU_STAT_INTERVAL=2000
      - EAE_SUPPORT=1
      - FFMPEG_HWACCEL=vaapi
      - LIBVA_DRIVER_NAME=iHD
      - LIBVA_DRIVERS_PATH=/usr/lib/plexmediaserver/lib/dri
      - INTEL_LOWPOWER_ENCODE=1
    volumes:
      - /mnt/synology/watchables:/data
      - /mnt/containerdata/plex/config/Codecs:/codecs
      - /mnt/containerdata/plex/transcode:/transcode
      - /dev/dri:/dev/dri
      - /mnt/containerdata/plex/wgetrc_insecure:/etc/wgetrc:ro
    deploy:
      mode: global
      restart_policy:
        condition: on-failure

networks:
  proxy_public:
    external: true
  clusterplex_private:
    driver: overlay
    attachable: true

Container logs

Worker container startup (ClusterPlex dockermod) — no errors, workers connect successfully:
EAE_EXECUTABLE => /codecs/74455c4-.../EasyAudioEncoder
FFMPEG_HWACCEL => vaapi
Setting hwaccel to vaapi
Transcoder exit: child process exited with code 187
Completed transcode
Transcoder close: child process exited with code 187
Manual transcoder test inside container:
ffmpeg version 74455c4-a119aa85fdef32b7dbfbf8a2 Copyright (c) 2000-2025 the FFmpeg developers
  built with Plex clang version 11.0.1
  libavutil      58. 29.100 / 58. 29.100
  libavcodec     60. 31.102 / 60. 31.102
  libavformat    60. 16.100 / 60. 16.100
  libavfilter     9. 12.100 /  9. 12.100
  libswscale      7.  5.100 /  7.  5.100
  libswresample   4. 12.100 /  4. 12.100
[AVHWDeviceContext @ 0x7f977c3a7dc0] No VA display found for device /dev/dri/renderD128.
Device creation failed: -22.
Failed to set value 'vaapi=vaapi:/dev/dri/renderD128' for option 'init_hw_device': Invalid argument
Error parsing global options: Invalid argument

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    Status

    Issues

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions