Ubuntu16.04系統nvidia顯示卡上圖形介面及OpenGL環境搭建心得
之前實驗室的伺服器上的外接GPU一直是用來處理深度學習等任務,沒有用來做圖形介面的顯示,現在想要用OpenGL做開發,然而在Linux下,OpenGL是使用輸出圖形介面的GPU做為運算資源的,無法更改到其他GPU上去(也許是我能力不足,在網上找了好幾天都沒有找到辦法更改)。而我的集顯(預設輸出),最高只支援GLSL3.0,我卻需要GLSL3.3的支援,所以不得不把NVIDIA顯示卡用來做輸出顯示。羅列一下要點:
第一點,將顯示器接在外接GPU上。
這一點很基礎,但卻容易忘,不要把GPU想象成記憶體條一樣的存在,並不存在使用集顯上的VGA輸出口輸出NVIDIA圖形介面的方法。
第二點,安裝正確的NVIDIA驅動
網上有很多關於安裝驅動的教程,我就不多講了,提一點:
如果要用sudo ubuntu-driver autoinstall來安裝系統推薦的顯示卡驅動的話,一定要先新增教程裡說的ppa:graphics-drivers/ppa的映象源,不然下不到正確的版本。我沒新增這個映象源之前,讓系統自動安裝,它會幫我安裝一個nvidia-410.79的驅動(對應NVIDIA tesla 系列的顯示卡,之前伺服器上裝的就是這種顯示卡,但是很久之前就已經被拆下來了,不知道什麼原因系統把它記住了)。
如果要手動安裝.run檔案,不需要加上-no-opengl-flies選項,因為據說NVIDIA有自己的OpenGL檔案,如果不加這個選項,可能會導致原來用來支援集顯驅動的OpenGL檔案受到影響,導致原來的集顯沒有輸出(所謂的黑屏)。但如果加上這個選項,則NVIDIA的輸出可能就不能用了,所以像我們這些需要NVIDIA做OpenGL開發的人,還是什麼選項都不加的好
第三點,修改xorg.conf檔案
這一點是最最重要的一點,NVIDIA有個nvidia-xconfig的命令用來自動配置xorg.conf檔案,然而我按這個配置檔案來並不能正常開啟螢幕,後來我發現一定要在xorg.conf檔案中的那個有NVIDIA的device單元中加上顯示裝置輸出的BusID。而這個BusID可以通過lspci | grep -i vga 來檢視(不過你是HDMI還是DVI口等,這裡都寫著“類似VGA的輸出”),然而最最狗血的一點來了,通過lspci檢視的BusID是16進位制的,而xorg.conf裡要填的是十進位制的!!之前我通過lspci 檢視我的1080Ti的顯示卡的ID是82:0:0,然後一直沒有輸出,後來檢視xorg.0.log裡一直有個130:0:0的裝置,拿計算器算了下,擦!!16進位制的82就是10進位制的130,這才明白髮生了什麼。。後來改了BusID後就立馬進去了。
額外任務一,遠端啟動影象介面
由於是實驗室的伺服器,也就意味著不會一直在它身邊,因此需要一個遠端桌面的工具來檢視你的OpenGL輸出結果。teamviewer是個不錯的選擇,但有個不足是長時間連線不是很穩定(比如一夜不動,第二天一來發現已經斷開連線了),這是就需要遠端啟動介面。
其實很開teamviewer很簡單,只需一個ID,一個密碼,和一個遠端機子上開啟的teamviewer服務就行了。。
#設密碼...
sudo teamviewer passwd YourNewPasswd
# 這裡可以看id
teamviewer info
#開啟teamviewer服務
sudo teamviewer --daemon restart
額外任務二,新增雙屏
由於伺服器集顯是被廠商設計成硬體監測,即使在BIOS介面上都能被遠端監測到。因此不行浪費集顯的這個功能,正在研究如何進行雙屏顯示,大致思想還是修改xorg.conf。
參考:
http://blog.sina.com.cn/s/blog_7cd2354e01018s9j.html