第二个屏幕的单独工作区

vel*_*lop 17 multiple-monitors workspaces

我想实现这样的行为:当我使用笔记本电脑屏幕时,会使用我的第一个工作区。当我插入第二个屏幕(通过 HDMI)时,将使用第二个工作区,并且第二个屏幕上所有新打开的窗口都将落在第二个空间中,除非我将第二个屏幕上的工作区切换到另一个工作区。

当我拔下第二个屏幕时,所有窗口都将保留在创建它们的工作区中,我可以在笔记本电脑上切换工作区以查看它们。

这种行为是否已经可能?

uko*_*kos 3

\n

这种行为已经可能了吗?

\n
\n\n

在 Linux 中一切皆有可能。您需要一些有关Xserver的基本知识、一些时间和一个用于测试的系统,因为您正在摆弄您的 X,并且如果您需要帮助,您当然需要运行浏览器:-)

\n\n

在我看来,有以下三种可能的解决方案:

\n\n
    \n
  • 多显示器设置使用Xinerama。我能想到的最简单的解决方案是在您的配置中添加第三个虚拟屏幕,然后使用 xdotool 将窗口移动到那里。该解决方案有一些缺点,但它不需要在不同 Xserver 之间移动窗口,而这通常是不可能的。

  • \n
  • 由于不可能在不同的Xserver之间移动窗口,因此我们需要一种像xmoveXpra这样的代理来为我们做到这一点。我认为窗口位于单独的Xfvb会话中以隐藏窗口。您可以附加和分离到会话。

  • \n
  • 无论您使用什么方法,当监视器拔出插头时都需要一个事件。当屏幕断开连接以及重新连接时,应该触发该事件。您可以对脚本进行守护进程以监视事件。

  • \n
\n\n

出于各种原因,我更喜欢使用 Xpra 的解决方案。我只能给你一些如何做的提示。这些解决方案并不完整,但应该可以帮助您入门。

\n\n

欣拉玛解决方案

\n\n

设置

\n\n

Xinerama 设置必须扩展才能具有静态配置:\n请参阅https://help.ubuntu.com/community/XineramaHowTo

\n\n

另请参阅假第三屏幕Xdummy

\n\n

受影响的窗户

\n\n

我们可以使用xdotool来搜索windows。之后我们可以检查它们的位置并移动它们。我假设有两个1920x1080配置好的显示器。以下将所有窗口从右侧移动到左侧 xinerama 屏幕。

\n\n
while read xwindowid; do\n    eval $(xdotool getwindowgeometry --shell "$xwindowid")\n    if (( X > 1920 && X <= (1920 * 2))); then\n        xdotool windowmove --relative $WINDOW -1920 y\n    fi\ndone <<< "$(xdotool search --screen 0 \'.*\')"\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果连接了显示器,您现在可以将所有窗口从笔记本电脑屏幕 (screen0) 移动到第三个(虚拟)屏幕。同时,您可以将第三个屏幕上存储的任何窗口移动到第一个屏幕。

\n\n

XPRA解决方案

\n\n

为了使用Xpra移动窗口,所有窗口都必须事先由 Xpra 管理。您必须在系统启动时使用 Xpra 启动整个桌面。两次,一个是您工作的主桌面,另一个主要是虚拟桌面。

\n\n
xpra start-desktop :99\nxpra start-desktop :1 --exit-with-children \xe2\x88\x92\xe2\x88\x92attach\n
Run Code Online (Sandbox Code Playgroud)\n\n

现在,您可以让断开连接的屏幕的 Windows 在单独的 xpra 会话中运行,并在显示器切换时与其连接/分离。

\n\n
xpra attach :99\nxpra detatch :99\n
Run Code Online (Sandbox Code Playgroud)\n\n

还有一个已停止使用的 gnome shell 扩展,如果您想在启动的 xpra 显示器之间手动将窗口从隐藏状态移动:99到正常状态,该扩展可能会很有用。:0

\n\n

事件

\n\n
    \n
  • 您可以监视特定显示器的断开/重新连接

  • \n
  • 如果您希望将设置扩展到 3 个显示器并拔下任意设备,则可以使用xwininfo观察 xinerama 的尺寸变化,使其独立于未插入的显示器。请注意,这仅适用于 xpra 解决方案。

    \n\n

    xwininfo -display :0 -root | grep -e "-geometry"

    \n\n

    -geometry 5760x2160+0+0

  • \n
\n