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

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

Activity

  1. github-actions commented on Mar 4, 2026

    @github-actions

    Thanks for opening your first issue here! Be sure to follow the relevant issue templates, or risk having this issue marked as invalid.

  2. bigdavisc commented on Mar 10, 2026

    @bigdavisc

    Have you tried mounting the iGPU as a device and not a volume?

    ...
    devices:
      - /dev/dri:/dev/dri
    ...
    
  3. C-M-Ryan commented on Mar 10, 2026

    @C-M-Ryan
    Author

    I tried that first and then switched to the volume approach as a workaround which didn't work either.

  4. adamncsu commented on Mar 13, 2026

    @adamncsu

    Same issue here. FWIW, my frigate image (ghcr.io/blakeblackshear/frigate:stable) is able to utilize the N150 GPU with no problem. i tried to determine the difference between the two underlying base OS/drivers, but I honestly don't know what I'm looking for.

  5. C-M-Ryan commented on Mar 15, 2026

    @C-M-Ryan
    Author

    Same issue here. FWIW, my frigate image (ghcr.io/blakeblackshear/frigate:stable) is able to utilize the N150 GPU with no problem. i tried to determine the difference between the two underlying base OS/drivers, but I honestly don't know what I'm looking for.

    Frigate uses system FFmpeg with glibc, not Plex's musl-compiled bundled stack, it probably explains what you are seeing.

  6. LinuxServer-CI commented on Apr 20, 2026

    @LinuxServer-CI
    Contributor

    This issue has been automatically marked as stale because it has not had recent activity. This might be due to missing feedback from OP. It will be closed if no further activity occurs. Thank you for your contributions.

  7. subsvn commented on May 1, 2026

    @subsvn

    There's actually a few threads on the Plex forums about issues with transcoding on Alder Lake. Plex released a beta 1.43.2.xxx release that fixes an issue preventing the drivers from loading.

    Link to issue/download can be found here:
    https://forums.plex.tv/t/hardware-gpu-quicksync-transcoding-broken-on-beta-1-43-1-10540/937145/118?page=4

    Basically this issue should resolve itself once Plex officially releases a 1.43.2.xxx build and LS updates their package accordingly.

  8. aptalca commented on May 1, 2026

    @aptalca
    Member

    To clarify, while our image only contains their public releases, an env var allows you to update to the latest beta/plexpass release on container start.

    In other words, when plex releases it to their beta channel, there won't be a new image from us, but users will be able to update to it runtime.

  9. subsvn commented on May 7, 2026

    @subsvn

    For OP:

    Plex released the 1.43.2.xxx beta. Set your docker compose to VERSION=1.43.2.10687-563d026ea and it should resolve it. Worked just fine for me. You might also have to set Plex to check for Beta releases in the server settings.

  10. LinuxServer-CI commented on Jun 6, 2026

    @LinuxServer-CI
    Contributor

    This issue has been automatically marked as stale because it has not had recent activity. This might be due to missing feedback from OP. It will be closed if no further activity occurs. Thank you for your contributions.

  11. moved this from Issues to Done in Issue & PR Trackeron Aug 5, 2026
  12. LinuxServer-CI commented on Sep 4, 2026

    @LinuxServer-CI
    Contributor

    This issue is locked due to inactivity

  13. locked as resolved and limited conversation to collaborators on Sep 4, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions