Skip to main content
  1. Posts/

How to Fix 'Device /dev/dri/card0 Does Not Exist' Error in Jellyfin LXC on Proxmox

Noor Khafidzin
Author
Noor Khafidzin
A homelab enthusiast obsessed with system efficiency and the art of troubleshooting.
Table of Contents

Running Jellyfin inside a Proxmox LXC container is a popular and resource-efficient way to build a self-hosted media server. But there is one error that reliably frustrates homelab users, especially after a hardware upgrade or system reboot: Task ERROR: Device /dev/dri/card0 does not exist.

This error completely breaks hardware transcoding in Jellyfin because the LXC container can no longer find the GPU that was passed through. This article explains the root cause and a permanent fix you can apply directly on the Proxmox host.


Why Does This Error Happen?
#

When a Proxmox host boots, the Linux kernel automatically loads a number of drivers. One of them is SimpleDRM (simpledrm), a generic display driver that the kernel uses as a fallback to render output during the early boot phase, before the real GPU driver is ready.

Here is the problem: SimpleDRM registers itself as a DRI device before the actual GPU driver (such as i915 for Intel or amdgpu for AMD) has time to initialize. This makes the /dev/dri/card* numbering non-deterministic across reboots:

  • First boot: real GPU registers as /dev/dri/card0, SimpleDRM as card1
  • Next boot: order may flip, real GPU becomes /dev/dri/card1

Since the LXC configuration is hardcoded to use card0, every time the real GPU “lands” on card1, the container fails to find the device and throws the error.


The Fix: Disable SimpleDRM via Kernel Boot Parameter
#

The cleanest and most permanent solution is to disable SimpleDRM using the initcall_blacklist kernel boot parameter. This prevents simpledrm from initializing at all, so the real GPU driver always registers first and gets a consistent device number.

First, determine which bootloader your Proxmox host is using:

# Check for GRUB or systemd-boot
efibootmgr -v | grep -i 'grub\|systemd'
# or
ls /boot/grub /boot/efi/EFI/proxmox 2>/dev/null

If Using GRUB
#

Edit the GRUB configuration file on the Proxmox host:

vi /etc/default/grub

Find the GRUB_CMDLINE_LINUX line and append the following parameter to the end of the existing value:

GRUB_CMDLINE_LINUX="... initcall_blacklist=simpledrm_platform_driver_init"

Before and after example:

# Before
GRUB_CMDLINE_LINUX="quiet"

# After
GRUB_CMDLINE_LINUX="quiet initcall_blacklist=simpledrm_platform_driver_init"

Then apply the changes and regenerate the GRUB configuration:

update-grub

If Using systemd-boot
#

Edit the kernel cmdline file:

vi /etc/kernel/cmdline

Append the parameter to the end of the existing line:

root=... quiet initcall_blacklist=simpledrm_platform_driver_init

Then regenerate the boot configuration using Proxmox’s built-in tool:

proxmox-boot-tool refresh

Reboot the Proxmox Host
#

After saving your changes and refreshing the boot config, perform a full reboot of the Proxmox host:

reboot

Once the host is back online, verify that the GPU is consistently registered at card0:

ls -la /dev/dri/

The output should be stable, and your real GPU will always appear as card0 going forward.


Known Side Effect
#

There is one trade-off with this approach: boot splash text will not appear after selecting a kernel in the bootloader menu. This is because SimpleDRM is responsible for rendering text output on screen during the early boot phase, before the full GPU driver is active.

The Proxmox host itself will still run completely normally. You can always review boot logs with:

dmesg | less
# or
journalctl -b

For a homelab setup, this is rarely a concern since you almost never need to watch the boot screen directly.


Verify Hardware Transcoding in Jellyfin
#

After the host reboots, start the Jellyfin LXC container again and confirm there are no startup errors. Then verify from inside the container:

# Enter the LXC container
pct enter <CTID>

# Check that /dev/dri/card0 is available
ls -la /dev/dri/

# Check GPU accessibility
vainfo  # for Intel VA-API
# or
radeontop  # for AMD

In the Jellyfin dashboard, go to Dashboard > Playback > Transcoding and confirm that hardware acceleration is active with no error messages.


Summary
#

The Task ERROR: Device /dev/dri/card0 does not exist error in Jellyfin LXC on Proxmox is not caused by a misconfigured LXC setup. It is caused by the Linux kernel loading SimpleDRM before the actual GPU driver, making /dev/dri/card* device numbering non-deterministic between reboots.

The fix is straightforward: add initcall_blacklist=simpledrm_platform_driver_init to the kernel boot parameters on the Proxmox host, refresh the boot config, and reboot. Your GPU will register consistently as card0 from that point on.

This solution was originally shared by the community in GitHub issue ProxmoxVE community-scripts #6270 and has been confirmed to work across various GPU setups (Intel, AMD) on Proxmox.


References
#

Related


Load Comments