我有兩台 Ubuntu 10.4 機器(Ubuntu 繼續隱藏越來越多的 xorg.conf 配置,這樣我就不再知道在哪裡可以找到它)。一種是運行雙頭的筆記型電腦 - DP1 是內部螢幕,VGA1 是外部顯示器;兩者都以 1600x900 運行。另一台機器是桌上型電腦,以 1600x900 的解析度運行 VGA1 和 HDMI1(實際上是具有 DVI 轉接器的顯示連接埠)。所以在這兩種情況下我的桌面都是 3200x900。我在筆記型電腦上運行VNC 伺服器,並從桌面連接到它(透過SSH 隧道) - 當我按下全螢幕熱鍵時,我會在一台顯示器上看到遠端電腦的1600x900 視圖,並在顯示器上看到本地桌面的一半另一台顯示器 - “全螢幕”僅擴展以填充一個本地顯示器。
通常,當您全螢幕瀏覽 Web 瀏覽器、電子郵件用戶端或其他應用程式時,這正是您想要的。我確信有一些 X 魔法可以清楚地說明全螢幕實際上意味著什麼,並且 vnc 客戶端應用程式只是盡職地接受它所告訴的內容。雖然我希望保留常規應用程式的正常全螢幕行為,但當我透過 VNC 連接到另一台 3200x900 電腦時,我真的希望全螢幕能夠在兩個本地顯示器上延伸。將視窗大小調整為“關閉”還不夠好,因為我在一個顯示器的頂部和底部仍然有本地面板(儘管我可以將它們設置為自動隱藏),再加上VNC 客戶端應用程式視窗邊框(因為它沒有) t 似乎尊重-notitle)。
有沒有什麼好方法讓 X 對單一應用程式謊稱「全螢幕」尺寸?我可以讓它對所有應用程式撒謊嗎? xrandr --noprimary
似乎沒有效果。
答案1
我做了一些挖掘。我假設的 X11 魔法的現代版本實際上是視窗管理器魔法,_NET_WM_STATE_FULLSCREEN。我的 VNC 客戶端實際上正在使用該請求,並擴展到單一監視器。看來應該先設定一下_NET_WM_FULLSCREEN_MONITORS描述哪些顯示器用作上/下/左/右邊緣,但事實並非如此。然而,我從 dpkg 中提取了原始程式碼並進行了破解。即使使用 _NET_WM_FULLSCREEN_MONITORS 我也無法引發正確的行為。 VNC 用戶端確實知道它想要達到 3200x900,並且它嘗試多次 (30) 來調整到該大小(在 XA_WM_NORMAL_HINTS 中設定基本寬度和最大寬度和高度,然後在頂部視窗上使用 XResizeWindow()),但是它總是被忽略。也許 compiz 行為不端?
但 VNC 用戶端也有直接處理 X 的程式碼,而不是透過視窗管理器。當我剪下 WM 偵測程式碼時,它會更直接地修改根視窗(XtNoverrideRedirect、XReparentWindow 到頂部、XMapRaished 等),這就像一個魅力(只要我也在非全螢幕功能中停用偵測程式碼) )。它可以說工作得更好 - alt-tab 和其他視窗管理鍵現在可以到達遠端計算機,直到我取消全螢幕顯示 VNC 用戶端視窗。
所以它可能是很hacky並且有一些陷阱*,但至少現在我已經讓它在我的腦海中表現得可以接受。
*:非全螢幕顯示無法正確重繪根視窗或其他已覆蓋的視窗。但是切換到不同的視窗然後再切換回來會強制重繪,這是一個可以接受的解決方法。
答案2
探索的另一種可能性可能是某些程式在啟動時被迫達到特定大小/位置的能力。
我定義了透過 E17 圖示執行 Opera 的命令,如下所示:
/usr/local/bin/opera-11.01-幾何1600x3200-0+100%U
這設定了 Opera 視窗的大小和位置。
在 Xemacs 中,我無法控制位置,但我可以在 init.el 中指定啟動時運行的視窗大小:
(設定框架大小(窗框)140 80)
這些並不是針對您的情況的精確解決方案,但您可能可以考慮將正在運行的任何軟體設定為相當於全(雙)螢幕的特定尺寸/位置?並非所有人都會有這種選擇,但也許值得研究一下。