在不同的显示器上设置不同的子像素渲染

在不同的显示器上设置不同的子像素渲染

我使用双显示器,其中一个旋转了 90 度。字体抗锯齿在旋转的显示器上看起来不正确(即字符周围有彩虹边框)。

我认为这是因为 X 在两个显示器上使用相同的子像素渲染顺序。有没有办法为每个显示器配置不同的子像素渲染顺序?(即,显示器 1 = RGB,显示器 2 = vRGB)。

答案1

您必须将显示器配置为单独的 X 屏幕,而不是共享桌面。Ubuntu 应该允许您调整各个 X 屏幕的子像素顺序。

否则,如果窗口横跨两个具有不同子像素顺序的显示设备,会发生什么情况?或者更棘手的是,两个显示器处于克隆模式,具有不同的物理顺序(RGB vs BGR)。

这是目前所有操作系统都存在的一个已知限制,需要进行重大的重新设计才能解决。动态调整是不可行的,因为执行渲染的库必须知道您在哪个屏幕上并进行动态调整。另外,假设您将一个窗口的一半放在一个屏幕上,另一半放在另一个屏幕上——它不知道该选择哪个。

设置多个 X 屏幕:

  1. 启动并重新配置 X。 sudo dpkg-reconfigure -phigh xserver-xorg 按照步骤设置主显示器。(我不知道如何从 CLI 执行此特定步骤)
  2. 打开终端,
    lspci
    这将为您提供设备及其总线 ID 的列表。找到显卡并记下它们的总线 ID。
  3. xorg.conf复制一份xorg.conf.orig并打开它:sudo vi /etc/X11/xorg.conf
  4. 读这个 继续进行以确保您可以根据需要进行自定义。
  5. 现在分成两个Device部分并列出BusID要共享的卡,并列出驱动程序,如下所示:

    Section "Device"
        Identifier  "nvidia0"
        # Your preferred driver
        Driver      "nvidia"
        # Edit the BusID with the location of your graphics card
        BusID       "PCI:2:0:0"
        Screen      0
    EndSection
    
    Section "Device"
        Identifier  "nvidia1"
        # Your preferred driver
        Driver      "nvidia"
        # Edit the BusID with the location of your graphics card
        BusId       "PCI:2:0:0"
        Screen      1
    EndSection
    
  6. 现在创建两个Screen部分(当然使用您选择的参数,唯一需要匹配的是Device本节中的部分与Identifier前一部分中的部分),如下所示:

    Section "Screen"
        Identifier  "Screen0"
        Device      "nvidia0"
        Monitor     "Monitor0"
        DefaultDepth 24
        Subsection "Display"
            Depth       24
            Modes       "1600x1200" "1024x768" "800x600" "640x480" 
        EndSubsection
    EndSection
    
    Section "Screen"
        Identifier  "Screen1"
        Device      "nvidia1"
        Monitor     "Monitor1"
        DefaultDepth 24
        Subsection "Display"
            Depth       24
            Modes       "1600x1200" "1024x768" "800x600" "640x480" 
        EndSubsection
    EndSection
    
  7. 现在Monitor为每个监视器创建一个部分,如下所示:

    Section "Monitor"
        Identifier "monitor name here"
    EndSection
    
    Section "Monitor"
        Identifier "monitor name here"
        # Rotate as you want (your question says one is rotated)
        Rotate "left"
    EndSection
    
  8. 最后,更新该ServerLayout部分以使用和定位两个Screen部分:

    Section "ServerLayout"
        ...
        Screen         0 "Screen0" 
        Screen         1 "Screen1" leftOf "Screen0"
        ...
    EndSection
    
  9. 重启 X 然后祈祷吧!如果一切正常,那么继续进行微调,直到您满意。

现在来看看子像素渲染顺序font.conf~/font.conf或 /etc/X11/font.conf 中 进行此更改。bgr

答案2

另一个解决方案是将抗锯齿设置为灰度而不是子像素,因为所有 LCD 屏幕不再具有相同的像素方向。

我通过 gnome-tweaks -> 字体 -> 抗锯齿 -> 标准完成了此操作。对我来说效果不错。如果您更喜欢锐度,也可以将其设置为“无”。

相关内容