在Prime-select intel之后,Ubuntu会在登录时冻结

我有一台带有Intel 560和Nvidia GTX 1050的华硕GL553,我尝试用nvidia-prime配置我的混合卡。 我安装了Ubuntu Gnome 17.04,然后安装了nvidia-381并运行了prime-select intel我不得不重启,当我尝试登录系统冻结时。 我已经研究和阅读了所有这些主题,但我找不到解决方案。

  • https://devtalk.nvidia.com/default/topic/991853/complete-freeze-with-nvidia-prime/?offset=8
  • https://devtalk.nvidia.com/default/topic/991853/complete-freeze-with-nvidia-prime/?offset=18
  • 编辑为:关闭在16.04与4.7.2内核的intel grapics上挂起
  • NVIDIA-PRIME:不能切换到英特尔
  • https://bugs.launchpad.net/lightdm/+bug/1637733
  • https://bugs.launchpad.net/ubuntu/+source/nvidia-prime/+bug/1663926

有没有人可以正确配置nvidia?

我终于做到了。

1.-创建一个文件夹来存储SSDT文件。 然后从ACPI表中提取它(以root身份运行此部分):

# mkdir dsdt # cd dsdt # SSDT_FILES=`ls /sys/firmware/acpi/tables/ | grep SSDT` # for file in $SSDT_FILES ; do cat "/sys/firmware/acpi/tables/$file" > "$file.dat"; done # cat /sys/firmware/acpi/tables/DSDT > DSDT.dat 

2.-确保安装了IASL。 在ubuntu上,sudo apt install iasl就足够了。 我下载了源代码并自己编译以获得最新版本,但我认为没必要。

3.-在一个SSDT文件中有一个重复的定义,不允许我们对它进行反汇编。 找出它是哪一个并删除它:

 # grep PRT0 *.dat Binary file DSDT.dat matches Binary file SSDT1.dat matches # mv SSDT1.dat SSDT1.bak 

所以在我的情况下它是SSDT1。 用你得到的任何东西替换它。 请勿触摸DSDT.dat

4.-接下来,我们找到SSDT文件,其中包含我们需要更改的代码。 我们寻找同时存在“NVID”和“OSYS”的文件:(在grep中可能有更好的方法)

 # grep NVID *.dat Binary file SSDT10.dat matches Binary file SSDT3.dat matches # grep OSYS SSDT10.dat # grep OSYS SSDT3.dat Binary file SSDT3.dat matches 

所以在我的情况下它是SSDT3,如果它不同你用你得到的任何东西替换SSDT3的所有其他实例。

5.-拆卸!

 # iasl -e *.dat -d SSDT3.dat 

6.-希望您此时没有看到任何错误。 使用Windows 7的常量替换除声明之外的所有OSYS实例,并将定义块编号加1:

 # sed -i '/^ *External/! s/OSYS/0x07D9/g' SSDT3.dsl # sed -i '/^ *DefinitionBlock/ s/0x00001000/0x00001001/g' SSDT3.dsl 

如果您有不同的BIOS,则定义块编号可能不是1000.只需在文本编辑器中打开SSDT3.dsl并查找DefinitionBlock。 无论你在该线上看到什么数字,都要加1。

7.-编译所有内容并希望没有错误。

 # iasl -ve -tc -p SSDT3 SSDT3.dsl 

8.-制作图像:

 # mkdir -p kernel/firmware/acpi # cp SSDT3.aml kernel/firmware/acpi/ssdt3.aml # find kernel | cpio -H newc --create > acpi_gpufix 

8.-以下所有与Ubuntu和GRUB2相对应的说明。 将其复制到启动文件夹。 initrd.img它是来自boot文件夹的默认img:

 # cp acpi_gpufix /boot/ 

您可以通过编辑/etc/grub.d/10_linux将其永久添加到GRUB中。 我不得不将initrd ${rel_dirname}/${initrd}行更改为initrd ${rel_dirname}/acpi_gpufix ${rel_dirname}/${initrd} 。 然后运行update-grub2。

9.-检查它是否有效:

 $ dmesg | grep ACPI | grep override [ 0.000000] ACPI: Table Upgrade: override [SSDT-PegSsd- PegSsdt] [ 0.000000] ACPI: SSDT 0x000000007A715080 Physical table override, new table: 0x0000000079493000 

现在你可以改变GPU冻结了

资源:

https://github.com/Bumblebee-Project/Bumblebee/issues/764#issuecomment-306543064 https://devtalk.nvidia.com/default/topic/1012369/linux/laptop-freezes-changing-video-cards

很久以前我曾经有一台nvidia笔记本电脑,并且与gnome有类似的问题。 唯一对我有用的是卸载gnome并改为使用KDE。 但我重复那个很久以前的10~版本我猜。

您可以从命令模式开始执行此操作:

要引导进入single user模式,可以编辑要引导的GRUB菜单项的引导指令,并添加内核参数/选项single 。 有关如何执行此操作的简要说明如下。

  • 在重新启动时按住左Shift键以显示GRUB菜单
  • 选择(突出显示)要使用的GRUB引导菜单项。
  • e编辑所选引导菜单条目的GRUB引导命令。
  • 查看命令列表底部附近的类似行

    linux /boot/vmlinuz-3.2.0-24-generic root = UUID = bc6f8146-1523-46a6-8b \ 6a-64b819ccf2b7 ro quiet splash initrd /boot/initrd.img-3.2.0-24-generic

  • 通过将单个内核引导参数添加到行的末尾(即在ro quiet splash之后)来更改(4)中的中间行。

对于此示例,您将更改:

 6a-64b819ccf2b7 ro quiet splash 

 6a-64b819ccf2b7 ro quiet splash single 
  • Ctrl+XF10以使用这些内核选项启动。

注意:这些更改不是持久的。 以这种方式对内核引导选项进行的任何更改只会影响下一次引导,并且只有在仍处于GRUB编辑模式时按Ctrl + X或F10才能启动该引导。