NVIDIA-PRIME: impossibile passare a Intel


10

Ogni volta che passo dalla mia gpu (gtx 1060) alla mia igpu (Intel 530), non riesco ad avviare. La schermata di caricamento è bloccata con il seguente messaggio:

[Non riuscito] Impossibile avviare il demone di persistenza NVIDIA. Vedi 'systemctl status nvidia-persistenced.service' per i dettagli.

Tuttavia, posso riavviare quando torno alla GPU Nvidia e il passaggio al mio igpu senza riavviare funziona temporaneamente. Sto usando Kubuntu 16.10 e solo il display del mio laptop interno. Questo è l'output quando passo al mio igpu:

sudo prime-select intel
Info: the current GL alternatives in use are: ['nvidia-378', 'nvidia-378']
Info: the current EGL alternatives in use are: ['nvidia-378', 'nvidia-378']
Info: selecting nvidia-378-prime for the intel profile
update-alternatives: using /usr/lib/nvidia-378-prime/ld.so.conf to provide /etc/ld.so.conf.d/x86_64-linux-gnu_GL.conf (x86_64-linux-gnu_gl_conf) in manual mode
update-alternatives: using /usr/lib/nvidia-378-prime/ld.so.conf to provide /etc/ld.so.conf.d/x86_64-linux-gnu_EGL.conf (x86_64-linux-gnu_egl_conf) in manual mode
update-alternatives: using /usr/lib/nvidia-378-prime/alt_ld.so.conf to provide /etc/ld.so.conf.d/i386-linux-gnu_GL.conf (i386-linux-gnu_gl_conf) in manual mode
update-alternatives: using /usr/lib/nvidia-378-prime/alt_ld.so.conf to provide /etc/ld.so.conf.d/i386-linux-gnu_EGL.conf (i386-linux-gnu_egl_conf) in manual mode

sudo prime-select nvidia
Info: the current GL alternatives in use are: ['nvidia-378-prime', 'nvidia-378-prime']
Info: the current EGL alternatives in use are: ['nvidia-378-prime', 'nvidia-378-prime']
Info: selecting nvidia-378 for the nvidia profile
update-alternatives: using /usr/lib/nvidia-378/ld.so.conf to provide /etc/ld.so.conf.d/x86_64-linux-gnu_GL.conf (x86_64-linux-gnu_gl_conf) in manual mode
update-alternatives: using /usr/lib/nvidia-378/ld.so.conf to provide /etc/ld.so.conf.d/x86_64-linux-gnu_EGL.conf (x86_64-linux-gnu_egl_conf) in manual mode
update-alternatives: using /usr/lib/nvidia-378/alt_ld.so.conf to provide /etc/ld.so.conf.d/i386-linux-gnu_GL.conf (i386-linux-gnu_gl_conf) in manual mode
update-alternatives: using /usr/lib/nvidia-378/alt_ld.so.conf to provide /etc/ld.so.conf.d/i386-linux-gnu_EGL.conf (i386-linux-gnu_egl_conf) in manual mode

Risultato di lspci -k | grep -EA2 'VGA | 3D'

00:02.0 VGA compatible controller: Intel Corporation HD Graphics 530 (rev 06)
        DeviceName:  Onboard IGD
        Subsystem: CLEVO/KAPOK Computer HD Graphics 530
--
01:00.0 VGA compatible controller: NVIDIA Corporation GP106M [GeForce GTX 1060] (rev a1)
        Subsystem: CLEVO/KAPOK Computer Device 6a03
        Kernel driver in use: nvidia

Ho provato a risolvere questo problema da solo per oltre una settimana e non ho idea di cosa fare. Tutto quello che ho provato è fallito.

Per favore potete aiutarmi?

AGGIORNAMENTO 5.2.2017:

L'ho provato di nuovo oggi e mi sono reso conto che il passaggio alla GPU Intel non funziona affatto con 375 e 378. Il logout si blocca sullo schermo. Quindi perché ha funzionato una volta? Se installo di nuovo tutti i driver dopo aver eliminato quelli vecchi e successivamente utilizzo prime-select Intel (senza riavvio!), Prime-select non aggiorna i profili primi -> Seleziona uno dei vecchi profili non NVIDIA (profili MESA invece di nvidia) e funziona. Ma non appena passo a un profilo nvidia o riavvio, i profili primi vengono aggiornati e non funziona più. Quindi immagino che ci sia qualcosa di sbagliato nelle alternative a EGl per la Intel Gpu? Ci scusiamo per l'inconveniente.

AGGIORNAMENTO 12.2.2017:

Ieri ho modificato il software nvidia-prime e corretto il bug. Presto pubblicherò (probabilmente la prossima settimana) la mia versione modificata e incollerò qui un link, ma riscontro ancora un problema: quando spengo il mio PC dopo aver eseguito sudo prime-select intel:

ksmserver si arresta in modo anomalo (sto usando Kubuntu, probabilmente non è un problema con Ubuntu)

-> il PC non si spegne completamente e vengono ripristinate le vecchie alternative di aggiornamento (errate) per la GPU Intel

-> Non riesco ad avviare.

Tuttavia, se corro sudo prime-select inteldopo l'arresto in modalità di ripristino, tutto funziona bene e posso usare la GPU Intel.

AGGIORNAMENTO 17.2.2017:

Ho pubblicato la mia soluzione alternativa e sto ancora cercando di correggere il bug nei repository ufficiali. Tuttavia, questo è probabilmente un bug in alternative di aggiornamento, quindi in seguito dovrò pubblicare una segnalazione di bug.

Nel frattempo, goditi la mia soluzione alternativa! Spero che funzioni anche per te. Se ci sono domande, si prega di lasciare un commento.

AGGIORNAMENTO 26.2.2017

Come sottolineato da @whizzzkid, la scheda grafica nvidia rimane ancora attiva dopo aver applicato la mia patch. Tuttavia, oggi sono stato in grado di risolvere questo problema. Probabilmente aggiornerò la mia risposta per includere la mia seconda patch la prossima settimana. Ecco alcuni test che ho eseguito:

Nvidia: 43-45 W.

Intel (NVIDIA ON): 29-31 W.

Intel (nvidia off): 15-17 W.


Modifica la domanda e aggiungi l'output del lspci -k | grep -EA2 'VGA|3D' comando terminal.
Pilota

Oh, vedo che i 10xx non hanno malla fine anche se sono mobili.
Pilota

Probabilmente nvidia-primenon li supporta ancora.
Pilota

Bene, la cosa interessante è che funziona finché non riavvio. Posso usare l'igpu se mi disconnetto e accedo di nuovo. Ma non appena riavvio non funziona più. E la GPU Nvidia funziona ed è supportata dal driver.
C11235,

1
Ho usato powertop per monitorare il consumo di energia. Mostra il consumo energetico solo se si utilizza la batteria come fonte di alimentazione. Dai un'occhiata a questa domanda o a quella pagina man per maggiori informazioni.
C11235

Risposte:


3

Ecco la mia soluzione / soluzione per il bug:

Se vuoi usare bumblebee invece di nvidia-prime, dai un'occhiata alla risposta fornita da @whizzzkid di seguito.

Testato con Kubuntu 16.10 a 64 bit usando KDE Plasma versione 7.5 e KDE Frameworks versione 5.26.0. I seguenti passaggi funzionano per me. Spero che funzionino anche per te, ma non posso garantirlo e non assumermi alcuna responsabilità in caso contrario. Ma sono felice di aiutarti se lasci un commento.

Nel mio caso, il problema era che l'aggiornamento-alternativa / usr / lib / nvidia-XYZ-prime / non funzionava affatto. Dovrebbe reindirizzare le chiamate al driver Intel-mesa, ma per qualche motivo non lo ha fatto. Quindi, probabilmente, dopo tutto è un bug nelle alternative di aggiornamento? Non ho ancora trovato un posto per segnalare un bug per le alternative di aggiornamento. Per favore, commenta se mi puoi aiutare.

Ho sostanzialmente modificato un po 'nvidia-prime per cambiare le alternative di aggiornamento direttamente al driver intel-mesa invece di / usr / lib / nvidia-XYZ-prime /.

Importante:

Prima di applicare uno di questi passaggi, assicurati di sapere come accedere alla modalità di ripristino sul tuo PC. Se non riesci più ad avviare a causa di questa guida, puoi comunque annullare le modifiche nella modalità di ripristino con i comandi nell'ultima sezione di questa guida. Vedere questo sito Web su come accedere alla modalità di recupero per ulteriori informazioni.

Se si utilizza un sistema operativo a 32 bit , è necessario tralasciare tutti i comandi contenenti x86_64 al passaggio 4 e nella sezione Come annullare tutte queste modifiche .


Passo 1:

Installa la mia patch usando un metodo semplice fornito da @whizzzkid nella sua risposta di seguito:

cd /usr/bin
sudo mv prime-select prime-select.bkup
sudo wget https://raw.githubusercontent.com/C11235/nvidia-prime-bugfix/master/prime-select
sudo chmod 755 prime-select

Passo 2:

Applica la mia seconda patch per ridurre il consumo di energia in modalità Intel:

Controlla quale versione di driver nvidia hai. Ad esempio con il seguente comando:

$ cat /proc/driver/nvidia/version
NVRM version: NVIDIA UNIX x86_64 Kernel Module  378.13  Tue Feb  7 20:10:06 PST 2017
GCC version:  gcc version 6.2.0 20161005 (Ubuntu 6.2.0-5ubuntu12)

In questo caso, nvidia-XYZ è nvidia-378. Vedi questo thread StackOverflow .

Creare un file bash contenente i seguenti contenuti denominati ad esempio poweroff.sh

#!/bin/bash
line=$(</etc/prime-discrete)
if [ "$line" == "off" ] 
   then
   rmmod nvidia-drm
   rmmod nvidia-modeset
   rmmod nvidia
   bash -c 'echo OFF > /proc/acpi/bbswitch'
fi 

Crea un secondo file bash contenente i seguenti contenuti chiamati ad esempio poweron.sh e sostituisci XYZ con il numero di versione del tuo driver nvidia.

#!/bin/bash
modprobe nvidia-XYZ
modprobe nvidia-XYZ-modeset
modprobe nvidia-XYZ-drm
modprobe nvidia-XYZ-uvm
echo ON > /proc/acpi/bbswitch

In modalità Intel, devi eseguire il primo script dopo l'accesso con sudo e il secondo prima di disconnetterti con sudo (altrimenti il ​​tuo laptop probabilmente andrà in crash, come nel mio caso). Li eseguo solo con sudo bash FILENAME.

Finora non sono stato in grado di avviare automaticamente questi script come root all'accesso e prima del logout. Tuttavia, potrebbe essere possibile con upstart, come ha sottolineato @Fiximan . Potrei aggiornare di nuovo questa risposta in futuro, se riuscissi a farlo.


(probabilmente) errori specifici del plasma di KDE:

C'è ancora un bug che non sono stato in grado di risolvere nel plasma di KDE: ogni volta che passo da Nvidia a Intel dopo aver avviato il PC in modalità NVIDIA, ksmserver si arresta in modo anomalo e il PC diventa inutilizzabile, devo spegnerlo premendo il pulsante di accensione per circa 5-10 secondi. Questo a volte comporta che le alternative di aggiornamento vengano cambiate in nvidia-prime anziché in intel-mesa che porta ad uno schermo nero all'avvio .

Se ti capita di essere interessato dal bug ksmserver, ti preghiamo di contribuire alla segnalazione ufficiale dei bug su bugs.kde.org .

Tuttavia, il problema che il PC non si spegne può essere evitato selezionando sempre la modalità Intel prima dello spegnimento , anche quando si utilizza la modalità NVIDIA. Se lo fai, tutto funziona come dovrebbe in primo luogo e non è necessario spegnere il PC premendo a lungo il pulsante di accensione, tranne dopo aver applicato questa guida in modalità NVIDIA.

Una semplice soluzione per il bug black-screen-upon-startup consiste nel rimuovere completamente le alternative di aggiornamento non funzionanti:

Passo 1:

È possibile accedere nuovamente al PC dopo aver attivato la modalità di ripristino, selezionare la shell dei comandi di root ed eseguire i seguenti 2 comandi:

mount -o remount,rw /
prime-select nvidia

Passo 2:

Esegui i seguenti comandi:

sudo update-alternatives --remove i386-linux-gnu_gl_conf /usr/lib/nvidia-XYZ-prime/alt_ld.so.conf
sudo update-alternatives --remove i386-linux-gnu_egl_conf /usr/lib/nvidia-XYZ-prime/alt_ld.so.conf
sudo update-alternatives --remove x86_64-linux-gnu_gl_conf /usr/lib/nvidia-XYZ-prime/ld.so.conf
sudo update-alternatives --remove x86_64-linux-gnu_egl_conf /usr/lib/nvidia-XYZ-prime/ld.so.conf

Come annullare tutte queste modifiche

Basta eseguire i seguenti comandi:

sudo rm /usr/bin/prime-select
sudo mv /home/YOUR-USERNAME/prime-select.backup /usr/bin/prime-select
sudo update-alternatives --install /etc/ld.so.conf.d/i386-linux-gnu_GL.conf i386-linux-gnu_gl_conf /usr/lib/nvidia-XYZ-prime/alt_ld.so.conf 8603
sudo update-alternatives --install /etc/ld.so.conf.d/i386-linux-gnu_EGL.conf i386-linux-gnu_egl_conf /usr/lib/nvidia-XYZ-prime/alt_ld.so.conf 8603
sudo update-alternatives --install /etc/ld.so.conf.d/x86_64-linux-gnu_GL.conf x86_64-linux-gnu_gl_conf /usr/lib/nvidia-XYZ-prime/ld.so.conf 8603
sudo update-alternatives --install /etc/ld.so.conf.d/x86_64-linux-gnu_EGL.conf x86_64-linux-gnu_egl_conf /usr/lib/nvidia-XYZ-prime/ld.so.conf 8603

1
Controlla la mia risposta qui sotto.
Whizzzkid,

Ehi amico, grazie mille per questo! Quando eseguo il tuo script di spegnimento, la mia com si blocca (prima del logout). C'è un'altra soluzione?
Wboy,

Sfortunatamente, non conosco altre soluzioni. Questo funziona nel mio caso. Il tuo problema si verifica anche nel mio caso, come ho scritto, ma solo la prima volta. Come ho scritto, è necessario tornare a Intel prima di disconnettersi. Quindi questo errore non si verificherà. (Almeno nel mio caso).
C11235,

Ciao @ C11235 Grazie per la correzione. Vorrei chiederti una cosa: la prima volta che installo il driver nvidia per impostazione predefinita è impostato in nvidia. Quindi quando devo eseguire lo script? e cosa intendi per login come root?
Glats,

Sfortunatamente, questa parte della mia risposta è stata un po 'vaga. Volevo dire che accedi e quindi esegui lo script come root (ad esempio con sudo). Dovresti eseguire lo script quando hai appena effettuato l'accesso e sei già passato alla modalità Intel. Questo trasforma completamente la GPU nvidia temporaneamente. Il secondo dovrebbe essere eseguito prima del logout in modalità Intel.
C11235,

2

la patch di @ C11235 funziona, ora posso passare da NVIDIA a Intel, ma questo non riduce il consumo energetico. : - / che significa che entrambi sono ancora in esecuzione.

A proposito, questo è un modo più semplice per farlo.

cd /usr/bin
sudo mv prime-select prime-select.bkup
sudo wget https://raw.githubusercontent.com/C11235/nvidia-prime-bugfix/master/prime-select
sudo chmod 755 prime-select

Grazie! Sfortunatamente, hai ragione, vedi la mia domanda aggiornata. Ti dispiace se aggiorno la mia risposta per includere il tuo metodo di installazione più semplice?
C11235,

@ C11235 oh sì certo. Sono stato in grado di capire tutto questo: gist.github.com/whizzzkid/37c0d365f1c7aa555885d102ec61c048 Al momento sto facendo funzionare 5,8 W in idle.
Whizzzkid

D'accordo va benissimo! Ho controllato le tue istruzioni e la causa del consumo energetico ridotto è la stessa del mio caso. Ho scritto uno script che utilizza bbswitch per disabilitare la GPU NVIDIA se Prime-Select ha attivato la modalità Intel. Nel mio caso questo è più conveniente, dato che ho un monitor esterno e uso quasi esclusivamente la modalità nvidia, ecco perché volevo usare nvidia-prime invece di bumblebee. Inoltre, si suppone che le prestazioni quando si utilizza nvidia-prime siano migliori rispetto all'uso di bumblebee.
C11235,

2

Soluzione per non avviare dopo il passaggio alla scheda video Intel:
aggiungere i parametri di avvio del kernel:

acpi_osi=! acpi_osi="Windows 2009"

Il motivo di questo problema: bug # 156341 nel kernel
Fonte della soluzione: collegamento

alcuni più dettagliati, potrebbe essere più facile da capire:

sudo echo -e "GRUB_CMDLINE_LINUX_DEFAULT='acpi_osi=! acpi_osi='Windows 2009''"  | sudo tee -a /etc/default/grub
sudo update-grub

Nella sua forma attuale la tua risposta non è buona come potrebbe essere. Potresti rivedere Come scrivere una buona risposta e prendere in considerazione l'espansione della tua risposta
J. Starnes,

questo in realtà ha funzionato per me, ma la risposta potrebbe essere migliorata. Suggerirò il miglioramento
Vladyslav Matviienko il

1

Possibile problema con la 2a correzione: ultimo comando del prompt "poweroff"

    bash: /proc/acpi/bbswitch: No such file or directory

Apparentemente, quando riavvio in modalità Intel (la modifica della modalità non ha effetto fino al riavvio, non so se questo è normale), il modulo bbswitch non viene nemmeno caricato. Quindi non esiste alcun file bbswitch e nessun modo per disattivare la GPU nvidia.

Sto usando:

  • MSI-Laptop (GL72 7RDX)
  • GPU integrata: Intel® HD Graphics 630 (Kaby Lake GT2)
  • GPU separata: Geforce GTX 1050
  • Sistema operativo: Ubuntu 16.04 lts

Soluzione per questo problema:

Modifica il file / etc / modules (con i privilegi di root) e aggiungi la riga

    bbswitch

Ora bbswitch è operativo anche quando avvio in modalità Intel e la seconda correzione di C11235 funziona bene.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.