
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:
1
2
3
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:
1
2
3
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 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:
1
2
3
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
1. ¿Qué diferencia hay entre card1 y renderD128 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 IA.
2. ¿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-startautomáticamente.3. ¿Puedo usar este script en Proxmox 8?
Sí, la lógica permanece igual. Solo ajusta la path y el ID del contenedor.
4. ¿Alguien más ha tenido un error similar?
Este patrón es frecuente en LXC sin privilegios: los dispositivos se mapean con
root:rootpor 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!
Loading comments from Disqus ...