Ubuntu解決Nvidia驅動缺失導致的HDMI無法輸出問題


朋友的電腦是聯想Y7000,因為Nvidia驅動的問題幾次頭疼腦大。這次是出現了HDMI在Windows 10下輸出正常,而Ubuntu系統下無法輸出。

原因分析

如果通過HDMI去連接顯示器以后會發現顯示器沒有任何輸出, 這主要是因為此電腦的HDMI接口是連在獨顯上的, 但是獨顯的閉源驅動並沒有安裝上, 所以顯示器沒有任何輸出, 通過成功安裝GTX1650顯卡驅動, 外接顯示器就可以正常工作。
如此看來,原因即為顯卡驅動為正常安裝。

安裝驅動方式的選擇

NVIDIA驅動一共有三種方法:

  • ppa方式, 也就是添加軟件源, 然后sudo apt-get install xxxx, 通過deb文件進行安裝;
  • 附加驅動方式,也就是系統設置->軟件和更新->附加驅動中可以找到NVIDIA的驅動, 點擊合適的版本,最后應用更改; (我這里是添加了ppa以后附加驅動才有內容的, 沒有加ppa之前附加驅動是空白的);
  • .run方式, 也就是去NVIDIA驅動官網下載對應顯卡的run文件。
    按照參考資料,我們選擇第一種方法。

安裝之路

  1. 查看自己的顯卡版本
    lspci | grep -i NVIDIA
    注:

    1. 如果查看驅動版本可使用:sudo dpkg --list | grep nvidia-*
    2. 亦可以使用lspci -k | grep -A 2 -i "VGA",但是可能無法顯示出具體版本(如GTX 1050 Ti)型號。
  2. 卸載原有舊驅動(若安裝過)
    由於第一次安裝不成功, 所以需要卸載以前不成功的驅動, 卸載方法如下(第一次安裝NVIDIA則可以跳過):
    ppa方式安裝:sudo apt-get purge nvidia-*
    .run方式安裝:cd <the path of .run file>$ sudo ./NVIDIA-Linuxxxxx-version.run --uninstall

  3. 屏蔽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

  4. 升級內核
    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
    

    解決方法為下載相應的文件, 復制到對應的目錄。

    1. 下載地址:https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/tree/i915
      備注:個人地址:如果外網打不開或者是下載速度過慢,可使用此鏈接下載。kbl_guc_ver9_14.binbxt_guc_ver8_7.bin
    2. 安裝方法:
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/
  1. 重啟並進入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
  1. 檢查是否成功
  • 直觀地,可以看顯示器是否被識別。輸入命令xrandr,看是否識別了Screen 1,以及HDMI;
  • 重啟以后可以發現系統設置->詳細信息中的圖形變成了: GeForce GTX 1050 Ti;
  • 通過nvidia-settings打開NVIDIA的配置面板, 可以發現渲染器Renderer為獨立顯卡GTX 1050;
  • 通過nvidia-smi --loop=1可以發現, 系統是否使用了NVIDIA顯卡驅動, 如果使用率為0, 多半是安裝錯誤。

注意:若安裝失敗勿驚慌,直接進入tty1卸載驅動重裝即可。

最終解決方法

在ubuntu16.04剛安裝時,顯卡默認為Intel集成顯卡。

  1. 禁用自己的secure boot,也就是設置為disable,具體的進入自己bios中找一下,一般在security或者boot里面。

  2. 進入終端輸入兩條命令

ubuntu-drivers devices
sudo ubuntu-drivers autoinstall
  1. 重新啟動

注意:關鍵點其實在於secure boot,當然不禁止也是可以的。安裝過程中會引導輸入MOK密鑰,只需要重啟時在secure boot界面再輸入一次同樣可以加載第三方驅動。

附錄

設置雙顯示器方式

除了基本的使用設置功能,還可以使用命令行的方式:

  1. 打開外接顯示器,雙屏幕顯示相同的內容--克隆,(auto為最高分辨率)
    xrandr --output VGA-0 --same-as LVDS --auto
  2. 若要指定外接顯示器的分辨率可以使用下面的命令(1280x1024)
    xrandr --output VGA-0 --same-as LVDS --mode 1280x1024
  3. 打開外接顯示器,設置為右側擴展
xrandr --output VGA-0 --right-of LVDS --auto
xrandr --output VGA-0 --left-of LVDS --auto
  1. 關閉顯示器
    xrandr --output VGA-0 --off
  2. 打開VGA-0接口顯示器,關閉LVDS接口顯示器
    xrandr --output VGA-0 --auto --output LVDS --off
    注意:需要注意的是,在使用xrangr命令設置雙屏幕之前,需要先運行xrandr查看VGA,LVDS以及HDMI接口的連接方式以及接口正確的名稱,如上為:VGA-0,LVDS和HDMI。

tty模式下顯示錯亂問題

tty模式下中文亂碼解決,可參考此文章

參考資料

  1. https://zhuanlan.zhihu.com/p/83637608
  2. https://blog.csdn.net/jyl1999xxxx/article/details/78871622


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM