Home
» LINUX
»
Come risolvere il problema del mancato caricamento dei driver NVIDIA dopo un aggiornamento del kernel su Ubuntu
Come risolvere il problema del mancato caricamento dei driver NVIDIA dopo un aggiornamento del kernel su Ubuntu
Un aggiornamento del kernel di Ubuntu può far sì che un sistema NVIDIA si avvii normalmente, ma il driver proprietario non venga più caricato. I sintomi visibili variano: nvidia-smipotrebbe comparire un messaggio di errore che indica l'impossibilità di comunicare con il driver, le applicazioni CUDA potrebbero smettere di riconoscere la GPU, il desktop potrebbe tornare al rendering software o il sistema modprobe nvidiapotrebbe bloccarsi completamente. La soluzione pratica consiste nell'identificare quale componente ha causato il problema, anziché reinstallare tutto in una volta.
Questo documento di riferimento si concentra sui driver NVIDIA inclusi nei pacchetti Ubuntu e sulle attuali linee guida di Canonical. A ottobre 2026, Ubuntu raccomandava lo ubuntu-driversstrumento o l'applicazione Driver aggiuntivi per la maggior parte dei sistemi e consigliava l'utilizzo di moduli del kernel precompilati e firmati, ove disponibili. La documentazione ufficiale di NVIDIA per Ubuntu supporta anche Ubuntu 22.04, 24.04 e 26.04, ma la nomenclatura dei pacchetti è diversa nelle versioni più recenti, quindi non copiare il numero di una versione da un esempio a meno che non sia effettivamente disponibile per il tuo sistema.
Lista di controllo per una diagnosi rapida
Controllo
Comando
Cosa ti dice
Kernel in esecuzione
uname -r
L'esatta ABI del kernel che richiede un modulo NVIDIA corrispondente.
Stato del conducente
nvidia-smi
Se lo spazio utente è in grado di comunicare con il modulo del kernel NVIDIA caricato.
Moduli caricati
lsmod | grep -E 'nvidia|nouveau'
Non è chiaro se la GPU sia attualmente di proprietà di NVIDIA o di Nouveau.
Pacchetto consigliato
sudo ubuntu-drivers list
Rami dei driver che Ubuntu considera appropriati per l'hardware.
Avvio sicuro
mokutil --sb-state
Se i moduli del kernel di terze parti non firmati possano essere rifiutati.
Indizi utili per individuare incongruenze nelle API, rifiuti delle firme o errori di rilevamento.
Un tipico schema di errore post-aggiornamento: il nuovo kernel è in esecuzione, ma il modulo NVIDIA non viene caricato. Le versioni esatte del kernel e dei driver sul tuo sistema potrebbero essere diverse.
1. Conferma che il problema è iniziato con il kernel corrente
Innanzitutto, registra il kernel in esecuzione e lo stato attuale di NVIDIA:
Se nvidia-smifallisce e non nvidiacompaiono moduli in lsmod, l'errore si trova al di sotto del livello CUDA o dell'applicazione desktop. Se nvidia-smisegnala Failed to initialize NVML: Driver/library version mismatch, Canonical documenta questo come un'incongruenza tra spazio utente e modulo del kernel che spesso segue un aggiornamento del driver; un riavvio potrebbe essere sufficiente se il nuovo modulo è già installato.
Se è ancora possibile selezionare un kernel precedente da GRUB e il driver funziona correttamente, ciò dimostra chiaramente che il nuovo kernel non dispone di un modulo NVIDIA utilizzabile. Un kernel precedente rappresenta una soluzione temporanea utile, ma non è la soluzione definitiva, poiché è comunque necessario che il kernel e lo stack di driver attuali siano compatibili.
2. Chiedi a Ubuntu quale ramo del driver consiglia
Su un desktop o una workstation Ubuntu standard, utilizza la logica di selezione dei driver di Ubuntu anziché cercare di indovinare il ramo di installazione:
sudo apt update
sudo ubuntu-drivers list
Per la maggior parte dei sistemi desktop e da gioco, Canonical consiglia di utilizzare il driver UDA standard anziché un -serverpacchetto. Sui server di calcolo, fare riferimento alle linee guida per server, ubuntu-drivers list --gpgpuove appropriato. Se il sistema è stato precedentemente installato con il programma di installazione autonomo di NVIDIA .runo con un repository di terze parti, la combinazione di fonti di pacchetti diverse può rendere più difficile la diagnosi. Canonical avverte esplicitamente che i driver installati al di fuori dei metodi documentati possono sovrascrivere i componenti forniti da Ubuntu e interferire con Secure Boot.
Utilizza la funzionalità di rilevamento dei driver di Ubuntu per identificare il ramo appropriato per la GPU installata, invece di inserire manualmente una versione proveniente da un'altra macchina.
3. Controlla l'avvio protetto prima di ricostruire qualsiasi cosa
Secure Boot è una causa frequente per cui un modulo NVIDIA, pur essendo presente sul disco, non viene caricato. Verificane lo stato:
mokutil --sb-state
sudo modprobe nvidia
Se Secure Boot è abilitato e modproberestituisce un messaggio come Key was rejected by service, il kernel sta imponendo la fiducia nei moduli. Ubuntu impone la convalida dei moduli del kernel in Secure Boot sulle versioni amd64 supportate da anni. La soluzione preferita da Canonical è quella di utilizzare moduli NVIDIA firmati e precompilati quando disponibili. Se si utilizza intenzionalmente DKMS, Ubuntu potrebbe richiedere la creazione e la registrazione di una chiave del proprietario della macchina (MOK) al riavvio.
Non disabilitare Secure Boot come primo passaggio per la risoluzione dei problemi. Può essere un breve esperimento diagnostico in un ambiente controllato, ma la soluzione migliore è solitamente installare un modulo firmato o registrare correttamente il MOK. Canonical documenta la procedura di registrazione nella sua documentazione UEFI Secure Boot .
Il rifiuto della firma indica un problema di attendibilità di Secure Boot piuttosto che la mancanza di una GPU. Risolvere il problema di firma del modulo o di registrazione MOK invece di reinstallare ripetutamente le librerie dello spazio utente.
4. Verificare se il modulo NVIDIA corrispondente esiste per il kernel in esecuzione
I pacchetti NVIDIA precompilati di Ubuntu sono legati a un'ABI del kernel. Sostituisci DRIVER_BRANCHcon il ramo mostrato da ubuntu-drivers list:
Se il pacchetto è installato per il kernel corrente, procedere con i controlli di Secure Boot, Nouveau e dei log descritti di seguito. Se non è presente, installare il pacchetto del modulo corrispondente:
Canonical supporta anche l'installazione del metapackage di tipo flavor, ad esempio linux-modules-nvidia-${DRIVER_BRANCH}-generic, che aiuta i futuri aggiornamenti del kernel a scaricare i moduli NVIDIA corrispondenti. Il nome esatto del pacchetto dipende dalla versione di Ubuntu, dal tipo di kernel, dal ramo del driver e dall'eventuale utilizzo di una variante server, quindi verifica il candidato mostrato da APT prima di confermare.
Verificare le policy dei pacchetti aiuta a distinguere un modulo NVIDIA specifico del kernel mancante da un problema del driver in spazio utente.
5. Se si utilizza DKMS, assicurarsi che siano presenti gli header del kernel corrente
DKMS crea un modulo specifico per il kernel in esecuzione. Pertanto, necessita di file di intestazione del kernel compatibili. Canonical consiglia DKMS principalmente quando i moduli precompilati non sono disponibili, come nel caso di alcuni kernel personalizzati.
sudo apt install linux-headers-$(uname -r)
dkms status
Se la voce NVIDIA DKMS non mostra una compilazione riuscita per il kernel corrente, controlla il log di compilazione /var/lib/dkms/prima di tentare la rimozione casuale dei pacchetti. Gli errori tipici includono intestazioni mancanti, combinazioni compilatore/kernel non supportate o un problema di firma del modulo. Dopo aver corretto il prerequisito, reinstalla il pacchetto DKMS appropriato o utilizza il percorso automatico di Ubuntu:
sudo ubuntu-drivers install --include-dkms
Utilizzate quel comando solo quando DKMS è effettivamente necessario. La documentazione attuale di Canonical per i sistemi desktop afferma che i moduli precompilati sono la scelta preferibile per la maggior parte degli utenti, soprattutto con Secure Boot.
La corrispondenza degli header del kernel è necessaria quando DKMS deve compilare un modulo NVIDIA per il kernel corrente.
6. Installa il modulo precompilato mancante quando disponibile
Se il passaggio 4 ha mostrato che il kernel corrente non include il modulo NVIDIA precompilato, installarlo esplicitamente e lasciare che APT ricostruisca l'initramfs:
Verifica quindi che APT sia stato completato senza errori di dipendenza. Evita di forzare l'installazione dei pacchetti con dpkg --force-*; ciò potrebbe lasciare il modulo del kernel, le librerie dello spazio utente e il metapackage a versioni incompatibili.
Se non sei sicuro di quale ramo utilizzare, la riparazione generale più sicura è:
sudo ubuntu-drivers install
Canonical dichiara di ubuntu-driversutilizzare la stessa logica dell'applicazione Driver aggiuntivi e, per impostazione predefinita, sceglie driver precompilati e firmati, noti per funzionare con Secure Boot.
L'installazione del pacchetto di moduli specifico del kernel risolve il caso comune in cui il ramo del driver è presente ma il nuovo kernel non dispone del modulo NVIDIA corrispondente.
7. Riavviare dopo le modifiche al pacchetto
In questo caso, il riavvio non è una mera formalità. Il kernel in esecuzione può mantenere in memoria un modulo NVIDIA obsoleto, anche se APT ha già aggiornato le librerie in spazio utente sul disco. Canonical documenta specificamente questo problema come causa di un'incompatibilità tra la versione del driver e quella della libreria NVML dopo gli aggiornamenti.
sudo reboot
Dopo il riavvio, non reinstallare immediatamente il programma. Verifica prima il risultato con i comandi indicati nella sezione successiva.
Dopo aver modificato i driver o i moduli del kernel, riavvia il sistema in modo che il kernel carichi il modulo NVIDIA appena installato e i componenti dello spazio utente tornino alla stessa versione.
Una riparazione riuscita presenta tre segnali utili: nvidia-smielenca la GPU, lsmodmostra i moduli NVIDIA e /proc/driver/nvidia/versionriporta la versione del modulo in esecuzione. Per i carichi di lavoro CUDA, è necessario anche rieseguire l'applicazione o il framework che ha causato l'errore in precedenza; nvidia-smiquesto da solo dimostra la comunicazione tra i driver, non la compatibilità di tutte le librerie CUDA presenti nell'ambiente.
Uno stato finale ottimale: nvidia-smi è in grado di comunicare con la GPU e i moduli del kernel NVIDIA sono caricati. I valori mostrati sono a titolo di esempio e non rappresentano una versione obbligatoria.
Se il problema persiste: utilizzare il sintomo per scegliere l'azione successiva.
"Incompatibilità tra la versione del driver e quella della libreria"
Innanzitutto, riavvia il sistema. Quindi, confronta la versione del modulo del kernel in esecuzione con i pacchetti installati. Canonical segnala che i componenti dello spazio utente aggiornati possono temporaneamente non essere compatibili con un modulo più vecchio ancora caricato in memoria. Se la discrepanza persiste dopo il riavvio, verifica la presenza di sorgenti di pacchetti miste e di più rami di driver.
“Nessun dispositivo trovato” e Nouveau è caricato
Controllo:
lsmod | grep nouveau
La documentazione di Ubuntu Server afferma che Nouveau può entrare in conflitto con il driver proprietario NVIDIA in questa situazione. Se Nouveau è caricato e si intende utilizzare il driver proprietario, Canonical documenta la procedura per bloccarlo e ricostruire l'initramfs:
echo "blacklist nouveau" | sudo tee /etc/modprobe.d/disable-nouveau.conf
echo "options nouveau modeset=0" | sudo tee -a /etc/modprobe.d/disable-nouveau.conf
sudo update-initramfs -u
sudo reboot
Non bloccare Nouveau solo perché è presente sul disco; prima verifica che sia effettivamente caricato e che sia la causa del problema.
modprobe nvidiadice che la chiave è stata rifiutata
Tornate al percorso di avvio protetto (Secure Boot). Utilizzate, quando possibile, moduli Ubuntu firmati, oppure completate la registrazione MOK per un modulo DKMS. Reinstallare ripetutamente lo stesso modulo non firmato non modificherà la decisione di attendibilità.
Il nuovo kernel non ha un pacchetto di moduli compatibile
Avvia temporaneamente un kernel più vecchio e funzionante, mantieni il sistema aggiornato e verifica se Ubuntu fornisce un modulo precompilato compatibile con il kernel più recente. Se stai utilizzando deliberatamente un kernel personalizzato, DKMS potrebbe essere appropriato, ma leggi il registro di compilazione e verifica la firma di Secure Boot. Evita di bloccare un kernel vecchio a tempo indeterminato a meno che tu non abbia un piano di manutenzione per gli aggiornamenti di sicurezza.
Comandi da raccogliere prima di chiedere aiuto
Questi comandi forniscono un pacchetto diagnostico compatto senza modificare il sistema:
Includi la versione di Ubuntu da lsb_release -ao /etc/os-release, il kernel esatto da uname -re se il driver è stato originariamente installato tramite i pacchetti di Ubuntu, il repository di NVIDIA, un PPA o il programma di installazione autonomo. Questi dettagli sono solitamente più importanti dell'affermazione generica che "il driver si è bloccato dopo un aggiornamento".
Prevenzione attuale
Preferisci il flusso di lavoro di Ubuntu ubuntu-driverso quello di driver aggiuntivi per i normali sistemi desktop.
Mantieni installato il metapackage della variante del kernel in modo che i futuri aggiornamenti del kernel possano includere i moduli NVIDIA corrispondenti.
Riavvia il sistema dopo gli aggiornamenti del kernel o dei driver NVIDIA, invece di continuare con uno stack misto in memoria/su disco.
Mantieni disponibile almeno un kernel funzionante finché non avrai la conferma che il nuovo kernel si avvia con il driver della GPU.
Evitate di mescolare pacchetti Ubuntu, PPA, il programma di installazione autonomo di NVIDIA e repository multipli, a meno che non vogliate gestirne intenzionalmente le conseguenze.
Il ramo esatto del driver, l'ABI del kernel e i nomi dei pacchetti dipendono dalla versione. Sostituisci sempre i valori riportati dal tuo sistema e da APT, anziché considerare le versioni di esempio come universali.