HiDPI(High Dots Per Inch)顯示器,指的是在較小尺寸下卻擁有較高解析度的顯示器。Apple 將其稱作「視網膜屏幕」,這項技術主要存在於高端筆記本電腦和顯示器中。
並非所有的軟體都在高解析度屏幕下工作良好。此頁列出了一些常見的調整方法,讓您更好的使用 HiDPI 顯示器。
桌面環境
GNOME
可在設置 > 設備 > 顯示 > 縮放中設置合理的數值。也可以使用 gsettings 進行設置:
$ gsettings set org.gnome.settings-daemon.plugins.xsettings overrides "[{'Gdk/WindowScalingFactor', <2>}]" $ gsettings set org.gnome.desktop.interface scaling-factor 2
scaling-factor
僅能設置為整數。1 = 100%,2 = 200%,依此類推。非整數倍縮放請見下。非整數倍縮放
在某些設備(例如小平板電腦)上使用 scaling-factor
設置整數倍縮放的效果可能並不理想。wayland 和 Xorg 均支持非整數倍縮放,但步驟不同:
Wayland
啟用實驗性的非整數倍縮放功能:
$ gsettings set org.gnome.mutter experimental-features "['scale-monitor-framebuffer']"
之後再次打開設置 > 設備 > 顯示。如果沒有立即生效,請嘗試重啟。
如要為所有用戶啟用,需創建如下三個文件:
/etc/dconf/profile/user
user-db:user system-db:local
/etc/dconf/db/local.d/00-hidpi
[org/gnome/mutter] experimental-features=['scale-monitor-framebuffer']
/etc/dconf/db/locks/hidpi
/org/gnome/mutter/experimental-features
運行dconf update
並重啟系統。這將永久鎖定選項。
Xorg
您可以同時使用 scaling-factor
和 xrandr 來實現任意的非整數倍縮放。這可以使 TTF 字體被正確縮放,防止出現單獨使用 xrandr
時出現的模糊現象。您可以使用 gsettings
來指定放大係數,並用 xrandr 指定縮小係數。
首先使將縮放設為「UI看起來太大」的最小值。通常 2 已經足夠大,如果不夠大就繼續嘗試 3 以及更大的數。之後使用 xrandr 設置縮小係數。首先獲取相關的輸出名稱,下面的例子將使用 eDP1
。先試著將縮小係數設為1.25,如果 UI 看起來仍然太大,則增大縮放係數。反之則縮小縮放係數。
$ xrandr --output eDP1 --scale 1.25x1.25
--panning
。參閱#Side display。可考慮使用autorandr包讓設置在重啟時保持不變。參考這個網頁獲取更多信息。
在GNOME設置守護進程中的xsettings插件中,DPI設置是硬編碼的。這將忽略Xorg的設置。這裡有一篇重編譯 Gnome Settings Daemon[失效連結 2022-09-18 ⓘ]的博客文章。在文檔中還介紹了另一種方法來設置 xsettings 的DPI:
你可以使用dconf編輯器轉到這個鍵值:
/org/gnome/settings-daemon/plugins/xsettings/overrides
加入這個條目:
'Xft/DPI': <153600>
來自 README.xsettings
注意必須使用這種方式指定(使用<>)。
上述DPI數值的單位是1024分之一英寸。
字體縮放
可以另外設置字體縮放。在 Gnome Tweak 中的字體 > 縮放,或者也可使用 gsettings。字體縮放倍率不需要是整數。
$ gsettings set org.gnome.desktop.interface text-scaling-factor 1.5
Xorg 下的 GTK+ 和 Gnome 外殼元素
在老版本的 Gnome 中(3.35 以前),Gnome 外殼 UI 元素中的字體縮放可能需要以單獨編輯界面 CSS 文件的方式單獨設置。文件是 /usr/share/themes/你的主題/gnome-shell/gnome-shell.css
。單獨設置其中所有的」font-size「屬性,使其與縮放後的 UI 大小一致。設置完後,切換到另一個主題,再切換回來。
如果需要更改窗口標題欄的字體大小,可以使用 dconf 編輯器。(org > gnome > desktop > wm > preferences :: titlebar-font
)這同時需要關閉title-bar-uses-system-fonts
選項。
或者也可使用 gsettings:
$ gsettings set org.gnome.desktop.wm.preferences titlebar-font 'Cantarell Bold 22' ## 具体内容依需求更改 $ gsettings set org.gnome.desktop.wm.preferences titlebar-uses-system-font false
KDE
您可以使用KDE的設置來微調字體、圖標和部件縮放,這些改動會同時影響 Qt 和 GTK+ 程序。
要調整整體縮放:
- 系統設置→顯卡與顯示器→顯示器配置→縮放率
- 將滑塊調整至適合的位置
- 重新啟動以使設置生效
要僅調整字體縮放:
- 系統設置→外觀→字體
- 勾選「固定字體DPI」並調整DPI的值。調整之後重新啟動應用程式即可生效。要在整個桌面上生效,您需要註銷之後重新登錄。
要僅調整圖標縮放:
- 系統設置→外觀→圖標→配置圖標大小
- 為每一項選擇合適的圖標大小,更改將會立即生效。
非整數倍縮放下的Bug
當您使用非整數倍的縮放比例時,這可能導致一些 Qt 應用程式的字體渲染出現問題(例如 okular)。
有一個辦法可以繞過這個問題:
- 將縮放比例設為1
- 用上面的方法調整字體和圖標縮放(這會影響所有的應用程式,且不會導致字體問題)
- 重新啟動KDE
- 如果需要縮放 GTK 程序,設置環境變量
GDK_SCALE/GDK_DPI_SCALE
(參見下文)。
托盤圖標不縮放
在 Xorg 環境下,托盤圖標不會跟隨整體縮放。Plasma 默認會忽略 Qt 設置。要讓 Plasma 使用 Qt 設置,要麼使用 Wayland,要麼將 PLASMA_USE_QT_SCALING
設為1;但對於多台不同 DPI 顯示器混用的環境,這會讓 UI 顯示變得更糟糕。也可以將底欄高度設置為原來的兩倍以縮放底欄和底欄內的應用程式圖標,此時右鍵菜單內的圖標等其他元素將不會縮放。
Xfce
打開設置管理器→外觀→字體,修改 DPI 的值。在 HiDPI 顯示器上,通常可以設為180或者192。要獲得更精確的數字,可以使用xdpyinfo | grep resolution
,使用輸出DPI兩倍的值。
要增大托盤圖標,右鍵點擊托盤的空白處,選擇屬性,將最大圖標大小設置為32,48或者64。
Cinnamon
應當開箱即用。
Enlightenment
對於E18,首先打開設置面板,在外觀→縮放中,你可以調整縮放倍數。在MBPr 15 上,你可以選擇1.2。
X Server
某些程序使用 X Server 所提供的 DPI 值。比如 i3 (來源) 和 Chromium(來源)。
要驗證 X Server 是否正確檢測到了您的顯示器的DPI,使用 xorg-xdpyinfo包 中的 xdpyinfo
工具。
$ xdpyinfo | grep -B 2 resolution screen #0: dimensions: 3200x1800 pixels (423x238 millimeters) resolution: 192x192 dots per inch
這個例子中 X Server 檢測到的屏幕尺寸並不準確(423mm x 328mm,實際上Dell XPS 9530的屏幕尺寸是346mm x 194mm),但報告的 DPI 是96的整數倍。通常這往往比正確的DPI更好,可以保證字體渲染正確。
如果 xdpyinfo
顯示的DPI不正確,參閱Xorg#Display size and DPI了解如何修復。
X Resources
如果你沒有使用一個桌面環境,比如 KDE,Xfce,或是沒有一個為您操作 Xorg 設置的程序,你可以通過在 Xresources 中的 Xft.dpi
變量手動修改DPI設置。
~/.Xresources
Xft.dpi: 180 Xft.autohint: 0 Xft.lcdfilter: lcddefault Xft.hintstyle: hintfull Xft.hinting: 1 Xft.antialias: 1 Xft.rgba: rgb
確保設置在X啟動時已經被載入。例如在~/.xinitrc
中使用xrdb -merge ~/.Xresources
。有關詳細信息,請參閱 Xresources。
通常這會讓大多數地方的字體大小正確,但這並不會影響圖標大小。
在設置Xft.dpi
的同時設置 GUI toolkit 縮放(例如GDK_SCALE
)可能導致某些程序界面元素過大(例如firefox)。
GUI toolkits
Qt 5
自從 Qt 5.6 開始,Qt 5 應用程式可以遵守屏幕DPI。設置環境變量QT_AUTO_SCREEN_SCALE_FACTOR
以啟用這項功能。
export QT_AUTO_SCREEN_SCALE_FACTOR=1
如果自動檢測的 DPI 並不理想,你也可以按屏幕(QT_SCREEN_SCALE_FACTORS
)或全局(QT_SCALE_FACTOR
)手動設置縮放,有關詳細信息,請參閱 Qt 博客文章。
- 如果您手動設置了縮放,則需要設置
QT_AUTO_SCREEN_SCALE_FACTOR=0
。否則某些明確啟用 HiDPI 支持的程序會被縮放兩次。 -
QT_SCALE_FACTOR
縮放字體,但QT_SCREEN_SCALE_FACTORS
並不會。 - 如果您還在xrdb中手動設置過DPI以支持其他toolkits,同時使用
QT_SCALE_FACTORS
會使字體過大。 - 如果您有多個不同DPI的屏幕,即 #Side display,您可能需要設置
QT_SCREEN_SCALE_FACTORS="2;2"
。
還可以採取其他方式,例如固定DPI:
$ QT_FONT_DPI=96 clementine
一個啟動WPS表格的實例:
$ QT_SCREEN_SCALE_FACTORS=1 QT_FONT_DPI=192 QT_IM_MODULE=fcitx /usr/bin/et %F
GDK 3 (GTK+ 3)
要將UI縮放為兩倍大小:
export GDK_SCALE=2
並同時不影響字體:
export GDK_DPI_SCALE=0.5
GTK+ 2
GTK+ 2本身並不支持縮放UI。但您可以使用 themix-full-gitAUR 創建預縮放過的主題。
Elementary (EFL)
要將縮放倍數設為1.5:
export ELM_SCALE=1.5
更多信息請查看 https://phab.enlightenment.org/w/elementary/
引導程序
GRUB
降低幀緩衝解析度
參見GRUB/Tips and tricks#Setting the framebuffer resolution。
改變GRUB字體大小
在/usr/share/fonts/
中找一個你喜歡的字體。
使用GRUB工具轉換:
# grub-mkfont -s 30 -o /boot/grubfont.pf2 /usr/share/fonts/FontFamily/FontName.ttf
-s 30
是字體大小。編輯/etc/default/grub
來設置字體。參見GRUB/Tips and tricks#Background image and bitmap fonts:
GRUB_FONT="/boot/grubfont.pf2"
使用grub-mkconfig -o /boot/grub/grub.cfg
重新生成 GRUB 配置。
應用程式
瀏覽器
Firefox
Firefox 應當使用 #GDK 3 (GTK+ 3) 的設置。但是,建議的 GDK_SCALE
可能會使 Firefox 界面的縮放並不一致,並且不能使用小數.你可以使用GDK_DPI_SCALE
來代替。
要覆蓋這些設置,請打開 Firefox 的高級選項頁面(about:config
)並將 layout.css.devPixelsPerPx
設置為 2
(或是其它需要的數值),但這個選項也可能導致 Firefox 界面的縮放不一致。如果 Firefox 沒有縮放字體,您可能需要創建 userChrome.css
並添加適當的樣式。有關 userChrome.css
,請訪問mozillaZine。
~/.mozilla/firefox/<profile>/chrome/userChrome.css
@namespace url("https://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"); /* #tabbrowser-tabs, #navigator-toolbox, menuitem, menu, ... */ * { font-size: 15px !important; } /* exception for badge on adblocker */ .toolbarbutton-badge { font-size: 8px !important; }
如果你將 HiDPI 顯示器與另一台顯示器一起使用,你可以使用 AutoHiDPI 來自動調整。另外,從 Firefox 49 以來,它會自動根據您的屏幕解析度調整縮放,從而更容易處理多個屏幕的情況。
Chromium / Google Chrome
Chromium 應當使用#GDK 3 (GTK+ 3)設置。
要覆蓋這一選項,請使用--force-device-scale-factor
flags。這將縮放所有內容。例如:chromium --force-device-scale-factor=2
。
當此選項設為1時將會採用正常縮放,此選項也可以使用小數。要永久應用此更改,對於Chromium,可以將其添加到~/.config/chromium-flags.conf
:
~/.config/chromium-flags.conf
--force-device-scale-factor=2
對於Chrome,使用 ~/.config/chrome-flags.conf
。
如果你將 HiDPI 顯示器與另一台顯示器一起使用,你可以使用 reszoom 擴展。這個擴展將會根據所在屏幕自動調整縮放。
Opera
Opera 應當使用 #GDK 3 (GTK+ 3) 設置。
要覆蓋這一選項,請使用 --alt-high-dpi-setting=X
命令行選項。其中 X 是所需的 DPI。例如,使用 --alt-high-dpi-setting=144
Opera 將認為 DPI 是 144。在較新版本中,Opera 將使用字體DPI(在 KDE 中可以強制設置字體 DPI)。
Thunderbird
參見#Firefox。要訪問 about:config
,打開首選項→高級→配置編輯器。
Wine程序
運行
$ winecfg
並且更改顯示選項卡中的 DPI。這僅影響字體大小。
Skype
Skype for Linux (skypeforlinux-stable-binAUR) 使用 #GDK 3 (GTK+ 3)。
Spotify
您可以簡單的使用 Ctrl++
和 Ctrl+-
來調整縮放。使用 Ctrl+0
來恢復默認縮放。縮放設置保存在~/.config/spotify/Users/YOUR-SPOTIFY-USER-NAME/prefs
,您可能需要自行創建該設置文件:
~/.config/spotify/Users/YOUR-SPOTIFY-USER-NAME/prefs
app.browser.zoom-level=100
Spotify 也可以使用自定義的縮放啟動。這個係數和~/.config/spotify/Users/YOUR-SPOTIFY-USER-NAME/prefs
中的係數相乘的積是實際的縮放倍數。
$ spotify --force-device-scale-factor=1.5
Zathura 文檔查看器
文檔縮放應當開箱即用。
UI縮放可以在配置文件中設置 (注意 "font" 是一個girara option):
set font "monospace normal 20"
Sublime Text 4
Sublime Text 4 完整支持顯示縮放。在首選項→設置中添加 "ui_scale": 2.0
。
IntelliJ IDEA
IntelliJ IDEA 15 及以上應有對 HiDPI 的支持,[1] 如果這不能工作最簡便的解決辦法可能是覆蓋默認的字體設置:
- File -> Settings -> Behaviour & Appearance -> Appearance
14版本中將 -Dhidpi=true
添加到 $HOME/.IdeaC14/
或 /usr/share/intelligj-idea-ultimate-edition/bin/
的方法應該不再需要了。
NetBeans
NetBeans 可以在啟動時用--fontsize
選項設置字體大小。要要使此設置永久生效,編輯/usr/share/netbeans/etc/netbeans.conf
,添加--fontsize
到netbeans_default_options
。[2]
編輯器字體大小可以在 Tools → Option → Fonts & Color 中設置。
輸出窗口的字體大小可以在Tools → Options → Miscelaneous → Output中控制。
Gimp 2.8
使用 HiDPI主題,或是更改現有主題的 gtkrc
。(Change all occurrences of the size button
to dialog
,例如GimpToolPalette::tool-icon-size
。)
另外也有 gimp-hidpi。
Steam
官方 HiDPI支持
- 從2018年1月25日開始,測試版本已經支持HiDPI並能自動啟用。
- Steam →設置→界面→勾選 "按照顯示器大小放大圖標和文本(需要重啟)"
- 如果自動檢測並不能正確工作,使用
GDK_SCALE=2
來指定縮放級別。 - 如果以上不工作,使用
steam -forcedesktopscaling 2
或者設置STEAM_FORCE_DESKTOPUI_SCALING=2.0
。[3]在2023年6月UI大改動之後,該參數還支持分數縮放級別,例如1.25
。
非官方
使用 HiDPI-Steam-Skin 可以增大字體大小,雖然並不完美,但至少能用。
skins_readme.txt
的文件。MetroSkin Unofficial Patch 也可以使用。
Java 程序
可以通過設置 sun.java2d.uiScale
來縮放使用 AWT/Swing 框架的 Java 程序。例如:
java -Dsun.java2d.uiScale=2 -jar some_application.jar
從 Java 9 開始,GDK_SCALE
也可以縮放 Swing 程序。
Mono 程序
MATLAB
MATLAB 的近期版本(R2017b)可以設置縮放:
>> s = settings;s.matlab.desktop.DisplayScaleFactor >> s.matlab.desktop.DisplayScaleFactor.PersonalValue = 2
此設置將在重啟 Matlab 後生效。
VirtualBox
VirtualBox 按照系統的縮放級別縮放虛擬監視器,從而降低虛擬機的最大解析度(參見[5])。
可以單獨縮小 VirtualBox 來繞過這個問題:
$ QT_SCALE_FACTOR=0.5 VirtualBox --startvm vm-name
Zoom
可以指定QT_SCALE_FACTOR
來啟動 Zoom:
$ QT_SCALE_FACTOR=2 zoom
不支持的程序
run_scaled-gitAUR 可以縮放應用程式(內部使用xpra包)。
另一個辦法是使每個程序在各自的 VNC 桌面上運行。要縮放 VNC 查看器,使用vncdesk-gitAUR。你可以為每個程序設置單獨的桌面,使用簡單的命令啟動客戶端和服務端,例如vncdesk 2
。
x11vnc 有一個實驗性的選項 -appshare
,可以為每個窗口單獨打開一個 VNC 查看器。也許我們可以在上面做些文章。
多顯示器
HIDPI 將會對整個桌面生效,所以如果你同時使用普通顯示器,那麼在普通顯示器上顯示元素會變得很大。但是 Wayland 已經支持為每個顯示器設置單獨的縮放。
側邊顯示器
有一個解決方案是使用 xrandr 提供的縮放選項。比如你希望把一個非 HIDPI 的顯示器(假設連接在 DP1)放置在內部 HIDPI 顯示器(假設連接在 eDP 1)的右側,你可以運行如下命令:
xrandr --output eDP-1 --auto --output DP-1 --auto --scale 2x2 --right-of eDP-1
當外部的顯示器拓展到內部顯示器上方的時候,你可能會看到外部顯示器顯示了一些內部顯示器的內容,這種情況下你可以手動指定顯示器的位置或者使用這個腳本.
你可能會遇到滑鼠沒辦法移動到整個屏幕範圍的問題,這是一個已知的問題 ,你可以通過應用 xserver-org
的補丁來解決(或者嘗試使用平移選項 panning
,但這可能會引發其他問題)。
這是一個 4K 筆記本電腦外接 1920x1080 顯示器在右側時使用平移語法的示例:
xrandr --output eDP-1 --auto --output HDMI-1 --auto --panning 3840x2160+3840+0 --scale 2x2 --right-of eDP-1
通常來說,如果你的HIDPI顯示器解析度為 AxB 像素,普通顯示器解析度為 CxD,並且你將其縮放比例設置為 ExF,那麼將普通顯示器放置在HIDPIP顯示器右側的命令行格式如下:
xrandr --output eDP-1 --auto --output HDMI-1 --auto --panning [C*E]x[D*F]+[A]+0 --scale [E]x[F] --right-of eDP-1
如果平移(panning)沒有辦法解決的話,那麼手動設置顯示器位置並調整主要顯示屏幕可能是更好的選擇。
以下是一個示例語法:一台解析度為 2560x1440、DPI 為 210 的 WQHD 筆記本內置顯示器(eDP1
),使用原生解析度放置在一台解析度為 1920x1080、DPI 為 96 的 FHD 外接顯示器(HDMI
)下方,並將外接顯示器縮放以匹配全局 DPI 設置。
xrandr --output eDP-1 --auto --pos 0x1458 --output HDMI-1 --scale 1.35x1.35 --auto --pos 0x0 --fb 2592x2898
總屏幕大小(--fb
)和位置(--pos
)需要根據縮放倍數進行計算。
在本例中:
- 筆記本顯示器(
eDP1
)沒有縮放,使用原生解析度,因此其尺寸為 2560x1440。 - 外接顯示器(
HDMI
)被縮放,需要將其視為更大的屏幕,其邏輯尺寸為(1920*1.35)x(1080*1.35)
。-
eDP1
的 Y 軸位置為1080*1.35=1458
。 - 總屏幕大小:
- X 方向:取
eDP1
和HDMI
中較大的寬度,即1920*1.35=2592
。 - Y 方向:兩者高度之和,即
1440 + (1080*1.35)=2898
。
- X 方向:取
-
通用命令:
假設:
- 高解析度顯示器(HiDPI)解析度為 AxB 像素。
- 普通顯示器解析度為 CxD 像素。
- 普通顯示器的縮放比例為 ExF。
- 高解析度顯示器放置在普通顯示器下方。
命令如下:
xrandr --output eDP-1 --auto --pos 0x(DxF) --output HDMI-1 --auto --scale [E]x[F] --pos 0x0 --fb [greater between A and (C*E)]x[B+(D*F)]
You may adjust the "sharpness" parameter on your monitor settings to adjust the blur level introduced with scaling.
--scale 2x2
does not work on some Nvidia cards. No solution is currently available. [6] A potential workaround exists with configuring ForceFullCompositionPipeline=On
on the CurrentMetaMode
via nvidia-settings
. For more info see [7].多外部監視器
如果你有多於個低於內置的 HiDPI 顯示器 DPI 的顯示器,那麼可能會碰到一些問題。這種情況下您可以想要縮小 HiDPI 顯示器的內容,例如:
xrandr --output eDP1 --scale 0.5x0.5 --output DP2 --right-of eDP1 --output HDMI1 --right-of DP2
另外,當您縮小內置 HIDPI 顯示器中的內容時,內置顯示器的字體可能會變得有些模糊。但這與擴大外置顯示器內容時帶來的模糊並不相同。您可以對比之後選擇自己想要的方案。
鏡像
如果你只想使用鏡像的話,可以按照如下操作:
A×B是你 HiDPI 顯示器的原生解析度,CxD 是你的另一個顯示器的原生解析度。
xrandr --output HDMI --scale [A/C]x[B/D]
一個 QHD 的例子(3200/1920 = 1.66 and 1800/1200 = 1.5):
xrandr --output HDMI --scale 1.66x1.5
UHD和1080p的例子 (3840/1920=2 2160/1080=2):
xrandr --output HDMI --scale 2x2
您可以調整顯示器上的清晰度選項以減少模糊感。
Linux 控制台
默認的 Linux 控制台在 HiDPI 顯示器上太小了。kbd包中最大的字體是latarcyrheb-sun32
,其他軟體包中包含一些更大的字體,例如terminus-font包中的ter-132n
和ter-132b
(粗體)。參閱Linux console#Fonts獲取配置詳情。
在改變字體之後,當您切換到其他控制台時,屏幕上的內容可能無法讀取。要修復這一問題,你可以設置force specific mode,例如video=2560x1600@60
(設為您顯示器的原生解析度)並重新啟動。