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个像素, 故而细节更多, 例图如下

    img

    • 若选择1920x1080 非HiDPI模式, 则显示的内容和24寸1080p屏一样多, 但会很模糊. 这是因为, 1080p屏的1x1个像素的内容, 先渲染到1080p屏的1x1个像素, 再强行用4k屏2x2个像素去显示, 效果如下图左侧. (右侧是1920x1080 HiDPI模式)

      img

  • 有下采样的: 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)足够高, 使得位于 笔记本屏幕距眼的距离 时, 视网膜无法分辨出单个像素, 即 $像素宽度/屏眼距离<人眼可分辨最小角度$, 故称视网膜屏.

image-20201107204216961

外接显示器在采购时, 如需达到和retina屏相同的细腻观感, 则需要选择竟可能高PPI的显示器, 以下是最优的选择:

  • 27寸外接屏: 5k屏
  • 24寸外接屏: 4k屏
image-20201107204232666

屏眼距离越远, 要达到视网膜屏, 所需的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.22
55510^(-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

返回的是 1true, 则开启了系统的HiDPI选项; 若返回0false则为开启.

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) :
image-20201107235631208

mac 外接 2k 显示器, 会若使用2560x1440分辨率, 字体过小; 若使用1920x1080分辨率, 则字体模糊, 这是因为, mac 没有给2k显示器开HiDPI. 需要自己开HiDPI, 开方法如下. 参考.

法一, 一键脚本+RDM (推荐, 免费, 简洁)

一键开启hidpi的脚本:github项目

  • 暂时关闭SIP

    重启电脑,并在开机声响起后按住command+R, 直到出现苹果logo, 进入recovery mode

    开Terminal,在终端输入关闭SIP的命令行语句:csrutil disable

  • 运行如下命令, 选择显示器, 选择是否开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,无需手动输入mxn2mx2n,这个脚本就会自动开启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

    返回的是 1true

  • 此脚本无需 RDM 软件也可切换分辨率,在系统显示器设置中设置即可。例如:

    iShot_2024-01-08_19.07.12

    此脚本兼容RDM软件,也可以下载RDM安装之。当RDM运行时,系统显示器设置菜单则变为下图。需要在RDM的菜单里切换分辨率。

    iShot_2024-01-08_19.07.12

    image-20240108191227568

法二, 徒手配置显示器文件+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"

image-20201107174828256

获得 DisplayProductID, DisplayVendorID

ioreg -lw0 | grep IODisplayPrefsKey | grep -v AppleBacklightDisplay | perl -pe 's/^.+\-([0-9a-f]+)\-([0-9a-f]+)"$/DisplayVendorID-\1\nDisplayProductID-\2/g'
  • 安装配置文件

    • 手动操作

      • 访问:配置文件生成网站 填入: DisplayProductName, DisplayProductID, DisplayVendorID。其中DisplayProductID, DisplayVendorID需以16进制填入。

      • 添加你需要的分别率 参考

        添加 2mx2n (勾选HiDPI) 和 mxn (勾选HiDPI), 以开启mxn的HiDPI版

        原因:

        因为这个是前者的2倍,只有添加这个,前者才能以HIDPI的形式被打开,原理应该是强制让系统运行在 2nx2m 的分辨率下再打开的 mxn 的HIDPI,通过全屏截图的分辨率来看猜想是正确的,所以对机器显卡性能有点要求

    • 点击下载

      • 安装配置文件

        # 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 的普通版(即强行缩放版, 会模糊).

image-20201110061629462

然后会显示新添加的分辨率是 not saved

image-20201110061457868

然后cmd+w退出软件, 会弹出提示框, 选save

image-20201110061347850

  • 而后, 新加的分辨率的状态就从”not saved”变成了”needs to reboot”.

  • 此时重启电脑后, 则添加了原来的2mx2n普通分辨率, 和mxn HiDPI分辨率

    image-20201110063029206

  • 重开SIP

    重启电脑,并在开机声响起后按住command+R, 直到出现苹果logo, 进入recovery mode

    开Terminal,在终端输入关闭SIP的命令行语句:csrutil enable