HiDPI的社区Wiki与部分解决方案
HiDPI (簡體中文)
Jump to navigation Jump to search
Related articles
Font configuration
HiDPI (High Dots Per Inch) 顯示器,指的是在較小尺寸下卻擁有較高分辨率的顯示器。Apple 將其稱作“視網膜屏幕”,這項技術主要存在于高端筆記本電腦和顯示器中。
并非所有的軟件都在高分辨率屏幕下工作良好。此頁列出了一些常見的調整方法,讓您更好的使用 HiDPI 顯示器。
Contents
1 桌面環境
1.1 GNOME
1.1.1 非整數倍縮放
1.2 KDE
1.2.1 非整數倍縮放下的Bug
1.2.2 托盤圖標不縮放
1.3 Xfce
1.4 Cinnamon
1.5 Enlightenment
2 X Server
3 X Resources
4 GUI toolkits
4.1 Qt 5
4.2 GDK 3 (GTK+ 3)
4.3 GTK+ 2
4.4 Elementary (EFL)
5 引導程序
5.1 GRUB
5.1.1 降低幀緩沖分辨率
5.1.2 改變GRUB字體大小
6 應用程序
6.1 瀏覽器
6.1.1 Firefox
6.1.2 Chromium / Google Chrome
6.1.3 Opera
6.2 Thunderbird
6.3 Wine程序
6.4 Skype
6.5 Spotify
6.6 Zathura 文檔查看器
6.7 Sublime Text 3
6.8 IntelliJ IDEA
6.9 NetBeans
6.10 Gimp 2.8
6.11 Steam
6.11.1 官方 HiDPI支持
6.11.2 非官方
6.12 Java 程序
6.13 Mono 程序
6.14 MATLAB
6.15 VirtualBox
6.16 Zoom
6.17 不支持的程序
7 多顯示器
7.1 Side display
7.2 多外部監視器
7.3 鏡像
8 Linux 控制臺
9 另請參閱
桌面環境
GNOME
可以在設置 > 設備 > 顯示 (Settings > Devices > Displays) 中開啟 HiDPI 支持,也可以使用 gsettings 進行設置:
$ gsettings set org.gnome.desktop.interface scaling-factor 2
注意: scaling-factor僅能設置為整數。1 = 100%,2 = 200%……等等
非整數倍縮放
在某些設備(例如小平板電腦)上使用 scaling-factor設置整數倍縮放的效果可能并不理想。
wayland
啟用實驗性的非整數倍縮放功能:
$ gsettings set org.gnome.mutter experimental-features "['scale-monitor-framebuffer']"
之后再次打開 設置 > 設備 > 顯示。
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。
The factual accuracy of this article or section is disputed.
Reason: The following was initially added under #X Resources. Clarify how it integrates with the info there or that above for GNOME. (Discuss in Talk:HiDPI (簡體中文)#GNOME ignores X settings)
在GNOME設置守護進程中的xsettings插件中,DPI設置是硬編碼的。這將忽略Xorg的設置。這里有一篇重編譯 Gnome Settings Daemon的博客文章。在文檔中還介紹了另一種方法來設置 xsettings 的DPI:
你可以使用dconf編輯器轉到這個鍵值:
/org/gnome/settings-daemon/plugins/xsettings/overrides
加入這個條目:
'Xft/DPI': <153600>
來自 README.xsettings
注意必須使用這種方式指定(使用<>)。
另外,上面的例子中一英寸以1024ths定義。(Note also that DPI in the above example is expressed in 1024ths of an inch.)
KDE
您可以使用KDE的設置來微調字體、圖標和部件縮放,這些改動會同時影響 Qt 和 GTK+ 程序。
要調整整體縮放:
系統設置→顯示和監控→顯示配置→縮放顯示
將滑塊調整至適合的位置
重新啟動以使設置生效
要僅調整字體縮放:
系統設置→字體
勾選“固定字體DPI”并調整DPI的值。調整之后重新啟動應用程序即可生效。要在整個桌面上生效,您需要注銷之后重新登錄。
要僅調整圖標縮放:
系統設置→圖標→配置圖標大小
為每一項選擇合適的圖標大小,更改將會立即生效。
非整數倍縮放下的Bug
當您使用非整數倍的縮放比例時,這可能導致一些 Qt 應用程序的字體渲染出現問題(例如 okular)。
有一個辦法可以繞過這個問題:
將縮放比例設為1
用上面的方法調整字體和圖標縮放(這會影響所有的應用程序,且不會導致字體問題)
重新啟動KDE
如果需要縮放 GTK 程序,設置環境變量GDK_SCALE/GDK_DPI_SCALE(參見下文)。
托盤圖標不縮放
托盤圖標不會隨著整體而縮放。Plasma 默認會忽略 Qt 設置。要讓 Plasma 使用 Qt 設置,將PLASMA_USE_QT_SCALING 設為1.
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(來源)。
The factual accuracy of this article or section is disputed.
Reason: Xorg always sets dpi to 96. See this, this and finally this. (Discuss in Talk:HiDPI (簡體中文)#)
要驗證 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。但您可以使用 oomox-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("http://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;
}
警告: 下面的擴展不支持 Firefox Quantum (57版本及以上)。
如果你將 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 3
Sublime Text 3 完整支持顯示縮放。在 設置 → 用戶設置 中添加 "dpi_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來指定縮放級別。
非官方
使用 HiDPI-Steam-Skin 可以增大字體大小,雖然并不完美,但至少能用。
注意: 皮膚的 README 列出了皮膚應當放置的位置。正確的位置下面應該有一個叫 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 程序
根據 [3],Mono 程序應像 GTK3 程序一樣縮放。
MATLAB
MATLAB 的近期版本(R2017b)可以設置縮放:
>> s = settings;s.matlab.desktop.DisplayScaleFactor >> s.matlab.desktop.DisplayScaleFactor.PersonalValue = 2
此設置將在重啟 Matlab 后生效。
VirtualBox
注意: 僅適用于啟用了縮放的 KDE。
VirtualBox 按照系統的縮放級別縮放虛擬監視器,從而降低虛擬機的最大分辨率(參見[4])。
可以單獨縮小 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
This article or section is out of date.
Reason: The bug with the mouse unable to reach the whole screen should be fixed in xorg 1.20. (Discuss in Talk:HiDPI (簡體中文)#)
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.
Note: Above solution with --scale 2x2 does not work on some Nvidia cards. No solution is currently available. [5] A potential workaround exists with configuring ForceFullCompositionPipeline=On on the CurrentMetaMode via nvidia-settings. For more info see [6].
多外部監視器
如果你有多于個低于內置的 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(設為您顯示器的原生分辨率)并重新啟動。
另請參閱
Ultra HD 4K Linux Graphics Card Testing (Nov 2013)
Understanding pixel density
Category:
Graphics (簡體中文)
總結
以上是生活随笔為你收集整理的HiDPI的社区Wiki与部分解决方案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 体验neovim并安装插件
- 下一篇: 完美.PCK文件不完全详解