在 Linux 環境下使用 xrand 和 cvt 來新增其他螢幕解析度與控制螢幕顯示

目前 Linux 系統 和 KDE 桌面環境已經整合的十分漂亮,尤其是硬體部份,更是讓使用者在使用的時候,咸少感到不適。

以螢幕設備來說,目前 KDE 已經和 Xrandr 合作的十分成功的情況下,操作起來真的也十分直覺順暢。操作界面如下圖:

不過,若遇到有些螢幕的顯示比較與眾不同,系統則會偵測錯誤,從而造成有些想要的解析度無法呈現出來。

面對這個問題,可以利用「xrandr」和「cvt」這兩個工具程式來做系統性的解決。

整個過程,大致可分為「列出目前現有狀況」、「偵測與生成新的解析度參數」、「加入新解析度參數」、「套用與調校」四個過程。
(註: xrandr 和 cvt 分別是 x11-xserver-utils 和 xserver-xorg-core 底下的工具程式。)

  1. 列出目前現有狀況
  2. 了解這部機器有哪些螢幕連接界面,以及目前正連接上螢幕的狀況。

    命令/語法:
    /usr/bin/xrandr

    由執行結果可以得知,這部機器目前:

    • 有 4 個螢幕連接界面:eDP-1, HDMI-1, DP-1, HDMI-2。
    • 目前正透過 eDP-1 連接一個螢幕,其餘 3 個螢幕連接界面,目前都沒有連接螢幕。
    • 螢幕支援許多解析度,目前使用的的解析度為「1920×1080」(有 * 符號者)。

     

  3. 偵測與生成新的解析度參數
  4. 若目前所列出的螢幕解析度並沒有自己所需要的模式,可執行「/usr/bin/cvt」來偵測與生成解析度參數。

    若要生成解析度為 1920×1028 螢幕更新頻率為 60HZ。

    命令/語法:

    /usr/bin/cvt 1920 1028 60


    /usr/bin/cvt 1920 1028
    (由於螢幕更新頻率預設值為 60HZ,所以可省略!但若為其他,則必須要填上)

    由執行結果可得:
    Modeline “1920x1028_60.00” 163.75 1920 2040 2240 2560 1028 1031 1041 1067 -hsync +vsync

     

  5. 加入新解析度參數
  6. 宣告與新增一個新的解析度選項,使用 xrandr 指令將剛才 cvt 生成的參數合併,生成新的螢幕解析度選項,原 “1920x1028_60.00” 可以自行更名,例如更名為 “1920x1028_new”

    命令/語法:

    /usr/bin/xrandr –newmode “1920x1028_new” 163.75 1920 2040 2240 2560 1028 1031 1041 1067 -hsync +vsync

     

    再將 “1920x1028_new” 加入 eDP-1 螢幕解析度組中。

    命令/語法:

    /usr/bin/xrandr –addmode 螢幕名稱 “解析度選項名稱”

    所以,
    /usr/bin/xrandr –addmode eDP-1 “1920x1028_new”

     

  7. 套用與調校
  8. 將新的解析度選項套用到螢幕。

    命令/語法:

    /usr/bin/xrandr –output 螢幕名稱 –mode “解析度選項名稱”

    所以,
    /usr/bin/xrandr –output eDP-1 –mode “1920x1028_new”

     


若是想同時使用 eDP-1 螢幕 並接上 HDMI 螢幕來作為雙螢幕應用。

系統預設會將非熱插拔顯示裝置作為主螢幕,所以 eDP-1 會被識別為 primary screen。

當然也可以透過 xrandr 來決定哪個螢幕中做為主螢幕,例如將 eDP-1 設為主螢幕,此時 HDMI-1 螢幕就會被視為「延伸螢幕」。
/usr/bin/xrandr –output eDP-1 –primary

可以將兩個螢幕設定成「同步顯示」:
/usr/bin/xrandr –output HDMI-1 –same-as eDP-1 –auto

也可以決定將 eDP-1 螢幕放在左邊,HDMI-1 螢幕放在右邊:
/usr/bin/xrandr –output HDMI-1 –right-of eDP-1 –auto

或是將 HDNI-1 螢幕往右邊旋轉:
/usr/bin/xrandr –output HDMI-1 –rotate right

關於旋轉,有四種情況可選:一般(預設值),上下相反(180度),往左旋轉90度,往右旋轉90度。(normal,inverted,left,right)

xrandr 還有許多參數可供使用,若有需要就「 xrandr –help 」就可以獲得許多明確參考訊息。

 


以自己教室個人用電腦為例,使用兩部螢幕,一部接在 HDMI-2,一部接在 VGA-0,兩部螢幕雖然型號完全一樣,但系統可以抓到連接到 HDMI-2 螢幕的解析度 1280×1024 的參數,但卻無法準確抓到連接在 VGA-0 螢幕在解析度 1280×1024 模式的參數。

所以,只要調校 HDMI-2 螢幕就可。

  1. 先偵測螢幕在 1280×1024 的參數:
  2. cvt 1280 1024 60

  3. 用 xrandr 將偵測到的參數,新增為一組解析度選項
  4. xrandr –newmode 1280x1024_58.85 106.00 1280 1360 1488 1696 1024 1027 1034 1062 -hsync +vsync

  5. 再用 xrandr 將新增的解析度選項,加入到 VGA-0 螢幕
  6. xrandr –addmode VGA-0 1280x1024_58.85

  7. 因為我是使用雙螢幕,接在 VGA-0 的螢幕是放接在 HDMI-2 螢幕的右邊,所以:
  8. xrandr –output VGA-0 –mode 1280x1024_58.85 –right-of HDMI-2

 


參考資源

  1. Linux 新增其他螢幕解析度到 xrandr
  2. https://linwebs.tw/note/linux-add-screen-solution

  3. OK3399 Ubuntu 雙屏擴充套件顯示+雙屏異觸
  4. https://www.gushiciku.cn/pl/g6db/zh-tw

  5. [Linux] 使用 xrandr 指令調整延伸螢幕、相同螢幕、解析度
  6. https://clay-atlas.com/blog/2020/10/23/linux-cn-xrandr-adjust-resolution-screen-settings/

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

*