:::

在Ubuntu切換外接顯卡與內建顯卡 / Switching eGPU and Build-in GPU in Ubuntu

2月 27, 2023 , , 2 Comments Edit Copy Download

2023-0203-005237.png

外接顯示卡盒子雖然是用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。

2023-0203-004048.png

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腳本後,我們還要做幾件事情:

  1. 將xselector腳本儲存到 /etc/init.d/xselector 
  2. 加入執行權限:chmod +x /etc/init.d/xselector
  3. 連結到開機程序:sudo ln -s /etc/init.d/xselector /etc/rc2.d/S01xselector
  4. 將原本的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)

總共2 則留言 ( 我要發問 , 隱藏留言 顯示留言 )

  1. eGPU 是可以隨插即用的,另外 vga selector 設定成獨立 service 比較方便。可以參考下列連結的 repo,我的使用經驗還不錯。
    https://github.com/claudio-walser/egpu-setup

    回覆刪除
  2. To study,

    感謝分享~
    不然我現在外接顯卡只要一斷連,整個電腦就無法動彈了。
    不過我用的是Ubuntu,跟Fedora還是有點不一樣。
    我想說等Ubuntu官方有更完整的支援再來看看吧。

    回覆刪除