X11

如何縮放桌面和/或應用程序的解析度/顯示?

  • September 16, 2021

在使用 Xorg X11 時,在 KDE/Gnome/XFCE上,我們如何縮放整個桌面和/或每個應用程序的顯示/解析度?(當這在設置 GUI 上不可用時)

目的是在縮放桌面/應用程序的大小(更大/更小)的同時保持螢幕解析度不變(最大)。

Linux顯示

這詳細介紹了 Linux 的顯示是如何工作的?質量保證。

在大多數桌面系統(如 KDE 或 Gnome)上,它們各自的設置面板上都有可用的設置,本指南適用於可用於擴展應用程序或整個桌面的附加/手動設置。這篇參考文章有很多有價值的資訊。

擴展應用程序

縮放應用程序可以主要通過 DPI、特定環境變數(解釋如下)、應用程序自己的設置或一些特定的桌面設置(超出本 QA 範圍)來完成。

  • Qt 應用程序可以使用以下環境變數進行縮放,請注意,許多應用程序是硬編碼大小和字型,因此此類應用程序的結果可能與預期不同。
export QT_AUTO_SCREEN_SET_FACTOR=0
export QT_SCALE_FACTOR=2
export QT_FONT_DPI=96
  • Gnome/GTK 應用程序可以使用以下環境變數進行擴展
export GDK_SCALE=2
export GDK_DPI_SCALE=0.5
  • Gnome/GTK 也可以使用此 Gnome 設置進行全域縮放
gsettings set org.gnome.desktop.interface text-scaling-factor 2.0 
  • Chromium,可以使用以下命令進行縮放
chromium --high-dpi-support=1 --force-device-scale-factor=1.5
  • Xpra (python) 可以與Run scaled一起使用,以實現每個應用程序的縮放。
  • ~/.profile登錄後可以對全域和自動設備進行環境變數修改。

使用 Xorg X11 縮放桌面

Xorg的擴展 RandR 具有縮放功能,可以使用xrandr. 這可用於縮放桌面以顯示更大的環境,這對於 HiDPI(每英寸高點數)顯示器很有用。

RandR也可以反過來使用,例如使最大解析度為 1366x768 的螢幕支持更大的解析度,例如 1920x1080。這是通過模擬新的更高解析度同時將其渲染為支持的最大解析度來實現的,類似於我們在非全高畫質螢幕上觀看全高畫質影片時。

在不改變解析度的情況下縮放桌面

  • 獲取螢幕名稱:
xrandr | grep connected | grep -v disconnected | awk '{print $1}'
  • 螢幕尺寸縮小20%(放大)
xrandr --output screen-name --scale 0.8x0.8
  • 螢幕尺寸增加20%(縮小)
xrandr --output screen-name --scale 1.2x1.2
  • 重置xrandr更改
xrandr --output screen-name --scale 1x1

縮放桌面並模擬/渲染新解析度

當使用以前xrandr的方法“放大”時,桌面保持全屏,但是當我們“縮小”例如(以獲得不支持的解析度)時,桌面不會全屏顯示,因為這需要更新解析度(可能是螢幕不支持的更高解析度),我們可以使用xrandr參數的組合來實現全屏“縮小”縮放(模擬新解析度),例如:xrandr --output screen-name --scale 1.2x1.2``--mode``--panning``--scale

  • 獲取目前設置
xdpyinfo | grep -B 2 resolution
# or
xdpyinfo
  • 配置範例
Scaling at:                      120%
Used/max screen resolution:      1366 x 768
Resolution at 120% (res x 1.2):  1640 x 922 (round)
Scaling factor (new res / res):  1.20058565 x 1.20208604 
  • 這裡的想法是虛擬地增加螢幕解析度(因為我們在物理上被限制為 1366x768)命令將是(替換screen-name):
xrandr --output screen-name --mode 1366x768 --panning 1640x922 --scale 1.20058565x1.20208604
  • 重置更改
xrandr --output screen-name --mode 1366x768 --panning 1366x768 --scale 1x1

# restarting the desktop may be required example with KDE
# kquitapp5 plasmashell
# plasmashell &

使 xrandr 更改持久化

有很多方法可以使xrandr更改持久化,這個這個QA 有很多例子。

實驗筆記

作為附帶說明和使用 SDDM + KDE 時的實驗結果,經過多次測試以實現持久配置,我最終載入了一個帶有~/.config/autostart( systemsettings5> Startup… > Autostart) 的腳本,並命名我的腳本00-scriptname以使其首先執行。

# 00-scriptname

# Applying the main xrandr suited changes (scaling at x1.15)

xrandr --output eDP1 --mode 1366x768 --panning 1574x886 --scale 1.15226939x1.15364583

# This is where it get odd/complicated, sometimes the screen resolution is not applied correctly or not applied at all... 
# Note that "xrandr --fb" can be used alone to change the screen resolution on a normal situation... 
# Here we will be taking advantage of xrandr's "--fb" feature to make the config appliance stable and works every-time.

# The odd thing here is while re-applying the new resolution 1574x886 with "--fb" nothing happen, but 
# if we use use an unsupported resolution like 1574x884 (vs 1574x886) then xrandr force the resolution 
# to "reset itself" to the configured resolution (1574x886)... 

# In short just re-apply the setting with "--fb" and an unsupported resolution to force a reset.
# ("--fb" can be used alone here without re-applying everything)

#xrandr --fb 1574x884 
xrandr --fb 1574x884 --output eDP1 --mode 1366x768 --panning 1574x886 --scale 1.15226939x1.15364583

參考

一些 KDE 的 gui 工具: systemsettings5 > 顯示kcmshell5 xserverkinfocenter.

連結和來源: 123456789101112

引用自:https://unix.stackexchange.com/questions/596887