Doba čtení: 9 minut
Snad vás to nasměruje, pokud řešíte podobný hw a sw problém. Stanice HP ZBook Fury 17 G7 s NVIDIA Quadro RTX 3000 měla několik souvisejících problémů:
* na novém kernelu se systém při startu grafiky zasekával,
* někdy bylo nutné bootovat starší kernel 5.15,
* při zapojených třech monitorech SDDM/Xorg nedokázal nastartovat,
* některé monitory nebyly detekované,
* objevovaly se NVIDIA API mismatch chyby,
* `nvidia-smi` někdy nefungovalo,
* systém měl za sebou soft-lockupy, kernel Oops a tvrdé restarty.
V logu bylo například:
Unable to read EDID for display device DP-4
Unable to read EDID for display device DP-5
The requested configuration of display devices (…) is not supported
„`
a následně SDDM:
Failed to read display number from pipe
Could not start Display server
„`
Současně byly nalezeny různé verze NVIDIA kernelového modulu a userspace knihoven.
—
# 2. Hlavní příčina
Hlavní problém grafiky nebyl samotný kernel ani grafická karta.
Byla rozbitá a nekonzistentní instalace NVIDIA.
V různých částech systému byly současně verze:
590.48.01
595.71.05
595.84
„`
Historie APT ukázala, že při pokusu nainstalovat `nvidia-driver-590` se současně natahoval NVIDIA stack řady 595.
Později byl celý 595 stack násilně downgradován z `595.84` na `595.71.05`.
Následně byly části NVIDIA instalace znovu odstraněny.
Výsledkem byl stav typu:
kernel module NVIDIA: 595.71.05
NVML/userspace: 590.48.01
„`
což způsobovalo:
Failed to initialize NVML: Driver/library version mismatch
„`
a v Xorg:
NVRM: API mismatch
„`
—
# 3. Diagnostika
Byl vytvořen kompletní diagnostický archiv:
sudo bash <<‚EOF‘
OUT=“/tmp/FULL_DIAG_$(date +%Y%m%d_%H%M%S)“
mkdir -p „$OUT“
uname -a > „$OUT/kernel.txt“
cat /proc/cmdline >> „$OUT/kernel.txt“
cat /etc/os-release > „$OUT/os.txt“
journalctl –list-boots > „$OUT/boots.txt“
journalctl -k -b –no-pager > „$OUT/kernel-current.log“
journalctl -k -b -1 –no-pager > „$OUT/kernel-prev1.log“
journalctl -k -b -2 –no-pager > „$OUT/kernel-prev2.log“
journalctl -k -b -3 –no-pager > „$OUT/kernel-prev3.log“
lspci -nnk > „$OUT/lspci-nnk.txt“
lsmod > „$OUT/lsmod.txt“
nvidia-smi -q > „$OUT/nvidia-smi.txt“ 2>&1
cat /proc/driver/nvidia/version > „$OUT/nvidia-kernel-version.txt“ 2>&1
modinfo nvidia > „$OUT/modinfo-nvidia.txt“ 2>&1
modinfo nouveau > „$OUT/modinfo-nouveau.txt“ 2>&1
dpkg -l | grep -Ei ‚nvidia|nouveau|linux-image|linux-modules‘ \
> „$OUT/packages.txt“
tar -czf „$OUT.tar.gz“ -C /tmp „$(basename „$OUT“)“
echo „HOTOVO: $OUT.tar.gz“
EOF
„`
—
# 4. Kontrola NVIDIA balíků
Použito:
apt-cache policy \
nvidia-driver-590 \
nvidia-driver-595 \
nvidia-kernel-common-590 \
nvidia-kernel-common-595 \
libnvidia-gl-590 \
libnvidia-gl-595 \
libnvidia-compute-590 \
libnvidia-compute-595
„`
a:
dpkg -l | grep -E ‚nvidia|libnvidia‘
„`
APT simulace následně ukázala, že instalace `nvidia-driver-590` by sama přitáhla řadu 595, takže 590 nebylo vhodné řešení.
—
# 5. Vyčištění rozbité NVIDIA instalace
Nejdříve byly odstraněny HOLD stavy:
apt-mark unhold \
libnvidia-compute-595:i386 \
libnvidia-compute-590 \
nvidia-kernel-common-590 \
nvidia-prime \
nvidia-settings \
screen-resolution-extra \
linux-image-generic 2>/dev/null || true
„`
Potom vyčištění:
apt purge -y ‚nvidia-*‘ ‚libnvidia-*‘
apt autoremove –purge -y
apt update
„`
Po zjištění chování metabalíku 590 se přešlo definitivně na řadu 595.
—
# 6. Instalace správného NVIDIA driveru
Cílová verze:
595.84-0ubuntu0.24.04.1
„`
Instalace:
apt-mark unhold nvidia-driver-590 nvidia-dkms-590 2>/dev/null || true
apt purge -y libnvidia-compute-595:i386
apt update
apt install -y \
linux-headers-5.15.0-174-generic \
linux-headers-6.8.0-107-generic \
dkms \
nvidia-driver-595=595.84-0ubuntu0.24.04.1
„`
Po instalaci byl celý NVIDIA userspace sjednocen na `595.84`.
—
# 7. Ověření DKMS
Použito:
dkms status
„`
Výsledek:
nvidia/595.84, 5.15.0-174-generic, x86_64: installed
nvidia/595.84, 6.8.0-107-generic, x86_64: installed
„`
Ověření modulů:
modinfo -k 6.8.0-107-generic nvidia | \
grep -E ‚^(filename|version|vermagic)‘
modinfo -k 5.15.0-174-generic nvidia | \
grep -E ‚^(filename|version|vermagic)‘
„`
Výsledek:
6.8.0-107:
version: 595.84
5.15.0-174:
version: 595.84
„`
Tím byl odstraněn původní `API mismatch`.
—
# 8. Initramfs
Bylo provedeno:
update-initramfs -u -k 6.8.0-107-generic
update-initramfs -u -k 5.15.0-174-generic
„`
Kontrola modulů:
find /lib/modules/6.8.0-107-generic \
-type f -iname ‚nvidia*.ko*‘
„`
Výsledek obsahoval:
nvidia.ko.zst
nvidia-drm.ko.zst
nvidia-modeset.ko.zst
nvidia-uvm.ko.zst
nvidia-peermem.ko.zst
„`
Secure Boot:
„`bash
mokutil –sb-state
„`
Výsledek:
SecureBoot disabled
„`
Nouveau byl blacklistovaný:
blacklist nouveau
options nouveau modeset=0
„`
—
# 9. Kernel
Výchozí kernel byl nastaven:
6.8.0-107-generic
„`
GRUB:
sudo rm -f /etc/X11/xorg.conf.d/10-nvidia-3mon.conf
sudo rm -f /etc/X11/xorg.conf
sudo update-grub
„`
Kontrola:
uname -r
„`
Finálně systém běží:
6.8.0-107-generic
„`
NVIDIA na tomto kernelu funguje správně:
NVIDIA-SMI 595.84
Driver Version: 595.84
Quadro RTX 3000
„`
—
# 10. Problém tří monitorů
Po opravě driveru fungoval jen jeden monitor:
DP-6
„`
Následně se zjistilo:
DP-4 connected
DP-5 disconnected
DP-6 connected
„`
DP-4 měl normálně načtené režimy včetně 1920×1080.
Aktivace:
xrandr \
–output DP-4 \
–mode 1920×1080 \
–rate 60 \
–right-of DP-6
„`
Kontrola:
xrandr –listmonitors
„`
Výsledek:
Monitors: 2
DP-6
DP-4
„`
—
# 11. DP-4 a DP-5 nejsou samostatné fyzické konektory
Pomocí:
nvidia-settings -q dpys
„`
se zjistilo:
DP-4 -> Connector-2
DP-5 -> Connector-2
DP-6 -> Connector-3
„`
Takže DP-4 a DP-5 jsou dvě logické větve stejného fyzického NVIDIA Connectoru.
Proto při aktivaci DP-5:
DP-4 disconnected
DP-5 connected
„`
a naopak.
Nebyla to chyba grafické karty ani omezení na dva monitory.
—
# 12. Připojení třetího monitoru na samostatný konektor
Třetí monitor byl přepojen na jinou fyzickou obrazovou větev.
Potom:
xrandr –query | grep -E ‚^DP-[0-6]‘
„`
ukázalo:
DP-0 connected
DP-5 connected
DP-6 connected
„`
A `nvidia-settings` potvrdilo:
DP-0 -> Connector-0
DP-5 -> Connector-2
DP-6 -> Connector-3
„`
To jsou tři samostatné fyzické obrazové větve.
—
# 13. Aktivace tří monitorů
Použitý příkaz:
xrandr \
–output DP-4 –off \
–output DP-0 –auto –left-of DP-6 \
–output DP-6 –auto –primary \
–output DP-5 –auto –right-of DP-6
„`
Výsledek:
Monitors: 3
DP-0 1920×1080
DP-6 1920×1080
DP-5 1920×1080
„`
Tím byl problém tří monitorů vyřešen.
—
# 14. Finální požadované rozmístění
Požadované pořadí zleva doprava:
Notebook/LG | MSI | ProLite
„`
Finální mapování:
DP-6 = notebook/LG
DP-0 = MSI
DP-5 = Iiyama ProLite
„`
Finální příkaz:
xrandr \
–output DP-6 –mode 1920×1080 –pos 0x0 –primary \
–output DP-0 –mode 1920×1080 –pos 1920×0 \
–output DP-5 –mode 1920×1080 –pos 3840×0 \
–output DP-4 –off
„`
Výsledná pracovní plocha:
0–1919 = notebook/LG
1920–3839 = MSI
3840–5759 = ProLite
„`
Celková plocha:
5760 × 1080
„`
—
# 15. Trvalé uložení konfigurace monitorů
Vytvořen skript:
sudo tee /usr/local/bin/monitory-3x.sh >/dev/null <<‚EOF‘
#!/bin/bash
sleep 3
if xrandr –query | grep -q ‚^DP-6 connected‘ && \
xrandr –query | grep -q ‚^DP-0 connected‘ && \
xrandr –query | grep -q ‚^DP-5 connected‘; then
xrandr \
–output DP-4 –off \
–output DP-6 –mode 1920×1080 –pos 0x0 –primary \
–output DP-0 –mode 1920×1080 –pos 1920×0 \
–output DP-5 –mode 1920×1080 –pos 3840×0
fi
EOF
sudo chmod +x /usr/local/bin/monitory-3x.sh
„`
Autostart:
sudo mkdir -p /etc/xdg/autostart
sudo tee /etc/xdg/autostart/monitory-3x.desktop >/dev/null <<‚EOF‘
[Desktop Entry]
Type=Application
Name=3 monitory
Exec=/usr/local/bin/monitory-3x.sh
Terminal=false
X-GNOME-Autostart-enabled=true
EOF
„`
Tím se po přihlášení automaticky nastaví správné rozmístění.
—
# 16. Ochrana NVIDIA před automatickou změnou
Aby aktualizace znovu nerozbila kombinaci NVIDIA knihoven a kernel modulů:
apt-mark hold $(dpkg-query -W -f=’${binary:Package}\n‘ | \
grep -E ‚^(nvidia|libnvidia|xserver-xorg-video-nvidia).*595‘)
„`
Kontrola:
apt-mark showhold | grep -E ‚nvidia|libnvidia‘
„`
Minimálně byly podrženy:
nvidia-driver-595
nvidia-dkms-595
nvidia-kernel-common-595
„`
—
# 17. Finální stav
Funkční konfigurace:
OS:
xUbuntu 24.04
Kernel:
6.8.0-107-generic
GPU:
NVIDIA Quadro RTX 3000
NVIDIA:
595.84
DKMS:
595.84 pro kernel 5.15
595.84 pro kernel 6.8
Nouveau:
blacklist
Secure Boot:
disabled
Monitory:
3 × 1920×1080
Rozložení:
DP-6 -> notebook/LG -> vlevo
DP-0 -> MSI -> uprostřed
DP-5 -> ProLite -> vpravo
„`
—
# 18. Co bylo skutečnou příčinou
Byly zde dvě hlavní příčiny.
### A. Rozbitý NVIDIA software stack
Systém měl současně několik verzí NVIDIA:
590.x
595.71
595.84
„`
Kernel modul a userspace knihovny si neodpovídaly.
To způsobovalo:
API mismatch
NVML Driver/library version mismatch
Xorg startup failure
SDDM startup failure
„`
Opraveno kompletním sjednocením na:
NVIDIA 595.84
„`
### B. Nesprávné použití výstupů monitorů
`DP-4` a `DP-5` nebyly dva samostatné fyzické konektory.
Oba patří:
Connector-2
„`
Proto nemohly být současně použity jako dva nezávislé monitory.
Třetí monitor byl přesunut na:
DP-0 -> Connector-0
„`
a finálně jsou použity:
DP-0 -> Connector-0
DP-5 -> Connector-2
DP-6 -> Connector-3
„`
Tím jsou všechny tři monitory skutečně nezávislé.
—
# 19. Co už nedělat
Nepoužívat současně:
DP-4 + DP-5
„`
jako dva monitory.
Nevytvářet pevný:
/etc/X11/xorg.conf
„`
s natvrdo definovanými třemi monitory.
Neinstalovat bez rozmyslu:
nvidia-driver-590
„`
protože na tomto systému APT při jeho instalaci řešil závislosti přes řadu 595.
Neprovádět downgrade NVIDIA bez kontroly všech:
nvidia-*
libnvidia-*
DKMS
kernel module
NVML
Xorg
„`
—
# 20. Rychlá kontrola funkčního stavu
Kdykoliv bude potřeba ověřit stav:
echo ‚===== KERNEL =====‘
uname -r
echo ‚===== NVIDIA =====‘
nvidia-smi
echo ‚===== MODULE =====‘
modinfo nvidia | grep -E ‚^(version|vermagic)‘
echo ‚===== DKMS =====‘
dkms status
echo ‚===== MONITORS =====‘
xrandr –listmonitors
echo ‚===== OUTPUTS =====‘
xrandr –query | grep -E ‚^DP-[0-6]‘
echo ‚===== HOLDS =====‘
apt-mark showhold | grep -E ‚nvidia|libnvidia‘
„`
Správný cílový stav:
kernel 6.8.0-107
NVIDIA 595.84
DKMS 595.84
3 monitory
DP-6 + DP-0 + DP-5
„`
—
# Závěr
Problém nebyl způsoben tím, že by Quadro RTX 3000 neuměla tři monitory.
Grafická část byla rozbitá kombinací několika verzí NVIDIA driveru a následně jsme zjistili, že dva zdánlivě odlišné výstupy `DP-4` a `DP-5` jsou ve skutečnosti alternativy stejného NVIDIA `Connector-2`.
Po sjednocení NVIDIA na `595.84`, návratu na kernel `6.8.0-107` a připojení monitorů přes tři nezávislé konektory fungují všechny tři monitory současně.
Finální rozložení:
Notebook/LG vlevo → MSI uprostřed → ProLite vpravo.