在 nvidia-prime intel 之後,Ubuntu 在登錄時凍結
我有一個帶有 Intel 560 和 Nvidia GTX 1050 的 Asus 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 https://askubuntu.com/questions/831928/edited-to-shutdown-hangs-on-intel-grapics-on-16-04-with-4-7-2-kernel https://askubuntu.com/questions/879856/nvidia-prime-cant-switch-to-intel 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 實例,並將定義塊編號增加一:
# sed -i '/^ *External/! s/OSYS/0x07D9/g' SSDT3.dsl # sed -i '/^ *DefinitionBlock/ s/0x00001000/0x00001001/g' SSDT3.dsl
如果您有不同的 BIOS,Definition Block 編號可能不是 1000。只需在文本編輯器中打開 SSDT3.dsl 並查找 DefinitionBlock。無論您在該行看到什麼數字,都將其加一。
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 它是引導文件夾中的預設 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