mac外接显示屏开启HiDPI
分辨率与HiDPI
电脑显示器分辨率
16:9 显示器
- 1080p: 1920x1080 = 3 x 40 x (16:9)
- 2k: 2560x1440 = 4 x 40 x (16:9)
- 4k: 3840×2160 = 6 x 40 x (16:9) = 1080p 长宽均2倍
- 5k: 5120X2880 = 8 x 40 x (16:9) = 2k 长宽均2倍
HiDPI的原理
WxH HiDPI, 即将原本渲染到WxH屏的内容(图像/文字/图形), 现在直接渲染到2Wx2H分辨率, 再由实际屏(分辨率为W’xH’), 上/下采样到W’xH’来显示.
两种实用的特殊情况:
- 有下采样的: 若2W>=W’>W, 2H>=H’>H, 则在高分屏(W’xH’), 下采样显示两倍低分屏(2Wx2H)的内容, 内容大小与低分屏(WxH)等大, 但细节更多.
- 无下采样的: 若2W=W’, 2H=H’, 则将原本渲染低分屏(WxH)到1x1个像素内容, 现在直接渲染到2x2个像素, 高分屏(W’xH’)可以直接显示两倍低分屏(2Wx2H), 无需下采样环节, 故而这比前述情况HiDPI更清晰的.
注意:
- 如果不考虑点阵字体的渲染, 仅考虑矢量字体/图像/图形的渲染, 则不要求一定W和W’可约, H和H’可约, 或者H/H’=1/2, 任何 W’,W, H’,H的情形 (即便它们互质), 皆可在整个屏幕的范围内实现HiDPI. 即不是成倍缩放, 而是"无极缩放".
- 若W/W’!=H/H’, 可以通过屏幕上下/左右空出一些像素不使用, 来实现WxH HiDPI.
例:
-
无下采样的: 24寸4k屏 显示1080p :
- 若选择1920x1080 HiDPI模式, 则显示的内容和24寸1080p屏一样多, 但更细腻. 这是因为原本渲染到1080p屏的1x1个像素的内容, 现在直接渲染到4k屏2x2个像素, 故而细节更多, 例图如下
-
若选择1920x1080 非HiDPI模式, 则显示的内容和24寸1080p屏一样多, 但会很模糊. 这是因为, 1080p屏的1x1个像素的内容, 先渲染到1080p屏的1x1个像素, 再强行用4k屏2x2个像素去显示, 效果如下图左侧. (右侧是1920x1080 HiDPI模式)
-
有下采样的: 24寸2k屏 显示1080p:
- 选择1920x1080 HiDPI模式, 则显示的内容和24寸1080p屏一样多, 但更细腻. 这是因为原本渲染到1080p屏的1x1个像素的内容, 现在直接渲染到4k屏2x2个像素, 然后用2k屏强行显示(需要下采样), 故而细节比起1080p屏更多, 例图略.
- 选择1920x1080 非HiDPI模式, 则显示的内容和24寸1080p屏一样多, 但更模糊, 字体发虚. 这是因为1080p屏幕内的内容, 先渲染到1920x1080个像素, 再由显示器内插值放缩到2560x1440个像素, 用2k屏显示, 由于内插值故而模糊发虚.
显示器分辨率选择推荐
使用了retina屏的新款macbookpro (RMBP), 其屏幕单位面积的像素数目(PPI, Pixels Per Inch)足够高, 使得位于 笔记本屏幕距眼的距离 时, 视网膜无法分辨出单个像素, 即 $像素宽度/屏眼距离<人眼可分辨最小角度$, 故称视网膜屏.
外接显示器在采购时, 如需达到和retina屏相同的细腻观感, 则需要选择竟可能高PPI的显示器, 以下是最优的选择:
- 27寸外接屏: 5k屏
- 24寸外接屏: 4k屏
屏眼距离越远, 要达到视网膜屏, 所需的PPI越低. 例如30寸1080p的电视机, 离人足够远, 也能达到视网膜屏. (但电视机用于显示图像而非文字, 则不太讲究视网屏)
1 英寸 = 2.54 cm
pixel per inch: $PPI=\dfrac{\sqrt{高_{像素数}^2+宽_{像素数}^2}}{对角线长(inch)}$
自定义 pixel per radian: $ PPR:=\frac{像素数}{视角(弧度)}=PPI \times 视距(inch)=PPI \times \frac{视距(cm)}{2.54 cm/inch}$
人眼分辨率极限
最差θ=1.2255510^(-9)/(1.510^(-3))= 0.0004514rad
最好θ=1.2255510^(-9)/(810^(-3))= 0.0000846375rad
平均θ=1.2255510^(-9)/(5*10^(-3))= 0.00013542rad
对角线长 | 显示器实际分辨率 | 长宽(cm) | PPI | 适合视距(cm) | PPR |
---|---|---|---|---|---|
27寸 | 3840x2160 (4k) | 59.67x33.56 | 164 | 70 | 4497 |
75 | 4843 | ||||
80 | 5139 | ||||
24寸 | 3840x2160 (4k) | 52.68x29.63 | 184 | 60 | 4336 |
65 | 4698 | ||||
70 | 5059 | ||||
mbp 13.3寸 | 2560 x 1600 | 30.41x21.24 | 227 | 55 | 4915 |
50 | 4468 | ||||
45 | 4021 |
通用技巧
SIP
判断是否开启了SIP
终端执行
csrutil status
返回System Integrity Protection status: enabled.
则为开启了
返回System Integrity Protection status: disabled
则为关闭了
关闭SIP
重启电脑,并在开机声响起后按住command+R, 直到出现苹果logo, 进入recovery mode
开Terminal,在终端输入关闭SIP的命令行语句:csrutil disable
开启SIP
重启电脑,并在开机声响起后按住command+R, 直到出现苹果logo, 进入recovery mode
开Terminal,在终端输入关闭SIP的命令行语句:csrutil enable
系统的HiDPI选项
开启系统的HiDPI选项
sudo defaults write /Library/Preferences/com.apple.windowserver.plist DisplayResolutionEnabled -bool true
查看系统的HiDPI选项
defaults read /Library/Preferences/com.apple.windowserver.plist DisplayResolutionEnabled
返回的是 1
或 true
, 则开启了系统的HiDPI选项; 若返回0
或false
则为开启.
mac外接2k显示器开启HiDPI
mac内建想显示器会开HiDPI
mac 外接 4k 显示器, 会自动开HiDPI, 支持以下几种HiDPI, 以下观看距离是我自己摸索的:
- 1504x846 = 94 x (16:9)
- 1920x1080 = 120 x (16:9) : 系统默认, 1080p HiDPI, 1个像素的内容渲染到2x2个像素. 适合距离显示器80cm看24寸屏
- 2304x1296 = 144 x (16:9) : 当距离显示器比mbp屏幕远时, 适合距离显示器60cm看24寸屏
- 2560x1440 = 160 x (16:9) : 与mbp等字体大小, 适合距离显示器40cm看24寸屏
- 3008x1692 = 188 x (16:9) :
mac 外接 2k 显示器, 会若使用2560x1440分辨率, 字体过小; 若使用1920x1080分辨率, 则字体模糊, 这是因为, mac 没有给2k显示器开HiDPI. 需要自己开HiDPI, 开方法如下. 参考.
法一, 一键脚本 (推荐, 免费, 简洁)
一键开启hidpi的脚本:github项目
-
运行本脚本前无需暂时关闭SIP;本方法无需安装RDM(但兼容RDM)。
-
直接在终端下运行如下命令, 选择显示器, 选择是否开HiDPI,
# 进入root用户
sudo su
# 给root用户设置翻墙代理的端口
http_proxy=http://127.0.0.1:7890
https_proxy=http://127.0.0.1:7890
# 运行HiDPI设置脚本,需要从github下载代码,且需要sudo权限去完成HiDPI设置
bash -c "$(curl -fsSL https://raw.githubusercontent.com/xzhih/one-key-hidpi/master/hidpi.sh)"
bash -c "$(curl -fsSL https://raw.githubusercontent.com/xzhih/one-key-hidpi/master/hidpi.sh)"
_ _ _____ _____ _____ _____
| | | | |_ _| | __ \ | __ \ |_ _|
| |__| | | | | | | | | |__) | | |
| __ | | | | | | | | ___/ | |
| | | | _| |_ | |__| | | | _| |_
|_| |_| |_____| |_____/ |_| |_____|
============================================
显示器
--------------------------------------------------------
序号 | 供应商ID | 产品ID | 显示器名称
--------------------------------------------------------
1 | 0610 | a03d | Apple Display
2 | 699f | 2701 | Lc
--------------------------------------------------------
选择显示器: 2
您的显示器 供应商ID:产品ID: 699f:2701
(1) 开启HIDPI
(2) 开启HIDPI(同时注入EDID)
(3) 关闭HIDPI
输入你的选择 [1~3]: 1
-------------------------------------
|********** 选择显示器ICON ***********|
-------------------------------------
(1) iMac
(2) MacBook
(3) MacBook Pro
(4) LG 显示器
(5) Pro Display XDR
(6) 保持原样
输入你的选择 [1~6]: 3
------------------------------------------
|********** 选择分辨率配置 ***********|
------------------------------------------
(1) 1920x1080 显示屏
(2) 1920x1080 显示屏 (使用 1424x802 分辨率,修复睡眠唤醒后的屏幕缩小问题)
(3) 1920x1200 显示屏
(4) 2560x1440 显示屏
(5) 3000x2000 显示屏
(6) 手动输入分辨率
输入你的选择: 6
输入想要开启的 HIDPI 分辨率,用空格隔开,就像这样:1680x945 1600x900 1440x810
:2192x1233 1920x1080
开启成功,重启生效
首次重启开机logo会变得巨大,之后就不会了
在最后一步若选(6) 手动输入分辨率
,则可自行定制任何分辨率的HiDPI。
只需手动输入mxn
,无需手动输入mxn
和2mx2n
,这个脚本就会自动开启mxn的HiDPI版 和 2mx2n 的普通版(即强行缩放版, 会模糊),以实现mxn的HiDPI版。
因为这个是前者的2倍,只有添加这个,前者才能以HIDPI的形式被打开,原理应该是强制让系统运行在 2mx2x 的分辨率下再打开的 mxn 的HIDPI,通过全屏截图的分辨率来看猜想是正确的,所以对机器显卡性能有点要求
-
然后重启系统, 调整到你想要分辨率.
-
开SIP
重启电脑,并在开机声响起后按住command+R, 直到出现苹果logo, 进入recovery mode
开Terminal,在终端输入关闭SIP的命令行语句:
csrutil enable
说明:
-
恢复原始分辨率:
上述脚本安装的回复脚本,能选择一台显示屏恢复原始分辨率
$HOME/.hidpi-disable
-
这个脚本会自动开启系统的HiDPI选项,无需像下面这样手动开启
sudo defaults write /Library/Preferences/com.apple.windowserver.plist DisplayResolutionEnabled -bool true
若开启成功, 则
defaults read /Library/Preferences/com.apple.windowserver.plist DisplayResolutionEnabled
返回的是
1
或true
-
此脚本无需 RDM 软件也可切换分辨率,在系统显示器设置中设置即可。例如:
此脚本兼容RDM软件,也可以下载RDM安装之。当RDM运行时,系统显示器设置菜单则变为下图。需要在RDM的菜单里切换分辨率。
法二, 徒手配置显示器文件+RDM (不推荐, 当法一三无效时, 用此法总能生效)
- 暂时关闭SIP
重启电脑,并在开机声响起后按住command+R, 直到出现苹果logo, 进入recovery mode
开Terminal,在终端输入关闭SIP的命令行语句:csrutil disable
- 开启系统的HiDPI选项
sudo defaults write /Library/Preferences/com.apple.windowserver.plist DisplayResolutionEnabled -bool true
- 获得显示器信息
获得DisplayProductName: 关于本机
-显示器
: 会显示显示器的名称, 如”VX2478-4K-HD"
获得 DisplayProductID, DisplayVendorID
ioreg -lw0 | grep IODisplayPrefsKey | grep -v AppleBacklightDisplay | perl -pe 's/^.+\-([0-9a-f]+)\-([0-9a-f]+)"$/DisplayVendorID-\1\nDisplayProductID-\2/g'
-
安装配置文件
-
手动操作
-
点击下载
-
安装配置文件
# sudo mount -uw / # 克服系统目录'/'是只读的问题 # DIR=/System/Library/Displays/Contents/Resources/Overrides # OS X 10.11及以上 DIR=/Library/Displays/Contents/Resources/Overrides # OS X 10.10及以下 # DIR=/Library/Displays/Overrides Vendor_ID=<16进制-vendor-id> Product_ID=<16进制-product-id> CONF_PATH=${DIR}/DisplayVendorID-${Vendor_ID}/DisplayProductID-${Product_ID} sudo mkdir -p $( dirname ${CONF_PATH} ) sudo cp ~/Downloads/DisplayProductID-${Product_ID}.plist ${CONF_PATH}
注意要cp完的文件是没有
.plist
扩展名的
-
-
等效的脚本操作,在我本地电脑上将下述命令alias为
hidpi
命令了sudo bash /Users/mac/macENV/hidpi/hidpi.sh
-
-
下载RDM, 安装之.
-
重启系统, 打开RDM, 24寸的2k显示器选择
1920x1080 ⚡️
-
开SIP
重启电脑,并在开机声响起后按住command+R, 直到出现苹果logo, 进入recovery mode
开Terminal,在终端输入关闭SIP的命令行语句:
csrutil enable
法三, **SwitchResX **(也推荐, 功能强大)
-
暂时关闭SIP
重启电脑,并在开机声响起后按住command+R, 直到出现苹果logo, 进入recovery mode
开Terminal,在终端输入关闭SIP的命令行语句:
csrutil disable
-
开启系统的HiDPI选项
sudo defaults write /Library/Preferences/com.apple.windowserver.plist DisplayResolutionEnabled -bool true
- 支持自定义任何分辨率: 添加 2mx2n, 会开启mxn的HiDPI版, 和2mx2n 的普通版(即强行缩放版, 会模糊).
然后会显示新添加的分辨率是 not saved
然后cmd+w
退出软件, 会弹出提示框, 选save
-
而后, 新加的分辨率的状态就从”not saved”变成了”needs to reboot”.
-
此时重启电脑后, 则添加了原来的2mx2n普通分辨率, 和mxn HiDPI分辨率
-
重开SIP
重启电脑,并在开机声响起后按住command+R, 直到出现苹果logo, 进入recovery mode
开Terminal,在终端输入关闭SIP的命令行语句:
csrutil enable