在Ubuntu切換外接顯卡與內建顯卡 / Switching eGPU and Build-in GPU in Ubuntu
外接顯示卡盒子雖然是用USB Type-C來連結電腦,但它本身並不支援熱插拔。你必須要完全讓電腦關機,才能拔掉或連接外接顯示卡盒子。但對Linux來說,X視窗的Xorg也是外接顯示卡切換需要考慮的問題。
xorg.conf
為了要讓Linux的X視窗正常運作,適當地配置 /etc/X11/xorg.conf 是關鍵步驟。在有安裝外接顯示卡盒子、連結NVIDIA顯示卡的狀況下,我們可以用「sudo nvidia-xconfig --prime」來建立xorg.conf。但在沒接上外接顯示卡的時候,這樣的xorg.conf卻會導致無法進入桌面。
為了克服這個問題,我們需要一些方法來動態決定什麼情況需要什麼樣的xorg.conf。
https://mensfeld.pl/2012/11/running-a-script-on-startup-before-x-starts-in-ubuntu-linux/
MACIEJ MENSFELD介紹了他依照不同時間動態決定xorg.conf的方法,然後把這個腳本儲存到 /etc/init.d/xselector ,並連結到開機啟動中處理文字模式的階段。
我們可以參考它的做法來建構類似的xselector腳本:
#!/bin/bash
#sudo ln -s /etc/init.d/xselector /etc/rc2.d/S01xselector
video_egpu(){
rm /etc/X11/xorg.conf
cp /etc/X11/xorg.conf.nvidia /etc/X11/xorg.conf
}
video_out(){
rm /etc/X11/xorg.conf
}
# If this is a work day
if [[ $(lspci | grep NVIDIA) ]]; then
video_egpu
else
video_out
fi
其中「lspci | grep NVIDIA」是偵測現在電腦有沒有顯示卡的狀態。
有了xselector腳本後,我們還要做幾件事情:
- 將xselector腳本儲存到 /etc/init.d/xselector
- 加入執行權限:chmod +x /etc/init.d/xselector
- 連結到開機程序:sudo ln -s /etc/init.d/xselector /etc/rc2.d/S01xselector
- 將原本的xorg.conf設定複製成 xorg.conf.nvidia:sudo cp /etc/X11/xorg.conf /etc/X11/xorg.conf.nvidia
原作者是把腳本放到S15xselector的位置,但我自己這樣擺,系統會一直判斷錯誤,所以我把它改成S01xselector。
如此一來,系統就會在開機的過程中,依據現在有沒有裝顯示卡的狀態,來決定要使用或不使用xorg.conf。
小知識大考驗:X視窗是由X Server跟X Client構成的系統。
猜猜看,是誰負責顯示圖形畫面的呢?(答案在鳥哥私房菜)
(封面圖片來源:SOFTPEDIA NEWS)
eGPU 是可以隨插即用的,另外 vga selector 設定成獨立 service 比較方便。可以參考下列連結的 repo,我的使用經驗還不錯。
回覆刪除https://github.com/claudio-walser/egpu-setup
To study,
回覆刪除感謝分享~
不然我現在外接顯卡只要一斷連,整個電腦就無法動彈了。
不過我用的是Ubuntu,跟Fedora還是有點不一樣。
我想說等Ubuntu官方有更完整的支援再來看看吧。