HiDPI
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"
。
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 已經支持為每個顯示器設置單獨的縮放。
Side display[編輯 | 編輯原始碼]
One workaround is to use xrandr's scale option. To have a non-HiDPI monitor (on DP1) right of an internal HiDPI display (eDP1), one could run:
xrandr --output eDP-1 --auto --output DP-1 --auto --scale 2x2 --right-of eDP-1
When extending above the internal display, you may see part of the internal display on the external monitor. In that case, specify the position manually, e.g. using this script.
You may run into problems with your mouse not being able to reach the whole screen. That is a known bug with an xserver-org patch (or try the panning option, but that might cause other problems).
An example of the panning syntax for a 4k laptop with an external 1920x1080 monitor to the right:
xrandr --output eDP-1 --auto --output HDMI-1 --auto --panning 3840x2160+3840+0 --scale 2x2 --right-of eDP-1
Generically if your HiDPI monitor is AxB pixels and your regular monitor is CxD and you are scaling by [ExF], the commandline for right-of is:
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
If panning is not a solution for you it may be better to set position of monitors and fix manually the total display screen.
An example of the syntax for a 2560x1440 WQHD 210 DPI laptop monitor (eDP1) using native resolution placed below a 1920x1080 FHD 96 DPI external monitor (HDMI) scaled to match global DPI settings:
xrandr --output eDP-1 --auto --pos 0x1458 --output HDMI-1 --scale 1.35x1.35 --auto --pos 0x0 --fb 2592x2898
The total screen size (--fb) and positioning (--pos) are to be calculated taking into account the scaling factor.
In this case laptop monitor (eDP1) has no scaling and uses native mode for resolution so it will total 2560x1440, but external monitor (HDMI) is scaled and it has to be considered a larger screen so (1920*1.35)x(1080*1.35) from where the eDP1 Y position came 1080*1.35=1458 and the total screen size: since one on top of the other X=(greater between eDP1 and HDMI, so 1920*1.35=2592) and Y=(sum of the calculated heights of eDP1 and HDMI, so 1440+(1080*1.35)=2898).
Generically if your hidpi monitor is AxB pixels and your regular monitor is CxD and you are scaling by [ExF] and hidpi is placed below regular one, the commandline for right-of is:
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
(設為您顯示器的原生分辨率)並重新啟動。