Skip to content

Troubleshooting iGPU Intel HD 2000

Problèmes courants et solutions pour le passthrough iGPU Intel vers LXC et Jellyfin.

Problème 1 : Devices DRI Absents dans LXC

Symptôme

pct exec 100 -- ls -la /dev/dri/
ls: cannot access '/dev/dri/': No such file or directory

Diagnostic

# 1. Vérifier config appliquée
cat /etc/pve/lxc/100.conf | grep -A4 "GPU"

# 2. Vérifier devices sur host
ls -la /dev/dri/

# 3. Logs conteneur
journalctl -u pve-container@100 | grep -i dri | tail -20

Solutions

Solution 1 : Vérifier syntaxe configuration

# Éditer config (attention espaces)
nano /etc/pve/lxc/100.conf

# Lignes doivent être exactement :
lxc.cgroup2.devices.allow: c 226:0 rwm
lxc.cgroup2.devices.allow: c 226:128 rwm
lxc.mount.entry: /dev/dri/card0 dev/dri/card0 none bind,optional,create=file
lxc.mount.entry: /dev/dri/renderD128 dev/dri/renderD128 none bind,optional,create=file

Solution 2 : Forcer arrêt/démarrage

# Pas juste reboot, mais stop/start
pct stop 100
sleep 5
pct start 100

# Vérifier
pct exec 100 -- ls -la /dev/dri/

Solution 3 : Vérifier permissions host

# Sur host Proxmox
ls -la /dev/dri/
chmod 660 /dev/dri/card0
chmod 660 /dev/dri/renderD128

# Vérifier groupes
ls -l /dev/dri/

Solution 4 : Créer devices manuellement

# Si mount.entry ne crée pas devices
pct exec 100 -- mkdir -p /dev/dri
pct exec 100 -- mknod /dev/dri/card0 c 226 0
pct exec 100 -- mknod /dev/dri/renderD128 c 226 128
pct exec 100 -- chown root:video /dev/dri/card0
pct exec 100 -- chown root:render /dev/dri/renderD128
pct exec 100 -- chmod 660 /dev/dri/*

Problème 2 : VA-API Driver Non Trouvé

Symptôme

vainfo --display drm --device /dev/dri/renderD128
libva error: vaGetDriverNameByIndex() failed with unknown libva error
vaInitialize failed with error code -1 (unknown libva error),exit

Diagnostic

# Vérifier paquets installés
dpkg -l | grep -E "i965|intel-media|vainfo"

# Vérifier librairies
ldconfig -p | grep va

# Vérifier device accessible
ls -la /dev/dri/renderD128

Solutions

Solution 1 : Installer tous drivers Intel

# Dans LXC 100
apt update
apt install -y \
  intel-media-va-driver \
  i965-va-driver \
  intel-media-va-driver-non-free \
  vainfo \
  mesa-va-drivers \
  libva2 \
  libva-drm2

# Forcer rechargement librairies
ldconfig

# Tester
vainfo --display drm --device /dev/dri/renderD128

Solution 2 : Forcer driver i965

# Définir variable environnement
export LIBVA_DRIVER_NAME=i965

# Tester
vainfo --display drm --device /dev/dri/renderD128

# Si fonctionne, ajouter à docker-compose.yml
# environment:
#   - LIBVA_DRIVER_NAME=i965

Solution 3 : Vérifier permissions device

# User doit avoir accès au device
groups  # Doit inclure video et/ou render

# Ajouter user aux groupes
usermod -aG video,render $USER

# Ou tester en root
sudo vainfo --display drm --device /dev/dri/renderD128

Problème 3 : Jellyfin Ne Détecte Pas iGPU

Symptôme

Jellyfin Dashboard → Playback → Hardware acceleration: "No devices found"

Diagnostic

# 1. Vérifier devices dans conteneur Jellyfin
docker exec jellyfin ls -la /dev/dri/

# 2. Vérifier permissions user
docker exec jellyfin id jellyfin
docker exec jellyfin groups jellyfin

# 3. Logs Jellyfin
docker logs jellyfin 2>&1 | grep -i "hardware\|vaapi\|render" | tail -20

Solutions

Solution 1 : Vérifier docker-compose.yml

cd /opt/docker
cat docker-compose.yml | grep -A15 jellyfin

# Doit contenir :
# devices:
#   - /dev/dri/renderD128:/dev/dri/renderD128
#   - /dev/dri/card0:/dev/dri/card0
# group_add:
#   - "104"  # GID render

Solution 2 : Adapter GID render

# Vérifier GID render dans LXC
stat -c "%g" /dev/dri/renderD128

# Modifier docker-compose.yml avec bon GID
nano docker-compose.yml
# group_add:
#   - "105"  # Si GID différent

# Recréer conteneur
docker compose up -d --force-recreate jellyfin

Solution 3 : Vérifier user Jellyfin

# User doit faire partie groupe render dans conteneur
docker exec jellyfin groups jellyfin

# Si pas présent, vérifier group_add
# Ou ajouter manuellement
docker exec jellyfin usermod -aG render jellyfin

# Redémarrer
docker compose restart jellyfin

Solution 4 : Tester VA-API dans conteneur

# Installer vainfo dans conteneur
docker exec jellyfin apt update
docker exec jellyfin apt install -y vainfo

# Tester détection
docker exec jellyfin vainfo --display drm --device /dev/dri/renderD128

Problème 4 : Transcoding Retombe sur CPU

Symptôme

Jellyfin Activity montre transcoding sans "(hw)", charge CPU 80%+

Diagnostic

# 1. Logs Jellyfin temps réel
docker logs -f jellyfin 2>&1 | grep -E "transcode|hardware|vaapi"

# 2. Vérifier codec source
# Dashboard → Activity → détails vidéo

# 3. Chercher erreurs
docker logs jellyfin 2>&1 | grep -i error | tail -20

Causes Fréquentes

Cause Détection Solution
Codec non supporté Source HEVC/VP9/AV1 Normal, iGPU incompatible
Résolution >1080p Source 4K Limiter à 1080p ou CPU
Profil H.264 10-bit Hi10P anime Normal, CPU fallback
Config Jellyfin incorrecte Pas "(hw)" sur H.264 1080p Vérifier paramètres
Driver crash Logs erreur VA-API Redémarrer Jellyfin

Solutions

Solution 1 : Vérifier configuration Jellyfin

Dashboard → Playback → Hardware acceleration:

  • Device : /dev/dri/renderD128
  • Enable hardware decoding : ✅ H.264, MPEG-2, VC-1
  • Enable hardware encoding : ✅ H.264 uniquement
  • Enable HEVC encoding : ❌ Désactivé

Solution 2 : Tester avec vidéo compatible

# Télécharger sample H.264 1080p 8-bit
cd /tmp
wget https://test-videos.co.uk/vids/bigbuckbunny/mp4/h264/1080/Big_Buck_Bunny_1080_10s_1MB.mp4

# Copier dans media Jellyfin
cp Big_Buck_Bunny_1080_10s_1MB.mp4 /mnt/storage/media/test/

# Scanner bibliothèque, tester transcoding

Solution 3 : Forcer transcoding via client

  • Paramètres lecture → Qualité
  • Limiter à 720p 4Mbps
  • Vérifier Activity pour "(hw)"

Solution 4 : Vérifier logs spécifiques

# Chercher raison fallback CPU
docker logs jellyfin 2>&1 | grep -B5 -A5 "software"

# Messages typiques :
# "Codec not supported by hardware" → Normal si HEVC
# "Resolution exceeds capability" → Normal si >1080p
# "Failed to initialize VA-API" → Problème driver

Problème 5 : Performance Dégradée (<2x)

Symptôme

Transcoding avec "(hw)" mais speed 1.5-2x seulement (vs 3-4x attendu)

Diagnostic

# 1. Vérifier fréquence GPU
cat /sys/kernel/debug/dri/0/i915_frequency_info | grep -E "cur|min|max"

# 2. Vérifier throttling thermique
dmesg | grep -i "thermal\|throttl"

# 3. Charge système
top -bn1

# 4. I/O disque
iostat -x 1 5

Solutions

Solution 1 : Vérifier throttling CPU/GPU

# Installer lm-sensors
apt install lm-sensors
sensors

# Températures normales :
# CPU : <75°C
# Si >85°C : nettoyer ventilateurs, renouveler pâte thermique

Solution 2 : Vérifier RAM disponible

free -h

# Si swap utilisé massivement :
# Augmenter RAM LXC ou réduire simultaneous transcodes

Solution 3 : Vérifier I/O disque

iostat -x 1 5

# %util élevé (>80%) = bottleneck disque
# Solution : media sur SSD, ou réduire I/O

Solution 4 : Augmenter ressources LXC temporairement

# Tester avec plus de CPU
pct set 100 --cores 6

# Tester transcoding
# Si amélioration, ajuster allocation

Solution 5 : Réduire simultaneous transcodes

Dashboard → Playback : - Max simultaneous transcodes : 1 (au lieu de 2) - Throttle transcodes : Activé

Problème 6 : Kernel Panic / System Freeze

Symptôme

Système se fige lors de transcoding iGPU, nécessite hard reboot

Diagnostic

# Après reboot, vérifier logs
journalctl -k -b -1 | grep -E "i915|gpu|drm"

# Chercher :
# - "GPU hang"
# - "Kernel panic"
# - "reset engine"

Solutions

Solution 1 : Désactiver power management iGPU

# Éditer options module i915
nano /etc/modprobe.d/i915.conf

# Ajouter
options i915 enable_rc6=0 enable_dc=0

# Régénérer initramfs
update-initramfs -u

# Reboot
reboot

Solution 2 : Downgrade kernel Proxmox

# Lister kernels disponibles
dpkg -l | grep pve-kernel

# Boot sur ancien kernel stable
# Grub : Advanced options → kernel 6.5 ou inférieur

# Tester stabilité

Solution 3 : Limiter fréquence GPU

# Forcer fréquence minimale
echo 850 > /sys/kernel/debug/dri/0/i915_max_freq

# Si stable, rendre permanent via script init

Solution 4 : Revenir à transcoding CPU

# Désactiver passthrough iGPU
nano /etc/pve/lxc/100.conf
# Commenter lignes GPU

pct reboot 100

# Jellyfin : Hardware acceleration = None

Vérifications Préventives

Script santé iGPU quotidien :

cat > /usr/local/bin/igpu-health-check << 'EOF'
#!/bin/bash
LOG="/var/log/igpu-health.log"

echo "=== $(date) ===" >> $LOG

# 1. Device accessible
if ! ls /dev/dri/renderD128 &>/dev/null; then
  echo "ERROR: renderD128 missing" >> $LOG
  exit 1
fi

# 2. Module i915 chargé
if ! lsmod | grep -q i915; then
  echo "ERROR: i915 module not loaded" >> $LOG
  exit 1
fi

# 3. GPU fréquence
FREQ=$(cat /sys/kernel/debug/dri/0/i915_frequency_info | grep "cur freq" | awk '{print $3}')
echo "GPU freq: $FREQ MHz" >> $LOG

# 4. LXC devices
if ! pct exec 100 -- test -e /dev/dri/renderD128; then
  echo "ERROR: iGPU not in LXC 100" >> $LOG
  exit 1
fi

echo "OK: All checks passed" >> $LOG
exit 0
EOF

chmod +x /usr/local/bin/igpu-health-check

# Cron quotidien
echo "0 6 * * * /usr/local/bin/igpu-health-check || logger -t igpu 'Health check failed'" | crontab -

Ressources


Dernière mise à jour : 27 janvier 2026