X11

如何將 X 視窗定位到輔助監視器?(並且知道為了做到這一點它被稱為什麼)

  • November 21, 2021
  • 我有兩台顯示器(一台 HDMI,一台 DVI)連接到我的 linux 盒子上的 Nvidia GT710 GPU。
  • 當我通過 ssh 登錄到我的盒子時,如果我執行xeyes它,它將始終在同一個螢幕上執行。
  • 我知道這個螢幕的名稱,因為echo $DISPLAY返回:0

根據我讀過的一些內容,我希望能夠分別使用:0.0和將 X 視窗定位到我的左右顯示器:0.1。對:1. DISPLAY=:0.0 xeyes確實確實在左側螢幕上顯示了 xeyes,但是:

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

我想也許我可以通過列表看到我的右顯示器的名稱,/tmp/.X11-unix/但是:

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

那麼我該如何處理這個輔助顯示器並知道如何處理它呢?

PS。我不在乎是否不能在螢幕之間移動視窗,如 ArchWiki 中所述:https ://wiki.archlinux.org/title/Multihead#Separate_screens 。這對我來說很好,但我不清楚如何實現這一目標。

我希望能夠使用 :0.0 和 :0.1 將 X 視窗定位到我的左右顯示器

這僅適用於您的左右顯示器實際上會使用兩個X 螢幕,除非您自己配置,否則您通常不會看到它。

開箱即用,今天的大多數係統都使用Xinerama,這意味著您可以獲得一個X 螢幕,其中兩個xrandr輸出從不同位置的相同幀緩衝區讀取。

但只有您可以告訴我們您的系統是如何配置的(閱讀/var/log/Xorg.log以了解)。

錯誤:無法打開顯示::0.1

這證實了上面的假設:您沒有兩個 X 螢幕。

那麼我該如何處理這個輔助顯示器並知道如何處理它呢?

查看 的輸出xrandr,看看是否有兩個輸出連接到同一個幀緩衝區(即,所有輸出都列在 下Screen 0)。

如果是,這意味著您需要在某個位置放置一個視窗,以使其顯示在左側或右側監視器上(或同時顯示在左側或右側,一半在左側,另一半在右側)。

您的視窗管理器(WM),在大多數現代發行版中集成在您的桌面環境中,可以影響視窗的放置,並且通過正確配置它,它可以幫助將其放置在您想要的位置(並因此監控)。

許多(但不是全部)X 應用程序也支持該-geometry選項(閱讀手冊頁),它再次將視窗放置在某個位置,但 WM 可以自由地覆蓋它,所以如果它不起作用,那就是原因。


如果您沒有執行現代桌面系統,並且您甚至不打算使用視窗管理器(甚至幾十年前每個人都這樣做了;X意味著有一個視窗管理器),那麼您需要定位和調整每個視窗的大小單獨通過命令行(這也將確定它們出現在目前設置中的哪個螢幕上);你將無法調整視窗大小或移動視窗等(如果你做到這一點,那麼即使你沒有意識到這一點,你也會在某處擁有一些 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)。期望花費相當多的時間來完成這項工作。

引用自:https://unix.stackexchange.com/questions/678433