NVIDIA-PRIME: не могу переключиться на Intel

10

Всякий раз, когда я переключаюсь с моего gpu (gtx 1060) на свой igpu (Intel 530), я не могу загрузиться. Экран загрузки застрял со следующим сообщением:

[Не удалось] Не удалось запустить NVIDIA Persistence Daemon. Подробности смотрите в 'systemctl status nvidia-persistenced.service'.

Тем не менее, я могу загрузиться, когда я переключаюсь обратно на графический процессор Nvidia и переключаюсь на свой igpu без перезагрузки, работает временно. Я использую Kubuntu 16.10 и только мой внутренний дисплей ноутбука. Вот вывод, когда я переключаюсь на свой 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

Результат 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

Я пытался решить эту проблему самостоятельно более недели и не знаю, что делать. Все, что я пытался, провалилось.

Не могли бы вы мне помочь?

ОБНОВЛЕНИЕ 5.2.2017:

Сегодня я снова проверил это и понял, что переключение на Intel GPU не работает вообще с 375 и 378. Выход из системы останавливает экран. Так почему же это сработало? Если я снова установлю все драйверы после того, как удаляю старые, а затем использую Prime-Select Intel (без перезагрузки!), Prime-Select не обновляет основные профили -> Он выбирает один из старых профилей, отличных от nvidia (mesa-профили) вместо нвидии) и все работает. Но как только я переключаюсь на профиль nvidia или перезагружаюсь, основные профили обновляются, и это больше не работает. Итак, я думаю, что-то не так с альтернативами EGl для Intel GPU? Приносим извинения за доставленные неудобства.

ОБНОВЛЕНИЕ 12.2.2017:

Вчера я модифицировал программное обеспечение nvidia-prime и исправил ошибку. Я скоро опубликую (вероятно, на следующей неделе) мою измененную версию и вставлю сюда ссылку, но я все еще сталкиваюсь с проблемой: когда я выключаю свой компьютер после того, как я выполню sudo prime-select intel:

вылетает ksmserver (я использую Kubuntu, вероятно, не проблема с Ubuntu)

-> ПК не может завершить работу полностью, и старые (неправильные) альтернативы обновления для Intel GPU восстанавливаются

-> Я не могу загрузиться.

Тем не менее, если я запускаю sudo prime-select intelпосле выключения в режиме восстановления все работает нормально, и я могу использовать Intel GPU.

ОБНОВЛЕНИЕ 17.2.2017:

Я опубликовал свой обходной путь и все еще пытаюсь исправить ошибку в официальных репозиториях. Тем не менее, это, вероятно, ошибка в альтернативных обновлениях, поэтому в следующий раз я должен опубликовать там отчет об ошибках.

А пока наслаждайтесь моим обходным путем! Я надеюсь, что это работает и для вас. Если есть какие-либо вопросы, пожалуйста, оставьте комментарий.

ОБНОВЛЕНИЕ 26.2.2017

Как отметил @whizzzkid, видеокарта nvidia все еще остается активной после применения моего патча. Однако сегодня мне удалось решить эту проблему. Я, вероятно, обновлю свой ответ, чтобы включить мой второй патч на следующей неделе. Вот несколько тестов, которые я провел:

Nvidia: 43-45 Вт

Intel (nvidia on): 29-31 Вт

Intel (nvidia выключен): 15-17 Вт

C11235
источник
Пожалуйста, отредактируйте ваш вопрос и добавьте вывод команды lspci -k | grep -EA2 'VGA|3D' терминала.
Pilot6
О, я вижу, что 10xx не имеют mв конце, даже если они мобильные.
Pilot6
Вероятно nvidia-prime, пока не поддерживает это.
Pilot6
Что ж, интересно то, что он работает, пока я не перезагружаюсь. Я могу использовать igpu, если я выйду из системы и войду снова. Но как только я перезагружаюсь, это больше не работает. И nvidia gpu работает, и поддерживается драйвером.
C11235,
1
Я использовал powertop для контроля энергопотребления. Показывает только энергопотребление, если вы используете аккумулятор в качестве источника питания. Взгляните на этот вопрос или эту справочную страницу для получения дополнительной информации.
C11235

Ответы:

3

Вот мое исправление / обход ошибки:

Если вы хотите использовать шмель вместо nvidia-prime, взгляните на ответ, предоставленный @whizzzkid ниже.

Протестировано с Kubuntu 16.10 64-bit с использованием KDE Plasma Version.7.5 и KDE Frameworks Version 5.26.0. Следующие шаги работают для меня. Я надеюсь, что они тоже будут работать на вас, но я не могу этого гарантировать и не несу никакой ответственности, если они этого не сделают. Но я рад помочь вам, если вы оставите комментарий.

В моем случае проблема заключалась в том, что альтернатива обновления / usr / lib / nvidia-XYZ-prime / вообще не работала. Он должен перенаправлять вызовы на драйвер intel-mesa, но по какой-то причине этого не произошло. Так это, вероятно, все-таки ошибка в альтернативах обновления? Я до сих пор не нашел место, чтобы сообщить об ошибке для альтернатив обновления. Пожалуйста, прокомментируйте, если вы можете мне помочь.

Я немного изменил nvidia-prime, чтобы заменить альтернативы обновления драйвером intel-mesa вместо / usr / lib / nvidia-XYZ-prime /.

Важный:

Перед выполнением любого из этих шагов убедитесь, что вы знаете, как получить доступ к режиму восстановления на вашем ПК. Если вы больше не можете загружаться из-за этого руководства, вы все равно можете отменить изменения в режиме восстановления с помощью команд в последнем разделе этого руководства. Смотрите этот сайт о том, как получить доступ к режиму восстановления для получения дополнительной информации.

Если вы используете 32-разрядную операционную систему, вы должны пропустить все команды, содержащие x86_64, на шаге 4 и в разделе Как отменить все эти изменения .


Шаг 1:

Установите мой патч, используя простой метод, предоставленный @whizzzkid в ответе ниже:

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

Шаг 2:

Примените мой второй патч, чтобы уменьшить энергопотребление в режиме Intel:

Проверьте, какая у вас версия nvidia-драйвера. Например, с помощью следующей команды:

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

В этом случае nvidia-XYZ - это nvidia-378. Смотрите этот поток Stackoverflow .

Создайте файл bash, содержащий следующее содержимое, названное, например, 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 

Создайте второй файл bash, содержащий следующее содержимое, названное, например, poweron.sh, и замените XYZ номером версии вашего драйвера nvidia.

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

В режиме Intel вы должны запустить первый скрипт после входа в систему с помощью sudo, а второй - до выхода из системы с помощью sudo (в противном случае ваш ноутбук, вероятно, выйдет из строя, как в моем случае). Я просто выполняю их sudo bash FILENAME.

До сих пор я не мог автоматически запускать эти скрипты как root при входе в систему и перед выходом из системы. Тем не менее, это может быть возможно с выскочкой, как отметил @Fiximan . Я мог бы обновить этот ответ снова когда-нибудь в будущем, если мне удастся это сделать.


(вероятно) KDE Плазменные ошибки:

Есть еще ошибка, которую я не смог исправить в KDE Plasma: всякий раз, когда я переключаюсь с Nvidia на Intel после того, как я запускаю ПК в режиме nvidia, ksmserver вылетает и компьютер перестает работать , я должен выключить его, нажав Кнопка включения примерно на 5-10 секунд. Это иногда приводит к тому, что альтернативы обновления меняются на nvidia-prime вместо intel-mesa, что приводит к появлению черного экрана при запуске .

Если вы столкнулись с ошибкой ksmserver, пожалуйста, отправьте официальный отчет об ошибке на bugs.kde.org .

Тем не менее, проблему, связанную с тем, что ПК не выключается, можно избежать, всегда выбирая intel-mode перед выключением , даже когда вы используете nvidia-mode. Если вы сделаете это, в первую очередь все работает так, как должно, и вам не нужно выключать компьютер, нажав и удерживая кнопку питания, кроме случаев, когда вы применили это руководство в режиме nvidia.

Простой обходной путь для чёрного экрана при запуске состоит в том, чтобы просто полностью удалить не работающие альтернативы обновления:

Шаг 1:

После входа в режим восстановления вы можете снова получить доступ к своему ПК, выбрать командную оболочку root и выполнить следующие 2 команды:

mount -o remount,rw /
prime-select nvidia

Шаг 2:

Выполните следующие команды:

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

Как отменить все эти модификации

Просто выполните следующие команды:

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
источник
1
Проверьте мой ответ ниже.
whizzzkid
Эй, чувак, большое спасибо за это! Когда я запускаю ваш скрипт poweroff, мой ком просто зависает (перед выходом из системы). Есть ли другое исправление?
Wboy
К сожалению, я не знаю другого решения. Это работает в моем случае. Ваша проблема также возникает в моем случае, как я уже писал, но только в первый раз. Как я уже писал, вы должны переключиться обратно в Intel перед выходом из системы. Тогда эта ошибка не возникнет. (По крайней мере, в моем случае).
C11235
Привет @ C11235 Спасибо за исправление. Я хотел бы спросить вас кое-что: первая установка драйвера nvidia по умолчанию устанавливается в nvidia. Тогда Когда я должен запустить скрипт? и что вы подразумеваете под логином как root?
Glats
К сожалению, эта часть моего ответа была немного расплывчатой. Я имел в виду, что вы входите в систему, а затем запускаете скрипт от имени пользователя root (например, с помощью sudo). Вы должны запустить скрипт, когда вы только вошли в систему и уже переключились в режим Intel. Этот поворот полностью отключает графический процессор nvidia временно. Второй должен быть выполнен перед выходом из системы в режиме Intel.
C11235
2

патч от @ C11235 работает, теперь я могу переключаться между nvidia и intel, но это не снижает энергопотребление. : - / что означает, что оба все еще работают.

Кстати, это более простой способ сделать это.

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
источник
Спасибо! К сожалению, вы правы, смотрите мой обновленный вопрос. Вы не возражаете, если я обновлю свой ответ, чтобы включить ваш более простой метод установки?
C11235
@ C11235 О да, конечно. Мне удалось все это выяснить: gist.github.com/whizzzkid/37c0d365f1c7aa555885d102ec61c048 Я сейчас работаю на холостом ходу 5,8 Вт.
whizzzkid
Хорошо, это здорово! Я проверил ваши инструкции, и причина пониженного энергопотребления такая же, как в моем случае. Я написал скрипт, который использует bbswitch для отключения графического процессора nvidia, если Prime-Select переключил режим Intel. В моем случае это более удобно, так как у меня есть внешний монитор и я почти исключительно использую режим nvidia, поэтому я хотел использовать nvidia-prime вместо шмеля. Кроме того, производительность при использовании nvidia-prime должна быть лучше, чем при использовании шмеля.
C11235
2

Решение не загружаться после перехода на видеокарту Intel:
Добавьте параметры загрузки ядра:

acpi_osi=! acpi_osi="Windows 2009"

Причина этой проблемы: ошибка # 156341 в ядре.
Источник решения: ссылка

некоторые более подробные, может быть, это будет более легко понять:

sudo echo -e "GRUB_CMDLINE_LINUX_DEFAULT='acpi_osi=! acpi_osi='Windows 2009''"  | sudo tee -a /etc/default/grub
sudo update-grub
Максим Акристиный
источник
В своем нынешнем виде ваш ответ не так хорош, как мог бы быть. Не могли бы вы прочитать, как написать хороший ответ , и рассмотреть вопрос о расширении вашего ответа
J. Starnes
это на самом деле работает для меня, но ответ может быть улучшен. Я предложу улучшение
Владислав Матвиенко
1

Возможная проблема с 2-ым Исправлением: Последняя команда подсказок "poweroff" -скрипта

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

По-видимому, когда я перезагружаюсь в режиме Intel (изменение режима не вступает в силу, пока я не перезагружаюсь, не знаю, нормально ли это), модуль bbswitch даже не загружается. Таким образом, нет файла bbswitch и нет возможности отключить графический процессор nvidia.

Я использую:

  • MSI-ноутбук (GL72 7RDX)
  • Интегрированный графический процессор: Intel® HD Graphics 630 (Kaby Lake GT2)
  • отдельный графический процессор: Geforce GTX 1050
  • ОС: Ubuntu 16.04 лтс

Решение этой проблемы:

Отредактируйте файл / etc / modules (с правами root) и добавьте строку

    bbswitch

Теперь bbswitch работает, даже когда я загружаюсь в режиме Intel, а второе исправление C11235 работает просто отлично.

Хьюго
источник