快轉到主要內容

Linux Wayland桌面的縮放,放大字型、改善HiDPI支援、解決字型模糊

· 民國114年乙巳年
· ·
分類   Linux系統 Linux使用技巧
標籤   Linux GNOME KDE Plasma Wayland
目錄

How to scale applications on Linux Wayland session.

Ivon將在這篇文章討論Linux系統Wayland協定桌面的縮放方式,適用Ubuntu、Fedora、Arch Linux等發行版。用到的桌面環境為GNOME與KDE Plasma。

什麼時候會遇到需要縮放的問題呢?

  1. 4K解析度的HiDPI大螢幕會遇到程式字太小的問題,需要放大。
  2. 筆電螢幕太小,需要放大程式

由於Wayland現在的機制還不完善,調整縮放的時候會遇到各式各樣的問題,所以Ivon寫一篇記錄下來。

這裡使用的通訊協定為Wayland,如果你使用X11請看這篇

1. 如何確認Wayland還是X11
#

如何確認目前的桌面工作階段為Wayland還是X11?輸入指令echo $XDG_SESSION_TYPE確認。

如何確認程式是跑在Wayland協定,還是跑在XWayland下?使用xlsclients指令,即可確認哪些程式是使用X11協定。XWayland程式的縮放行為跟原生Wayland程式不一樣,所以要特別關注。

2. Wayland的縮放問題
#

首先你要知道的是,Wayland工作階段沒有X伺服器,不能使用「xrandr」這種通用工具來調整螢幕縮放,而「wlr-randr」工具僅支援wlroots寫成的合成器,所以這得看桌面環境的合成器怎麼設計縮放機制了。

Linux的縮放分為整數縮放 (integer scaling) 與非整數縮放 (fractional scaling,又稱分數縮放),前者就是只有100%與200%的差別,後者則是能夠有100%、125%、150%、175%、200%的選項。建議使用後者非整數縮放,能夠精細的控制縮放大小。

理想情況下,最好是由桌面環境的合成器來控制縮放,只要在設定面板調整縮放比例,整個系統UI或者字型就會跟著統一縮放。這裡「縮放」跟「字型縮放」是不一樣的概念。縮放是讓程式的界面全部放大,而字型縮放只是放大字型,讓程式看起來比較大,改善可讀性。

可惜事情沒有這麼簡單,不是所有程式都原生支援Wayland。我們還要考慮XWayland程式的問題。XWayland是跑在Wayland下的舊版X11程式,開發者尚未將其改寫為原生Wayland版本。他們可能不會跟著合成器的指示縮放。若強制縮放的話字型會模糊。

字型縮放模糊的範例,左邊為XWayland的Chrome,縮放後字型模糊;右邊為Wayland的Chrome,縮放後字型沒有模糊。

compare.webp

因為有XWayland程式的存在,使得Wayland縮放的問題複雜了起來。

下面我們來討論解法。

3. 全域縮放
#

全域縮放會試圖讓所有程式跟著縮放。

GNOME
#

GNOME 47桌面的非整數縮放處於實驗性狀態,Wayland和XWayland都是如此,縮放開下去可能會有各種bug。折衷的辦法是不要設定全域縮放,只縮放字型就好(見下一節)。

  1. 執行以下指令開啟GNOME的非整數縮放功能:
gsettings set org.gnome.mutter experimental-features "['scale-monitor-framebuffer']"

gsettings set org.gnome.mutter experimental-features "['xwayland-native-scalling']"
  1. 之後在GNOME的系統設定 → 顯示器,才會有非整數縮放。

    gnomescaling.webp

  2. GTK與原生Wayland的程式會全域縮放,較新的QT程式應當也會跟著縮放。XWayland程式可能得手動設定環境變數縮放。

KDE Plasma
#

KDE Plasma 5.27以上版本支援非整數縮放。

  1. 點選KDE系統設定 → 顯示,設定程式縮放

  2. GTK和QT程式應當會跟著縮放。

  3. 為了防止程式模糊,KDE允許「讓XWayland程式自行縮放」。例如Wayland程式會跟著縮放為125%,而XWayland會維持100%縮放。針對部份XWayland的程式,使用者得自行設定環境變數調整縮放。

4. 只縮放字型
#

此為折衷方案,只放大程式的字型,不放大UI,改善可讀性。

這麼做的好處是字型都會強制放大。

壞處就是字型太大可能會破壞UI美感,使得畫面不和諧。且有些程式依然不鳥你的字型大小,還是得手動設定環境變數縮放。

GNOME
#

點選GNOME設定 → 無障礙輔助 → 大型文字,啟用大型字型,強制放大全部程式的字型,大概會變大個1.25倍,至少能改善可讀性。

largefonts.webp

如果你需要更精細的字型尺寸,安裝gnome-tweaks套件,開啟「調校」程式,在裡面設定字型的縮放係數。

gnometweaks.webp

KDE Plasma
#

在KDE的系統設定 → 字型,指定全域字型的大小。

fontsscaling.webp

5. 個別程式縮放,設定環境變數
#

如果程式沒有跟著縮放,那麼就只能個別程式設定縮放的環境變數了。你需要依照程式使用的框架,來設定適當的環境變數。

在設定環境變數之前,得先確認你的程式是使用Wayland還是跑在Xwayland,Wayland的環境變數跟X11不能混用。

如何設定環境變數?寫入到~/.bashrc。例如:

# 編輯檔案
vim ~/.bashrc

# 填入環境變數
export name=value

# 編輯完成後重開機

GTK環境變數
#

原生Wayland的GTK 4程式應該會自動跟著桌面環境全域縮放。無法個別指定縮放比例。

例如最新版Firefox預設就是使用Wayland協定,所以它會跟著桌面環境縮放。

不要用GDK_SCALEGDK_DPI_SCALE,這個是X11工作階段在用的。你可以加入環境變數GDK_BACKEND=x11強制特定GTK程式以X11協定執行(例如GDK_BACKEND=x11 firefox),這二個環境變數才會有效。

QT環境變數
#

原生Wayland的QT 6程式應該會跟著桌面環境全域縮放。無法個別指定縮放比例。

例如最新版Krita應該會跟著縮放。

QT_AUTO_SCREEN_SCALE_FACTORQT_ENABLE_HIGHDPI_SCALING這二個調整縮放的環境變數僅限X11協定使用,Wayland無效。

你可以加入環境變數QT_QPA_PLATFORM=xcb強制特定QT程式以X11協定執行,例如QT_QPA_PLATFORM=xcb krita

Electron與Chromium瀏覽器
#

如果跑在純Wayland模式(使用--ozone-platform=auto參數啟動),最新版的Chromium和Electron應該會跟著桌面環境縮放。

--force-device-scale-factor的參數在Wayland下無效,僅限X11協定使用。

Wine/Proton的環境變數
#

目前Wine 9.0與Steam Proton 9.0尚未完全支援Wayland,大部分程式都是跑在XWayland。Steam客戶端也是一樣。

要設定透過Wine執行的Windows exe程式,請用winecfg指令,設定程式DPI。

wine.webp

至於Steam客戶端,請用環境變數STEAM_FORCE_DESKTOPUI_SCALING=1.5設定縮放比例。

6. 解決XWayland縮放字型模糊
#

有些桌面環境強制所有程式縮放,會導致XWayland程式的字型模糊。

解法:

  1. 傳入特定參數,強制X11程式使用Wayland模式,字型就不會模糊。但是有的程式強制用Walyand跑問題會更多。
  2. 個別給他們設定環境變數。因為X11程式跑在Wayland下,會變成透過XWayland執行,此時它們的縮放行為與X11環境下相同。

2.是比較好的作法,參考Linux X11縮放的教學

7. Wayland多螢幕縮放
#

假設一個螢幕1080p,一個螢幕4K,兩個螢幕就會有縮放不一致的問題。

如果全域縮放正常的話,那麼在桌面環境的系統設定選單,個別給兩個螢幕設定縮放比例即可。

例如,KDE做如下設定之後,視窗移動到另外一個螢幕後,就會自動依照那個螢幕的縮放設定放大。

參考資料
#

相關文章

Linux X11桌面的螢幕縮放比例 & 個別程式縮放(scale)的方法
分類   Linux系統 Linux使用技巧
標籤   Linux GNOME KDE Plasma X Window
Linux系統如何讀取Windows的NTFS硬碟&開機自動掛載
分類   Linux系統 Linux使用技巧
標籤   Windows Linux GNOME KDE Plasma
如何修改Linux開啟檔案的預設程式 (XDG MIME Applications)
分類   Linux系統 Linux使用技巧
標籤   Freedesktop Specifications GNOME KDE Plasma

留言板

此處提供二種留言板。點選按鈕,選擇您覺得方便的留言板。要討論程式碼請用Giscus,匿名討論請用Disqus。

這是Disqus留言板,您可能會看到Disqus強制投放的廣告。為防止垃圾內容,有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。若要上傳圖片請善用圖床網站。