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


10

每当我从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

我试图独自解决这个问题超过一个星期,却不知道该怎么办。我尝试的一切都失败了。

请你帮助我好吗?

更新5.2.2017:

今天,我再次对其进行了测试,发现使用375和378根本无法切换到intel gpu。注销将冻结屏幕。那么为什么它一次起作用?如果我在删除旧驱动程序后再次安装所有驱动程序,然后使用prime-select intel(无需重新启动!),prime-select不会更新主要驱动程序配置文件->它将选择一个旧的非nvidia配置文件(mesa配置文件)而不是nvidia),并且可以正常工作。但是,一旦我切换到nvidia配置文件或重新启动,主要配置文件就会更新,并且不再起作用。所以我想intel gpu的EGl替代品有问题吗?任何不便敬请谅解。

更新12.2.2017:

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

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

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

->我无法启动。

但是,如果我sudo prime-select intel在恢复模式下关机后运行,则一切正常,我可以使用Intel GPU。

更新17.2.2017:

我发布了解决方法,但仍在尝试在官方存储库中修复该错误。但是,这可能是更新替代方案中的错误,因此接下来我必须在此处发布错误报告。

同时,享受我的解决方法!我希望它也对您有用。如有任何疑问,请发表评论。

更新26.2.2017

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

英伟达:43-45W

英特尔(nvidia on):29-31W

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


请编辑您的问题并添加lspci -k | grep -EA2 'VGA|3D' terminal命令的输出。
飞行员

哦,m即使可以移动,我也看不到10xx到底有没有。
飞行员

可能nvidia-prime还不支持这些。
飞行员

好吧,有趣的是,只要不重新启动它就可以工作。如果我注销并再次登录,则可以使用igpu。但是,一旦我重新启动,它就不再起作用。Nvidia gpu可以工作,并且得到驱动程序的支持。
C11235 '17

1
我使用powertop监视电源使用情况。仅当您使用电池作为电源时,它才会显示功耗。查看此问题或该手册页以获取更多信息。
C11235

Answers:


3

这是我的bug修复/解决方法:

如果要使用大黄蜂代替nvidia-prime,请查看下面@whizzzkid提供的答案 。

使用KDE Plasma Version.7.5和KDE Frameworks 5.26.0 在Kubuntu 16.10 64位上进行了测试。以下步骤对我有用。我希望他们也能为您工作,但我不能保证,如果他们不这样做,则不承担任何责任。但是,如果您发表评论,我很乐意为您提供帮助。

在我的情况下,问题是更新替代项/ usr / lib / nvidia-XYZ-prime /根本不起作用。它应该将调用重定向到intel-mesa驱动程序,但是由于某种原因没有。因此,毕竟这可能是更新替代品中的一个错误吗?我仍然没有找到报告更新替代品错误的地方。如果您可以帮助我,请发表评论。

我基本上对nvidia-prime进行了一些修改,以将更新替代方案直接更改为intel-mesa驱动程序,而不是/ usr / lib / nvidia-XYZ-prime /。

重要:

在应用任何这些步骤之前,请确保知道如何访问PC上的恢复模式。如果由于本指南而无法启动,您仍然可以使用本指南最后一部分中的命令撤消恢复模式中的更改。有关如何访问恢复模式的更多信息,请访问网站

如果使用32位操作系统,则必须在步骤4如何撤消所有这些修改一节中省略所有包含x86_64的命令。


第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 Plasma特定错误:

还有一个我无法在KDE Plasma中修复的错误:在以nvidia模式启动PC后,每当我从Nvidia切换到Intel时,ksmserver崩溃且PC无法使用,我必须通过按一下将其关闭电源按钮约5-10秒。有时这会导致将更新替代项更改为nvidia-prime而不是intel-mesa,从而在启动时导致黑屏

如果您碰巧受到ksmserver错误的影响,请在bugs.kde.org上提供正式的错误报告

但是,即使在使用nvidia模式时,也可以通过始终在关机前选择intel模式来避免PC无法关机的问题。如果这样做,首先一切都会正常,并且您无需通过长按电源按钮来关闭PC的电源,除非您在nvidia模式下应用了本指南。

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

第1步:

进入恢复模式后,您可以再次访问PC,选择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

1
在下面检查我的答案。
whizzzkid

嘿,非常感谢!当我运行您的poweroff脚本时,我的com只是挂起(注销之前)。还有其他解决方法吗?
Wboy

不幸的是,我不知道还有其他修复方法。这对我来说有效。正如我所写,您的问题也发生在我的案例中,但这只是第一次。如我所写,您必须在注销之前切换回Intel。这样就不会发生此错误。(至少就我而言)。
C11235 '17

您好@ C11235感谢您的修复。我想问你一件事:第一次安装nvidia默认驱动程序是在nvidia中设置的。那我什么时候应该运行脚本?和什么是root登录?
Glats

不幸的是,我的回答的这一部分含糊不清。我的意思是您登录后以root身份运行脚本(例如,使用sudo)。您应该在刚登录并已切换到英特尔模式时运行脚本。这将暂时完全禁用nvidia GPU。第二个应该在以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

谢谢!不幸的是,您是对的,请参阅我的最新问题。您介意我更新答案以包括更简便的安装方法吗?
C11235 '17

@ C11235哦,是的。我能够弄清楚这一切:gist.github.com/whizzzkid/37c0d365f1c7aa555885d102ec61c048 我现在在空闲状态下运行5.8W。
whizzzkid

太棒了!我检查了您的说明,降低功耗的原因与我的情况相同。我编写了一个脚本,该脚本使用bbswitch在素数选择切换的英特尔模式下禁用nvidia GPU。在我的情况下,这更方便,因为我有一个外接显示器,几乎只使用nvidia模式,所以这就是为什么我想使用nvidia-prime而不是大黄蜂。另外,使用nvidia-prime时的性能应该比使用大黄蜂时更好。
C11235

2

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

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

这实际上对我有用,但是答案可以改善。我会建议改善
Vladyslav Matviienko

1

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

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

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

我在用着:

  • 微星笔记本电脑(GL72 7RDX)
  • 集成GPU:英特尔®HD Graphics 630(Kaby Lake GT2)
  • 单独的GPU:Geforce GTX 1050
  • 操作系统:Ubuntu 16.04 lts

解决此问题的方法:

编辑文件/ etc / modules(具有root特权)并添加以下行

    bbswitch

现在,即使我以intel模式启动,bbswitch仍可运行,而C11235的第二个修复程序也可以正常工作。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.