Marcos Ramírez BETA
Terminal mostrando error de VAAPI en Jellyfin dentro de un contenedor LXC de Proxmox

Solucionar VAAPI en Jellyfin LXC sin privilegios de Proxmox

· Actualizado 1 de mayo de 2026 · ⏱ 3+ min lectura

Este post es la continuación de Jellyfin cortes 4K y disco lleno. Hace un par de días parecía que todo estaba arreglado y que la transcodificación funcionaba bien, pero resulta que no: la GPU no estaba bien configurada y los cortes seguían apareciendo.

Problema – Error de transcodificación en Jellyfin

Jellyfin muestra la siguiente excepción:

Device creation failed: -542398533.
Failed to set value 'vaapi=va:,vendor_id=0x8086,driver=iHD' for option 'init_hw_device': Generic error in an external library
Error parsing global options: Generic error in an external library

Esto ocurre aunque la comprobación de vainfo funciona dentro del contenedor y el driver iHD está presente.

Diagnóstico – ¿Por qué Jellyfin no accede a /dev/dri?

En el nodo Proxmox:

ls -la /dev/dri/
# crw-rw---- 1 root video  226,   1 card1
# crw-rw---- 1 root render 226, 128 renderD128

Al inspectar el LXC (ID 108) los dispositivos aparecen como root:root en lugar de root:video / root:render, bloqueando el acceso del usuario jellyfin.

Solución – Hook script de Proxmox para cambiar permisos

# Create the snippets directory if it doesn't exist
mkdir -p /var/lib/vz/snippets
# Create the hook script
cat > /var/lib/vz/snippets/lxc-108-dri-perms.sh << 'EOF'
#!/bin/bash
VMID="$1"
PHASE="$2"
if [ "$VMID" != "108" ] || [ "$PHASE" != "post-start" ]; then
    exit 0
fi
sleep 2
lxc-attach -n 108 -- chown root:render /dev/dri/renderD128
lxc-attach -n 108 -- chown root:video  /dev/dri/card1
EOF
chmod +x /var/lib/vz/snippets/lxc-108-dri-perms.sh
# Register the hook script in the LXC config
pct set 108 --hookscript local:snippets/lxc-108-dri-perms.sh
# Restart the LXC (pct restart does not exist in Proxmox 9)
pct stop 108 && pct start 108

Al instalar y registrar el script (pct set 108 --hookscript local:snippets/lxc-108-dri-perms.sh) los dispositivos adquieren la propiedad correcta. Verifica:

pct exec 108 -- ls -la /dev/dri/
# crw-rw---- 1 root video  226,   1 card1
# crw-rw---- 1 root render 226, 128 renderD128

Con los permisos corregidos, Jellyfin transcodifica vía VAAPI sin errores.

Resultados – Transcodificación confiable y sin disrupciones

Jellyfin ahora accede a todos los dispositivos DRI y la funcionalidad de hardware transcoding con Intel Quick Sync funciona de manera estable.

FAQ

¿Qué diferencia hay entre <em>card1</em> y <em>renderD128</em> en /dev/dri?

card1 es el dispositivo principal de renderizado de la GPU; renderD128 permite la entrada VRAM sin asociarse directamente a la pantalla, usado para streaming e Inteligencia Artificial.

¿Necesito reiniciar el contenedor cada vez que cambie los permisos?

Solo es necesario hacerlo una vez después de instalar el hook. Posteriormente el script corre en post-start automáticamente.

¿Puedo usar este script en Proxmox 8?

Sí, la lógica permanece igual. Solo ajusta la path y el ID del contenedor.

¿Alguien más ha tenido un error similar?

Este patrón es frecuente en LXC sin privilegios: los dispositivos se mapean con root:root por defecto.

Conclusión

Con el hook script y la corrección de permisos, Jellyfin transcodifica sin errores. Mantén este esquema en tu entorno Proxmox para evitar caídas inesperadas de la biblioteca de VAAPI. ¿Tienes dudas con la configuración? Escríbeme o deja un comentario. Compártelo si te ha gustado. ¡Y hasta aquí por hoy!

Artículos relacionados

Pantalla de televisión con reproductor de video congelado, cuarto oscuro, atmósfera de cine en casa

Cómo resolví los cortes de Jellyfin en 4K: disco lleno y más

Películas en 4K que se cortan a los 5 minutos, salvapantallas que salta solo... No era la red. El disco del LXC estaba al 100%. Descubrí y solucioné cinco problemas encadenados: disco lleno que impedía escribir logs y segmentos de transcoding, archivo MKV corrupto con error EBML, falta de aceleración por hardware Quick Sync en Intel HD Graphics 530, montaje NTFS incorrecto que no permitía borrar archivos, y NFS que no detectaba archivos nuevos por falta de inotify. Aprende a diagnosticar con journalctl, ffprobe y ffmpeg.

✏️ 1 may 2026 21:45 5 min Marcos Ramírez Lucía