Eri*_*ell 5 linux multiple-monitors xorg compiz xrandr
我有两台 Ubuntu 10.4 机器(并且 Ubuntu 继续隐藏越来越多的 xorg.conf 配置,以至于我不再知道在哪里可以找到它)。一个是双头笔记本——DP1是内屏,VGA1是外显;两者都以 1600x900 运行。另一台机器是台式机,同时运行 VGA1 和 HDMI1(实际上是一个带有 DVI 适配器的显示端口),分辨率为 1600x900。所以在这两种情况下,我的桌面都是 3200x900。我在笔记本电脑上运行一个 VNC 服务器并从桌面连接到它(通过 SSH 隧道) - 当我按下全屏热键时,我在一台显示器上看到远程机器的 1600x900 视图,我的本地桌面的一半在另一台显示器 - “全屏”仅扩展以填充一个本地显示器。
通常,当您全屏浏览 Web 浏览器、电子邮件客户端或其他应用程序时,这正是您想要的。我确信有一些 X 魔法可以明确全屏实际需要什么,而 vnc 客户端应用程序只是尽职尽责地接受它所告诉的内容。虽然我想保持常规应用程序的正常全屏行为,但是当我 VNC 到另一台 3200x900 机器时,我真的希望全屏显示在两个本地显示器上。将窗口大小调整为“关闭”还不够好,因为我在一个显示器的顶部和底部仍然有本地面板(尽管我可以将它们设置为自动隐藏),加上 VNC 客户端应用程序窗口边框(因为它没有) t似乎尊重-notitle)。
有没有什么好方法可以让 X 对一个关于“全屏”大小的应用程序撒谎?我可以让它对所有应用程序撒谎吗? xrandr --noprimary似乎没有效果。
我做了一些挖掘。我假设的 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 到顶部、XMapRaised 等)并且效果很好(只要我还禁用了非全屏功能中的检测代码) )。可以说它的效果更好 - alt-tab 和其他窗口管理键现在传递到远程机器,直到我取消全屏 VNC 客户端窗口。
所以它可能是 hacky 并且有一些问题*,但至少现在我已经让它在我的脑海中表现得可以接受。
*:取消全屏无法正确重绘根窗口或其他被覆盖的窗口。但是切换到不同的视口然后切换回来会强制重绘,这是一种可以接受的解决方法。
| 归档时间: |
|
| 查看次数: |
5326 次 |
| 最近记录: |