如何在不同的显示器上打开一个窗口?

Lek*_*eyn 12 desktop kde multi-monitor kwin virtual-desktop

使用多个显示器,到目前为止我一直在手动拖动窗口。有没有办法在双头设置中的特定屏幕上打开窗口?(不要与多个 X 服务器显示混淆。)

类似的东西:SCREEN=2 firefoxopen-in-screen 2 firefox

如果重要的话,我的环境是使用 KWin 窗口管理器的 KDE。KWin 窗口规则只能匹配一些属性,如标题,但我找不到作为过滤器的环境变量。

副显示屏扩展了主屏幕:

$ xrandr -q
Screen 0: minimum 320 x 200, current 3520 x 1080, maximum 32767 x 32767
LVDS1 connected 1600x900+0+0 (normal left inverted right x axis y axis) 382mm x 214mm
   1600x900       60.1*+
   1024x768       60.0  
   800x600        60.3     56.2  
   640x480        59.9  
VGA1 disconnected (normal left inverted right x axis y axis)
HDMI1 connected 1920x1080+1600+0 (normal left inverted right x axis y axis) 477mm x 268mm
   1920x1080      60.0*    50.0     59.9  
   1920x1080i     60.1     50.0     60.0  
   1680x1050      59.9  
   1280x1024      75.0     60.0  
   1440x900       59.9  
   1280x960       60.0  
   1280x720       60.0     50.0     59.9  
   1024x768       75.1     70.1     60.0  
   832x624        74.6  
   800x600        72.2     75.0     60.3     56.2  
   720x576        50.0  
   720x480        60.0     59.9  
   640x480        75.0     72.8     66.7     60.0     59.9  
   720x400        70.1  
DP1 disconnected (normal left inverted right x axis y axis)
Run Code Online (Sandbox Code Playgroud)

Ban*_*uin 5

不,你不能直接这样做。在 X 架构中,应用程序无法识别您看到的两个物理监视器。您只能通过确定可见工作区的哪些区域对应于哪个监视器,然后将窗口放置在正确的偏移处来解决此抽象问题。

Sensible 工具包支持一个-geometry选项,它允许您的应用程序请求放置在特定位置。如果您没有此选项可用,您可以使用wmctrl与 EWMH/NetWM 兼容的 X 窗口管理器来移动和调整现有窗口的大小(请参阅 wmctrl (1),您需要选项-r-e)。我devilspie用来强制放置一些窗口,当然您选择的窗口管理器可能有自己的工具来强制放置窗口。

devilspie允许在 X 窗口上应用某些操作,并可以使用 X 窗口属性来识别不同的窗口和应用程序。你的关键规则是geometry "<width>x<height>+<xoffset>+<yoffset>"

然而,您总是需要自己计算另一个物理监视器何时何地开始。但这并不太难,xrandr它确实告诉您它如何以及在何处使用监视器,"<width>x<height>+<xoffset>+<yoffset>每行以输出名称开头。

没有万无一失的方法,因为实现可能(并且确实!)有所不同。wmctrl通常作用于窗口标题以识别目标。devilspie也可以参考它的类,但是,我不知道有任何工具包可以让您指定 X 窗口类而不是其几何。

当然,您始终可以启动两个xephyr实例,让一个实例填充左侧屏幕,另一个填充右侧屏幕,然后通过DISPLAY环境变量寻址屏幕,但此解决方案还有其他缺点。

理论上,管理窗口放置的权限是窗口管理器。因此,如果你想要你的窗口管理器不能做的东西,它会很麻烦,这也是为什么没有通用的方法来实现这一点的原因。

然而,如果您的具体用例是您的 android 模拟器......这与要求SCREEN=n fooapp在 shell上指定选项非常不同,那么devilspie可能就是您正在寻找的。提示:我发现最好通过窗口类来识别应用程序。


rki*_*ing 5

这是一个窗口管理器特定的解决方案。这是使用 kwin 的方法,kwin 是 KDE 的默认窗口管理器。

如果您右键单击应用程序标题栏并选择更多设置 -> 特殊应用程序设置。

转到窗口匹配选项卡。单击检测窗口属性按钮。然后用鼠标光标单击应用程序主窗口。它将选择窗口类等,并获取窗口定位信息等。

然后单击大小和位置选项卡。单击框位置和框大小,然后单击两者右侧的下拉框并设置为记住。

然后点击确定。

下次运行应用程序时,它应该是相同的大小并在同一台显示器上。

我在 KDE 中使用它在 3 显示器设置上的左侧显示器上打开我的 uRxvt 终端,并且每次都能正常工作。

祝你好运。


cas*_*sey 4

这取决于您的双显示器的设置方式。

如果您使用 XINERAMA 使两个显示器看起来像一对 X,那么您可以使用该-geometry选项来要求应用程序显示在特定位置。如果您将显示设置为不同的屏幕,那么您将使用DISPLAY来实现此目的。

尝试一下这些:

$ DISPLAY=0.0 xterm &
$ DISPLAY=0.1 xterm &
Run Code Online (Sandbox Code Playgroud)

如果您的显示器是屏幕 0 和 1,则应该在每个显示器上生成一个 xterm。

  • 我已经尝试过此操作,但此配置不适用于我,一个屏幕位于另一个屏幕的左侧。我会更新我的问题。 (2认同)