如何将 X 窗口定位到辅助监视器? (并知道它叫什么才能做到这一点)

如何将 X 窗口定位到辅助监视器? (并知道它叫什么才能做到这一点)
  • 我有两台显示器(一台 HDMI,一台 DVI)连接到我的 Linux 盒子上的 Nvidia GT710 GPU。

  • 当我通过 ssh 登录到我的盒子时,如果我运行xeyes它,它将始终在同一屏幕上运行。

  • 我知道这个屏幕的名称,因为echo $DISPLAY返回:0

根据我读过的一些内容,我希望能够分别使用:0.0和将 X 窗口定位到我的左侧和右侧显示器:0.1。对于 也一样:1DISPLAY=:0.0 xeyes确实会在左侧屏幕上显示 xeyes,但是:

~$ DISPLAY=:0.1 xeyes
Error: Can't open display: :0.1

我想也许我可以通过列出来看到我的右侧显示器的名称是什么,/tmp/.X11-unix/但是:

~$ ls /tmp/.X11-unix/
X0

那么我该如何处理这个辅助显示器并知道如何处理它呢?

附言。我不在乎是否无法在屏幕之间移动窗口,如 ArchWiki 中所述:https://wiki.archlinux.org/title/Multihead#Separate_screens。这对我来说很好,但我不清楚如何实现这一目标。

答案1

我希望能够使用 :0.0 和 :0.1 将 X 窗口定位到我的左右显示器

这仅适用于您的左右显示器实际上会使用两个X 屏幕,除非您自己配置过,否则您通常不会看到它。

开箱即用,当今大多数系统使用希涅拉玛,这意味着你得到一个X屏两个xrandr输出从不同位置的同一帧缓冲区读取。

但只有您可以告诉我们您的系统是如何配置的(阅读/var/log/Xorg.log以了解详情)。

错误:无法打开显示::0.1

这证实了上面的假设:您没有两个 X 屏幕。

那么我该如何处理这个辅助显示器并知道如何处理它呢?

查看 的输出xrandr,看看是否有两个输出附加到相同的帧缓冲区(即所有都列在下面Screen 0)。

如果是,这意味着您需要在某个位置放置一个窗口,使其出现在左侧或右侧显示器上(或同时出现在两个显示器上,一半在左侧,另一半在右侧)。

你的窗口管理器(WM),在大多数现代发行版中都集成在您的桌面环境中,可以影响窗口的位置,并且通过正确配置它,它可以帮助将其放置在您想要的位置(从而监控)。

许多(但不是全部)X 应用程序也支持该-geometry选项(请阅读手册页),该选项再次将窗口放置在某个位置,但 WM 可以自由覆盖该选项,因此如果它不起作用,这就是原因。


如果您没有运行现代桌面系统,并且您甚至不打算使用窗口管理器(甚至几十年前每个人都这样做;X 是意思是拥有一个窗口管理器),那么您需要通过命令行单独定位每个窗口并调整其大小(这也将确定它们出现在当前 setip 中的哪个屏幕上);您将无法调整窗口大小或移动窗口等(如果您这样做,那么你就会在某个地方拥有一些 WM,即使你没有意识到这一点)。

你也设置 X,使其使用两个屏幕,每个输出一个。您需要一个自定义xorg.conf文件。这是我用于带有一个 HDMI3 屏幕的英特尔硬件的文件(当我不久前连接电视时,这就是为什么有两个屏幕是有意义的):

Section "Device"
        Identifier "intel0"
        Driver "intel"
        Option "AccelMethod" "sna"
        Option "ZaphodHeads" "VGA1,HDMI1,DP1"
        Screen 0
EndSection

Section "Device"
        Identifier "intel1"
        Driver "intel"
        Option "AccelMethod" "sna"
        Option "ZaphodHeads" "HDMI3"
        Screen 1
EndSection

Section "Screen"
        Identifier "screen0"
        Device "intel0"
EndSection

Section "Screen"
        Identifier "screen1"
        Device "intel1"
EndSection

Section "ServerLayout"
        Identifier "default"
        Screen "screen0" 0 0
        Screen "screen1" Below "screen0"
EndSection

您需要根据您的硬件和要求进行调整;不同的硬件可能需要不同的选项(例如,当时我这样做时,英特尔硬件需要 AccelMethod 和 ZaphodHeads)。预计要花费相当多的时间才能使这项工作顺利进行。

相关内容