HP ZBook Fury 17 G7 – oprava NVIDIA, kernelu a 3 monitorů | Kolegos problemos

HP ZBook Fury 17 G7 – oprava NVIDIA, kernelu a 3 monitorů | Kolegos problemos

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.

Předchozí článek CisloRadar.cz: Projekt, který pomáhá odhalit neznámá telefonní čísla