NVIDIA-PRIME: Nie mogę przejść na Intel

10

Ilekroć przełączam się z mojego GPU (GTX 1060) na mój IGPU (Intel 530), nie mogę uruchomić. Na ekranie ładowania pojawia się następujący komunikat:

[Niepowodzenie] Nie udało się uruchomić Demona Persistence NVIDIA. Aby uzyskać szczegółowe informacje, zobacz „systemctl status nvidia-persistended.service”.

Jednak mogę się uruchomić, kiedy przełączę się z powrotem na GPU Nvidii i przełączę się na moją igpu bez tymczasowego ponownego uruchamiania. Używam Kubuntu 16.10 i tylko mojego wewnętrznego wyświetlacza laptopa. To jest wynik, kiedy przełączam się na mój 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

Wynik działania 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

Próbowałem rozwiązać ten problem sam przez ponad tydzień i nie mam pojęcia, co robić. Wszystko, czego próbowałem, zawiodło.

Czy mógłbyś mi pomóc?

AKTUALIZACJA 5.2.2017:

Dzisiaj przetestowałem go ponownie i zdałem sobie sprawę, że przejście na Intel GPU nie działa w ogóle z 375 i 378. Wylogowanie powoduje zawieszenie ekranu. Dlaczego raz to zadziałało? Jeśli ponownie zainstaluję wszystkie sterowniki po usunięciu starych, a następnie użyję funkcji prime-select intel (bez ponownego uruchomienia!), Funkcja prime-select nie aktualizuje profili głównych -> Wybiera jeden ze starych profili innych niż NVIDIA (profile mesa zamiast NVIDIA) i działa. Ale gdy tylko przełączę się na profil NVIDIA lub uruchomię ponownie, profile główne zostaną zaktualizowane i już nie działa. Więc myślę, że coś jest nie tak z alternatywami EGl dla Intel GPU? Przepraszam za jakiekolwiek niedogodności.

AKTUALIZACJA 12.2.2017:

Wczoraj zmodyfikowałem oprogramowanie nvidia-prime i naprawiłem błąd. Wkrótce opublikuję (prawdopodobnie w przyszłym tygodniu) moją zmodyfikowaną wersję i wkleję tutaj link, ale wciąż napotykam problem: kiedy zamykam komputer po wykonaniu sudo prime-select intel:

ksmserver ulega awarii (używam Kubuntu, prawdopodobnie nie jest to problem z Ubuntu)

-> komputer nie może zostać całkowicie zamknięty i przywrócone są stare (złe) alternatywy aktualizacji dla procesora graficznego Intel

-> Nie mogę uruchomić.

Jeśli jednak uruchomię się sudo prime-select intelpo wyłączeniu w trybie odzyskiwania, wszystko będzie działać poprawnie i będę mógł korzystać z procesora graficznego Intel.

AKTUALIZACJA 17.2.2017:

Opublikowałem obejście tego problemu i nadal próbuję naprawić błąd w oficjalnych repozytoriach. Prawdopodobnie jest to jednak błąd w alternatywnych aktualizacjach, więc w przyszłości muszę tam wysłać raport o błędzie.

Tymczasem ciesz się z mojego obejścia! Mam nadzieję, że to też dla ciebie zadziała. Jeśli są jakieś pytania, zostaw komentarz.

AKTUALIZACJA 26.2.2017

Jak zauważył @whizzzkid, karta graficzna nvidia nadal pozostaje aktywna po zastosowaniu mojej łatki. Jednak dzisiaj udało mi się rozwiązać ten problem. Prawdopodobnie zaktualizuję swoją odpowiedź, aby uwzględnić mój drugi patch w przyszłym tygodniu. Oto kilka testów, które przeprowadziłem:

Nvidia: 43-45 W.

Intel (NVIDIA ON): 29-31 W.

Intel (nvidia wyłączona): 15-17 W.

C11235
źródło
Edytuj swoje pytanie i dodaj dane wyjściowe lspci -k | grep -EA2 'VGA|3D' polecenia terminalu.
Pilot6
Och, widzę, że 10xx nie ma mna końcu, nawet jeśli są mobilne.
Pilot6
Prawdopodobnie jeszcze nvidia-primeich nie obsługuje.
Pilot6
Ciekawe jest to, że działa tak długo, jak się nie uruchamiam ponownie. Mogę użyć igpu, jeśli wyloguję się i zaloguję ponownie. Ale jak tylko zrestartuję, to już nie działa. GPU Nvidia działa i jest obsługiwane przez sterownik.
C11235
1
Użyłem powertop do monitorowania zużycia energii. Pokazuje zużycie energii tylko wtedy, gdy używasz baterii jako źródła zasilania. Spójrz na to pytanie lub tę stronę podręcznika, aby uzyskać więcej informacji.
C11235,

Odpowiedzi:

3

Oto moja poprawka / obejście błędu:

Jeśli chcesz użyć trzmiela zamiast nvidii-prime, spójrz na odpowiedź podaną przez @whizzzkid poniżej.

Testowane z Kubuntu 16.10 64-bit przy użyciu KDE Plasma w wersji 7.5 i KDE Frameworks w wersji 5.26.0. Poniższe kroki działają dla mnie. Mam nadzieję, że one również będą dla ciebie pracowały, ale nie mogę tego zagwarantować i nie ponoszę żadnej odpowiedzialności, jeśli nie będą. Ale cieszę się, że mogę pomóc, jeśli zostawisz komentarz.

W moim przypadku problemem było to, że aktualizacja-alternatywa / usr / lib / nvidia-XYZ-prime / w ogóle nie działała. Ma przekierowywać połączenia do sterownika intel-mesa, ale z jakiegoś powodu tak nie było. Więc prawdopodobnie jest to mimo wszystko błąd w alternatywach aktualizacji? Nadal nie znalazłem miejsca, w którym można zgłosić błąd dotyczący aktualizacji. Proszę o komentarz, jeśli możesz mi pomóc.

Zasadniczo zmodyfikowałem trochę nvidia-prime, aby zmienić alternatywy aktualizacji bezpośrednio na sterownik intel-mesa zamiast / usr / lib / nvidia-XYZ-prime /.

Ważny:

Przed zastosowaniem dowolnego z tych kroków upewnij się, jak uzyskać dostęp do trybu odzyskiwania na komputerze. Jeśli nie możesz już uruchomić systemu z powodu tego przewodnika, nadal możesz cofnąć zmiany w trybie odzyskiwania za pomocą poleceń w ostatniej części tego przewodnika. Aby uzyskać więcej informacji, zobacz tę stronę internetową na temat uzyskiwania dostępu do trybu odzyskiwania .

Jeśli używasz 32-bitowego systemu operacyjnego, musisz pominąć wszystkie polecenia zawierające x86_64 w kroku 4 iw sekcji Jak cofnąć wszystkie te modyfikacje .


Krok 1:

Zainstaluj moją łatkę, używając prostej metody dostarczonej przez @whizzzkid w jego odpowiedzi poniżej:

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

Krok 2:

Zastosuj moją drugą łatkę, aby zmniejszyć zużycie energii w trybie Intel:

Sprawdź, którą wersję sterownika nvidia posiadasz. Na przykład za pomocą następującego polecenia:

$ 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)

W tym przypadku nvidia-XYZ to nvidia-378. Zobacz ten wątek Stackoverflow .

Utwórz plik bash zawierający następującą zawartość o nazwie np. 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 

Utwórz drugi plik bash zawierający następującą zawartość o nazwie np. Poweron.sh i zastąp XYZ numerem wersji sterownika nvidia.

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

W trybie Intel musisz uruchomić pierwszy skrypt po zalogowaniu za pomocą sudo, a drugi przed wylogowaniem za pomocą sudo (w przeciwnym razie laptop prawdopodobnie się zawiesi, jak w moim przypadku). Po prostu je wykonuję sudo bash FILENAME.

Jak dotąd nie byłem w stanie automatycznie uruchomić tych skryptów jako root podczas logowania i przed wylogowaniem. Jednak może to być możliwe przy starcie, jak zauważył @Fiximan . Mogę zaktualizować tę odpowiedź ponownie w przyszłości, jeśli uda mi się to zrobić.


(prawdopodobnie) Błędy specyficzne dla plazmy KDE:

Nadal występuje błąd, którego nie byłem w stanie naprawić w KDE Plasma: Ilekroć przełączam się z Nvidii na Intel po uruchomieniu komputera w trybie nvidia, ksmserver ulega awarii i komputer staje się bezużyteczny, muszę go wyłączyć, naciskając przycisk zasilania przez około 5-10 sekund. Czasami powoduje to, że alternatywy aktualizacji zmieniają się na nvidia-prime zamiast intel-mesa, co po uruchomieniu powoduje czarny ekran .

Jeśli zdarzy ci się dotknąć błąd ksmserver, prosimy o przyczynienie się do oficjalnego raportu o błędzie na bugs.kde.org .

Problemu, że komputer nie chce się zamknąć, można jednak uniknąć, zawsze wybierając tryb Intel przed zamknięciem , nawet jeśli używasz trybu NVIDIA. Jeśli to zrobisz, wszystko działa tak, jak powinno, i nie musisz wyłączać komputera, naciskając długo przycisk zasilania, chyba że zastosujesz ten przewodnik w trybie NVIDIA.

Prostym obejściem błędu „czarny ekran po uruchomieniu” jest całkowite usunięcie niedziałających alternatyw dla aktualizacji:

Krok 1:

Możesz ponownie uzyskać dostęp do komputera po przejściu do trybu odzyskiwania, wybierz powłokę poleceń roota i wykonaj następujące 2 polecenia:

mount -o remount,rw /
prime-select nvidia

Krok 2:

Wykonaj następujące polecenia:

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

Jak cofnąć wszystkie te modyfikacje

Wystarczy wykonać następujące polecenia:

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
C11235
źródło
1
Sprawdź moją odpowiedź poniżej.
whizzzkid
Hej, dzięki za to! Po uruchomieniu skryptu wyłączania mój komputer po prostu się zawiesza (przed wylogowaniem). Czy istnieje inna poprawka?
Wboy
Niestety nie znam żadnej innej poprawki. To działa w moim przypadku. Twój problem występuje również w moim przypadku, jak napisałem, ale tylko za pierwszym razem. Jak napisałem, przed wylogowaniem musisz wrócić do Intela. Wtedy ten błąd nie wystąpi. (Przynajmniej w moim przypadku).
C11235
Cześć @ C11235 Dzięki za naprawę. Chciałbym cię o coś zapytać: Pierwszy raz instaluję sterownik nvidia domyślnie w nvidii. Kiedy powinienem uruchomić skrypt? i co masz na myśli logowanie jako root?
Glats
Niestety ta część mojej odpowiedzi była nieco niejasna. Miałem na myśli, że zalogujesz się, a następnie uruchom skrypt jako root (np. Z sudo). Powinieneś uruchomić skrypt po zalogowaniu i przejściu do trybu Intel. To z kolei całkowicie tymczasowo wyłącza procesor graficzny NVIDIA. Drugi należy wykonać przed wylogowaniem w trybie Intel.
C11235
2

łatka @ C11235 działa, teraz mogę przełączać się między NVIDIA i Intel, ale to nie zmniejsza zużycia energii. : - / co oznacza, że ​​oba nadal działają.

BTW to łatwiejszy sposób na zrobienie tego.

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
whizzzkid
źródło
Dziękuję Ci! Niestety masz rację, zobacz moje zaktualizowane pytanie. Czy masz coś przeciwko, jeśli zaktualizuję moją odpowiedź, aby zawierała łatwiejszą metodę instalacji?
C11235
@ C11235 o tak, jasne. Udało mi się to wszystko rozgryźć : gist.github.com/whizzzkid/37c0d365f1c7aa555885d102ec61c048 W tej chwili uruchomiłem 5,8 W na biegu jałowym.
whizzzkid
Ok, to wspaniale! Sprawdziłem twoje instrukcje, a przyczyna obniżonego zużycia energii jest taka sama jak w moim przypadku. Napisałem skrypt, który używa przełącznika bbswitch do wyłączania procesora graficznego NVIDIA, jeśli główny tryb przełączania trybu Intel. W moim przypadku jest to wygodniejsze, ponieważ mam zewnętrzny monitor i prawie wyłącznie używam trybu nvidia, dlatego chciałem użyć nvidia-prime zamiast trzmiela. Dodatkowo wydajność przy korzystaniu z nvidia-prime powinna być lepsza niż przy użyciu trzmiela.
C11235
2

Rozwiązanie problemu z brakiem uruchamiania po przejściu na kartę wideo Intel:
Dodaj parametry rozruchowe jądra:

acpi_osi=! acpi_osi="Windows 2009"

Przyczyna tego problemu: błąd # 156341 w jądrze
Źródło rozwiązania: link

niektóre bardziej szczegółowe mogą być łatwiejsze do zrozumienia:

sudo echo -e "GRUB_CMDLINE_LINUX_DEFAULT='acpi_osi=! acpi_osi='Windows 2009''"  | sudo tee -a /etc/default/grub
sudo update-grub
Maxim Akristiniy
źródło
W obecnej formie twoja odpowiedź nie jest tak dobra, jak mogłaby być. Czy mógłbyś przejrzeć Jak napisać dobrą odpowiedź i rozważyć poszerzenie swojej odpowiedzi
J. Starnes
to faktycznie działało dla mnie, ale odpowiedź można poprawić. Zasugeruję poprawę
Vladyslav Matviienko,
1

Możliwy problem z drugą poprawką: Ostatnie polecenie skryptu „poweroff” monituje

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

Najwyraźniej, kiedy ponownie uruchamiam w trybie Intel (zmiana trybu nie wchodzi w życie do momentu ponownego uruchomienia, nie wiem, czy to normalne), moduł bbswitch nawet się nie ładuje. Więc nie ma pliku bbswitch i nie ma sposobu, aby wyłączyć procesor graficzny NVIDIA.

Używam:

  • MSI-Laptop (GL72 7RDX)
  • Zintegrowany procesor graficzny: Intel® HD Graphics 630 (Kaby Lake GT2)
  • oddzielny procesor graficzny: Geforce GTX 1050
  • System operacyjny: Ubuntu 16.04 lts

Rozwiązanie tego problemu:

Zmodyfikuj plik / etc / modules (z uprawnieniami roota) i dodaj linię

    bbswitch

Teraz bbswitch działa, nawet gdy uruchamiam się w trybie Intel, a druga poprawka C11235 działa dobrze.

Hugo
źródło