朋友的電腦是聯想Y7000,因為Nvidia驅動的問題幾次頭疼腦大。這次是出現了HDMI在Windows 10下輸出正常,而Ubuntu系統下無法輸出。
原因分析
如果通過HDMI去連接顯示器以后會發現顯示器沒有任何輸出, 這主要是因為此電腦的HDMI接口是連在獨顯上的, 但是獨顯的閉源驅動並沒有安裝上, 所以顯示器沒有任何輸出, 通過成功安裝GTX1650顯卡驅動, 外接顯示器就可以正常工作。
如此看來,原因即為顯卡驅動為正常安裝。
安裝驅動方式的選擇
NVIDIA驅動一共有三種方法:
- ppa方式, 也就是添加軟件源, 然后sudo apt-get install xxxx, 通過deb文件進行安裝;
- 附加驅動方式,也就是系統設置->軟件和更新->附加驅動中可以找到NVIDIA的驅動, 點擊合適的版本,最后應用更改; (我這里是添加了ppa以后附加驅動才有內容的, 沒有加ppa之前附加驅動是空白的);
- .run方式, 也就是去NVIDIA驅動官網下載對應顯卡的run文件。
按照參考資料,我們選擇第一種方法。
安裝之路
-
查看自己的顯卡版本
lspci | grep -i NVIDIA
注:- 如果查看驅動版本可使用:
sudo dpkg --list | grep nvidia-*
; - 亦可以使用
lspci -k | grep -A 2 -i "VGA"
,但是可能無法顯示出具體版本(如GTX 1050 Ti)型號。
- 如果查看驅動版本可使用:
-
卸載原有舊驅動(若安裝過)
由於第一次安裝不成功, 所以需要卸載以前不成功的驅動, 卸載方法如下(第一次安裝NVIDIA則可以跳過):
ppa方式安裝:sudo apt-get purge nvidia-*
.run方式安裝:cd <the path of .run file>$ sudo ./NVIDIA-Linuxxxxx-version.run --uninstall
-
屏蔽Ubuntu自帶驅動
由於電腦安裝了NVIDIA的開源驅動nouveau, 所以我們先要將其屏蔽掉, 屏蔽方法是將其放入blacklists中。
通過lsmod | grep nouveau
可以發現系統已載入的nouveau模塊,其后,輸入命令sudo gedit /etc/modprobe.d/blacklist.conf
,在blacklist.conf文件中, 最后一行輸入:
blacklist vga16fb blacklist nouveau blacklist rivafb blacklist rivatv blacklist nvidiafb
-
升級內核
sudo update-initramfs -u
注意:很可能遇到問題:W: Possible missing firmware /lib/firmware/i915/kbl_guc_ver9_14.bin for module i915 W: Possible missing firmware /lib/firmware/i915/bxt_guc_ver8_7.bin for module i915
解決方法為下載相應的文件, 復制到對應的目錄。
- 下載地址:https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/tree/i915
備注:個人地址:如果外網打不開或者是下載速度過慢,可使用此鏈接下載。kbl_guc_ver9_14.bin,bxt_guc_ver8_7.bin。 - 安裝方法:
- 下載地址:https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/tree/i915
cd [the path of bin file]
sudo cp kbl_guc_ver9_14.bin /lib/firmware/i915/
sudo cp bxt_guc_ver8_7.bin /lib/firmware/i915/
- 重啟並進入tty1模式
sudo reboot
重啟后通過Ctrl + Alt + F1進入tty1界面(這個界面是純黑底白字的, 如果想再次回到桌面, 可以通過Ctrl + Alt + F7進入), 然后將桌面管理器lightdm關閉, 添加ppa, 更新源, 查找推薦驅動, 安裝驅動, 開啟lightdm服務, 回到桌面, 重啟。具體命令如下:
sudo service lightdm stop
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt-get update
sudo ubuntu-drivers devices
# 這一步會看到推薦的驅動版本號,但不一定能顯示出來
sudo apt-get install nvidia-123 nvidia-settings nvidia-prime
sudo service lightdm start
sudo reboot
- 檢查是否成功
- 直觀地,可以看顯示器是否被識別。輸入命令
xrandr
,看是否識別了Screen 1,以及HDMI; - 重啟以后可以發現系統設置->詳細信息中的圖形變成了: GeForce GTX 1050 Ti;
- 通過
nvidia-settings
打開NVIDIA的配置面板, 可以發現渲染器Renderer為獨立顯卡GTX 1050; - 通過
nvidia-smi --loop=1
可以發現, 系統是否使用了NVIDIA顯卡驅動, 如果使用率為0, 多半是安裝錯誤。
注意:若安裝失敗勿驚慌,直接進入tty1卸載驅動重裝即可。
最終解決方法
在ubuntu16.04剛安裝時,顯卡默認為Intel集成顯卡。
-
禁用自己的secure boot,也就是設置為disable,具體的進入自己bios中找一下,一般在security或者boot里面。
-
進入終端輸入兩條命令
ubuntu-drivers devices
sudo ubuntu-drivers autoinstall
- 重新啟動
注意:關鍵點其實在於secure boot,當然不禁止也是可以的。安裝過程中會引導輸入MOK密鑰,只需要重啟時在secure boot界面再輸入一次同樣可以加載第三方驅動。
附錄
設置雙顯示器方式
除了基本的使用設置
功能,還可以使用命令行的方式:
- 打開外接顯示器,雙屏幕顯示相同的內容--克隆,(auto為最高分辨率)
xrandr --output VGA-0 --same-as LVDS --auto
- 若要指定外接顯示器的分辨率可以使用下面的命令(1280x1024)
xrandr --output VGA-0 --same-as LVDS --mode 1280x1024
- 打開外接顯示器,設置為右側擴展
xrandr --output VGA-0 --right-of LVDS --auto
xrandr --output VGA-0 --left-of LVDS --auto
- 關閉顯示器
xrandr --output VGA-0 --off
- 打開VGA-0接口顯示器,關閉LVDS接口顯示器
xrandr --output VGA-0 --auto --output LVDS --off
注意:需要注意的是,在使用xrangr命令設置雙屏幕之前,需要先運行xrandr查看VGA,LVDS以及HDMI接口的連接方式以及接口正確的名稱,如上為:VGA-0,LVDS和HDMI。
tty模式下顯示錯亂問題
tty模式下中文亂碼解決,可參考此文章。