NVIDIA-PRIME:无法切换到英特尔

NVIDIA-PRIME:无法切换到英特尔

每当我从 gpu (gtx 1060) 切换到 igpu (Intel 530) 时,我都无法启动。加载屏幕卡住并显示以下消息:

[失败] 无法启动 NVIDIA Persistence Daemon。请参阅“systemctl status nvidia-persistenced.service”了解详情。

但是,当我切换回 Nvidia gpu 时,我可以启动,并且切换到我的 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

我尝试自己解决这个问题已经一个多星期了,但不知道该怎么办。我尝试过的所有方法都失败了。

请你帮助我好吗?

2017.5.2更新:

我今天再次测试,发现切换到英特尔 gpu 根本无法在 375 和 378 上运行。注销会导致屏幕冻结。那么为什么它曾经有效?如果我在删除旧驱动程序后再次安装所有驱动程序,然后使用 prime-select intel(无需重启!),prime-select 不会更新 prime 配置文件 -> 它选择一个旧的非 nvidia 配置文件(mesa 配置文件而不是 nvidia),然后它就可以工作了。但是,只要我切换到 nvidia 配置文件或重启,prime 配置文件就会更新,它就不再起作用了。所以我猜英特尔 gpu 的 EGl 替代品有问题?如有不便,敬请谅解。

更新日期:2017.12.2:

昨天,我修改了 nvidia-prime 软件并修复了错误。我很快就会(可能下周)发布我的修改版本并在此处粘贴链接,但我仍然遇到一个问题:当我执行完以下命令后关闭电脑时sudo prime-select intel

ksmserver 崩溃(我使用的是 Kubuntu,可能不是 Ubuntu 的问题)

-> PC 无法完全关闭,并且恢复了英特尔 GPU 的旧(错误)更新替代方案

-> 我无法启动。

但是,如果我sudo prime-select intel在关机后以恢复模式运行,一切都会正常运行,并且我可以使用英特尔 GPU。

2017 年 2 月 17 日更新:

我发布了我的解决方法,并仍在尝试修复官方存储库中的错误。但是,这可能是 update-alternatives 中的一个错误,所以下次我必须在那里发布错误报告。

与此同时,享受我的解决方法吧!希望它对你也有用。如果有任何问题,请发表评论。

更新时间:2017.2.26

正如 @whizzzkid 指出的那样,应用我的补丁后,nvidia 显卡仍然处于活动状态。不过,今天我能够解决这个问题。我可能会在下周更新我的答案以包含我的第二个补丁。以下是我运行的一些测试:

Nvidia:43-45W

英特尔(启用 NVIDIA):29-31W

英特尔(关闭 NVIDIA):15-17W

答案1

以下是我针对该错误的修复/解决方法:

如果你想使用 bumblebee 而不是 nvidia-prime,请查看提供的答案 @whizzzkid以下。

经过测试Kubuntu 16.10 64 位使用 KDE Plasma 版本 7.5 和 KDE Frameworks 版本 5.26.0。以下步骤对我有用。我希望它们也对你有用,但我不能保证,如果它们不起作用,我也不承担任何责任。但如果你留下评论,我很乐意帮助你。

就我而言,问题在于 update-alternative /usr/lib/nvidia-XYZ-prime/ 根本不起作用。它应该将调用重定向到 intel-mesa 驱动程序,但出于某种原因,它并没有这样做。所以这可能是 update-alternatives 中的一个错误?我仍然没有找到报告 update-alternatives 错误的地方。如果您能帮助我,请发表评论。

我基本上对 nvidia-prime 进行了一些修改,将 update-alternatives 直接更改为 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步:

应用我的第二个补丁来降低英特尔模式下的功耗:

检查您拥有的 nvidia-driver 版本。例如,使用以下命令:

$ 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 身份自动启动这些脚本。不过,使用 upstart 可能会实现,因为@Fiximan指出。如果我能做到的话,我可能会在将来的某个时候再次更新这个答案。


(可能是)KDE Plasma 特有的错误:

KDE Plasma 中还有一个我无法修复的错误:当我以 nvidia 模式启动 PC 后,每当我从 Nvidia 切换到 Intel 时,ksm服务器电脑崩溃,无法使用,我必须按住电源按钮约 5-10 秒才能将其关闭。这有时会导致 update-alternatives 更改为 nvidia-prime 而不是 intel-mesa,从而导致启动时黑屏

如果你恰巧受到 ksmserver 漏洞的影响,请贡献bugs.kde.org 上的官方错误报告

然而,问题是电脑无法关机可以通过以下方式避免关机前总是选择英特尔模式,即使您使用 nvidia 模式也是如此。如果您这样做,一切都会按预期工作,并且您无需通过长按电源按钮关闭 PC,除非您在 nvidia 模式下应用本指南。

一个简单的解决方法启动时黑屏错误就是完全删除不起作用的更新替代方案:

步骤1:

进入恢复模式后,您可以再次访问您的电脑,选择 root 命令 shell 并执行以下 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

答案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

答案3

切换到英特尔显卡后无法启动的解决方案:
添加内核启动参数:

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

答案4

第二个修复可能存在的问题:“poweroff”脚本的最后一个命令提示

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

显然,当我以 Intel 模式重新启动时(更改模式直到我重新启动后才会生效,不知道这是否正常),bbswitch 模块甚至没有加载。因此没有 bbswitch 文件,也没有办法关闭 nvidia GPU。

我在用着:

  • MSI-笔记本电脑 (GL72 7RDX)
  • 集成 GPU:英特尔® 高清显卡 630 (Kaby Lake GT2)
  • 独立 GPU:Geforce GTX 1050
  • 操作系统:Ubuntu 16.04 lts

该问题的解决方案:

编辑文件 /etc/modules(使用 root 权限)并添加以下行

    bbswitch

现在,即使我在英特尔模式下启动,bbswitch 也可以运行,并且 C11235 的第二个修复工作正常。

相关内容