GKLBB

当你经历了暴风雨,你也就成为了暴风雨

导航

KAL1 LINUX 官方文档之通用---修复DPI(每英寸点数)/大字体

 

启动Kali Linux后,某些事情可能看起来比预期的要大。这可能是因为DPI每英寸点数)/ PPI每英寸像素数)不正确。如果看起来比预期的要小,您可能希望查看我们的HiDPI指南

这可能是由于各种原因而发生的,例如导致问题的图形卡驱动程序和/或显示器配置文件。

本指南将涵盖单屏设置。我们没有足够的硬件来测试多屏输出以编写指南。所以我们正在寻找社区的贡献来帮助我们。如果你有硬件和专业知识,请编辑本指南。


问题

打开某些应用程序后,字体可能会比预期的要大,如下面的示例所示。在这里,您可以看到两种不同的终端软件,左侧的一个使用QtQTerminal),右侧的一个使用GTKxfce4-terminal)。

Qt太大,需要更改。首先,我们需要找到,将其更改为什么值,然后我们需要应用更改。

查找问题

我们首先使用xrdb,它在X服务器的数据库中查找(X是图形显示输出的主办),以查看那里的值:

kali@kali:~$ xrdb -q
*customization:	-color
Xft.antialias:	1
Xft.hinting:	1
Xft.hintstyle:	hintslight
Xft.rgba:	rgb
Xcursor.theme_core:	1
kali@kali:~$

没有预定义DPI的迹象。是时候进入下一个工具了。

使用xdpyinfo,我们可以查看有关X的显示信息,该信息当前正在使用(实时获取定义信息,例如启动,新屏幕附加等)

kali@kali:~$ xdpyinfo | grep 'dimensions\|resolution'
  dimensions:    1680x1050 pixels (160x90 millimeters)
  resolution:    267x296 dots per inch
kali@kali:~$

我们只返回一次值,这意味着只有一台显示器。很好!但不太好的是,物理屏幕的尺寸,160x90mm,被检测到。这可能开始解释为什么字体非常大(因为DPI很大)。我们还可以看到屏幕分辨率设置为1680×1050,DPI为~267。

接下来,我们可以使用xrandr来处理扩展名RandR (调整大小和旋转),以查看报告的内容是否匹配:

kali@kali:~$ xrandr -q | grep -iw 'screen\|connected'
Screen 0: minimum 8 x 8, current 1680 x 1050, maximum 32767 x 32767
HDMI-0 connected 1680x1050+0+0 (normal left inverted right x axis y axis) 160mm x 90mm
kali@kali:~$

再次,一个显示器。同样,它的分辨率与xdpyinfo告诉我们的相符我们可以看到它使用HDMI电缆,并且分辨率和尺寸相同。

查看X的日志,我们可以看到:

kali@kali:~$ grep DPI /var/log/Xorg.0.log
[     7.324] (--) NVIDIA(0): DPI set to (266, 296); computed from "UseEdidDpi" X config
kali@kali:~$

这非常接近xrandr报告的DPI值(但相差1)我们可以看到有问题的图形驱动器是NVIDIA,并且它试图从中获取DPI值EDID (GPU试图从显示器读取数据)

如果愿意,我们可以使用edid-decode查看EDID的值

kali@kali:~$ sudo apt install -y edid-decode
kali@kali:~$
kali@kali:~$ xrandr --props | edid-decode -c -s
EDID version: 1.3
...SNIP...
Maximum image size: 16 cm x 9 cm
...SNIP...
Warnings:

Block 0 (Base Block):
  Basic Display Parameters & Features: Dubious maximum image size (160x90 is smaller than 10x10 cm)

Failures:

All Blocks:
  One or more of the timings is out of range of the Monitor Ranges:
    Vertical Freq: 24 - 75 Hz (Monitor: 23 - 75 Hz)
    Horizontal Freq: 27.000 - 79.976 kHz (Monitor: 26.000 - 68.000 kHz)
    Maximum Clock: 148.500 MHz (Monitor: 150.000 MHz)

EDID conformity: FAIL
kali@kali:~$

 

因此,看来EDID中的值不正确,因此我们不应该监听监视器!我们将需要手动定义要使用的值。

最简单的方法是查看屏幕的品牌/型号(设备背面/下方是否贴有标签?)否则,我们可以使用老式的方法来测量卷尺。

为什么错了?

那么操作系统认为我们的屏幕尺寸是多少?

使用一些数学运算(1cmis 10mm25.4mmis 1 inch),我们可以将毫米(mm)转换为英寸(in):

请记住,输出为dimensions: 1680x1050 pixels (160x90 millimeters),因此我们将“ width”作为160“height²”作为90

kali@kali:~$ echo 'print(160/25.4)' | python3
6.299212598425197   # 6.3 in
kali@kali:~$
kali@kali:~$ echo 'print(90/25.4)' | python3
3.543307086614173   # 3.5 in
kali@kali:~$

现在,我们可以通过执行√(width² + height²) = diagonal以下操作找到对角线屏幕尺寸

kali@kali:~$ echo 'print( ( ((160/25.4) ** 2)+((90/25.4) ** 2) ) ** (0.5) )' | python3
7.227385728616465  # 7.2 in
kali@kali:~$

屏幕背面的标签显示其20英寸,但仅检测到7.2英寸

寻找正确值

使用公式√(width² + height²) / diagonal = DPI,我们得到:

请记住,输出为dimensions: 1680x1050 pixels (160x90 millimeters),所以我们将“ width”作为1680“ height”作为1050,将正确的对角线作为20

kali@kali:~$ # e.g. (((width ** 2)+(height² ** 2) ) ** (0.5) ) / diagonal )
kali@kali:~$
kali@kali:~$ echo 'print( (((1680 ** 2)+(1050 ** 2) ) ** (0.5) ) / 20 )' | python3
99.05680188659434  # 99 DPI
kali@kali:~$

因此,我们需要将DPI设置为99x99而不是267x296

修复

我们可以采取多种方法来解决此问题,每种方法各有利弊:

  • 编辑~/.Xresources (X配置推荐方法
  • 编辑~/.xsessionrc (X启动脚本)
  • NVIDIA驱动程序设置
  • Xfce GUI设置(桌面环境配置)

Xresources

我们可以配置X(每个用户)。在终端窗口中,运行以下命令:

kali@kali:~$ echo "Xft.dpi: 99" >> ~/.Xresources
kali@kali:~$
kali@kali:~$ cat ~/.Xresources
Xft.dpi: 99
kali@kali:~$
kali@kali:~$ xrdb -merge ~/.Xresources
kali@kali:~$

运行后xrdb -merge,不需要注销,因此下次下次打开有问题的程序进行备份时,字体现在应为“正常”。

xsessionrc

这是一个shell脚本,将在图形登录后自动执行。在终端窗口中,运行以下命令:

kali@kali:~$ echo "xrandr --dpi 99" >> ~/.xsessionrc
kali@kali:~$
kali@kali:~$ cat ~/.xsessionrc
xrandr --dpi 99
kali@kali:~$
kali@kali:~$ xfce4-session-logout --logout
kali@kali:~$

注销并再次登录后,下次打开有问题的程序进行备份时,该字体现在应为“正常”字体。

NVIDIA驱动程序设置

另一种方法是让NVIDIA驱动程序处理DPI。

如果没有用于X的配置文件,我们将生成一个配置文件然后将其移动:

kali@kali:~$ sudo apt install -y nvidia-xconfig
kali@kali:~$
kali@kali:~$ sudo nvidia-xconfig
kali@kali:~$
kali@kali:~$ sudo mv /etc/X11/xorg.conf /usr/share/X11/xorg.conf.d/20-nvidia.conf
kali@kali:~$

现在,我们可以编辑配置文件,以在该Section "Device"部分中包含以下两行

  • Option "UseEdidDpi" "False"
  • Option "DPI" "99 x 99"

    kali@kali:~$ sudo vim /usr/share/X11/xorg.conf.d/20-nvidia.conf
    kali@kali:~$
    kali@kali:~$ cat /usr/share/X11/xorg.conf.d/20-nvidia.conf
    ...SNIP...
    Section "Device"
    Identifier     "Device0"
    Driver         "nvidia"
    VendorName     "NVIDIA Corporation"
    Option         "UseEdidDpi" "False"
    Option         "DPI" "99 x 99"
    EndSection
    ...SNIP...
    kali@kali:~$
    kali@kali:~$ xfce4-session-logout --logout
    kali@kali:~$
    

注销并再次登录后,下次打开有问题的程序进行备份时,该字体现在应为“正常”字体。

Xfce设置

我们可以通过以下方式配置Xfce:

  • Kali->设置->外观->字体-> DPI
    • 启用: Custom DPI Settings
    • 值: 99

由于存在错误,您将需要切换“自定义DPI设置”或增加/减少该值,然后将其恢复为先前的值。

不需要注销,因此,下次您打开有问题的程序备份时,字体现在应为“正常”。


参考文献

有关其他阅读材料,您可能希望参考:

posted on 2020-08-30 21:20  GKLBB  阅读(631)  评论(0编辑  收藏  举报