在特定窗口上打开全屏应用程序

在特定窗口上打开全屏应用程序

运行 19.04,具有三显示器设置。我使用 Wine 在中央显示器上全屏打开游戏,只需运行 即可wine game.exe。但是,Wine 最近更新了,现在它在我最左边的显示器上打开。我怎样才能让它回到中央显示器上打开?

我尝试使用--geometryWine 命令末尾的选项,但似乎没有什么变化。软件仍然在同一个位置打开。

中央监视器也被确认为主监视器。

使用 Nvidia 驱动程序 430.26。


我记得,X 不会为每个显示器创建单独的屏幕。相反,它将显示器组合成一个逻辑屏幕。查看nvidia-settings,我看到 X Screen 0 显示为 5040x1086。我的三个显示器从左到右设置为 1680x1050、1920x1080 和 1440x900。

我不知道 X Server 是否一直都是这样做的,但如果每个显示器都是独立的屏幕,也许我的问题可以解决。有办法吗?或者有更好/更简单的解决方案来解决这个问题?

我问过类似问题大约一年前,关于如何在特定显示器上打开终端。不幸的是,同样的方法似乎不适用于这里的情况。


编辑:

显示的信息nvidia-settings表明X Screen 0,包含我的三个监视器的 的显示名称为hiigaran:0.0

根据 earthmeLon 的建议,我尝试将其添加SDL_VIDEO_FULLSCREEN_HEAD到希望用来启动相关应用程序的命令中。以下三个命令用于测试应用程序将在哪个显示器上打开:

SDL_VIDEO_FULLSCREEN_HEAD=0 wine game.exe
SDL_VIDEO_FULLSCREEN_HEAD=1 wine game.exe
SDL_VIDEO_FULLSCREEN_HEAD=2 wine game.exe

wine game.exe使用其中任何一个命令与单独使用这些命令之间没有观察到任何差异。应用程序仍然在最左侧的显示器上全屏打开。

答案1

通常,您使用单个屏幕,并且所有显示器都属于该屏幕,如您所见。通过使用多个屏幕,您可以更准确地定义应用程序的加载位置,但您无法在不同的屏幕之间移动应用程序。

如果您使用多个屏幕,则可以通过变量确定哪个屏幕DISPLAY

DISPLAY=:1 wine

为了设置哪个显示器用于全屏应用程序,以及确保所有显示器不会同时用于全屏应用程序,我最幸运的是设置了环境SDL_VIDEO_FULLSCREEN_HEAD变量,以便在窗口管理器中可以使用它。您可以将其设置为显示器的编号,从零开始:

export SDL_VIDEO_FULLSCREEN_HEAD=0

使用三台显示器时,您可以在01和之间进行选择2。您可以在~/.xinitrc/中设置~/.xsessionrc。将其放置在哪里export在很大程度上取决于窗口管理器的启动方式,使用 GDM、LightDM 或startx等。

您可以通过在运行时设置变量来测试这是否适合您,或者哪个监视器是哪个:

$ SDL_VIDEO_FULLSCREEN_HEAD=1 wine

笔记:OP 提到这个测试不起作用。


将其设置为默认显示器可能也有意义,或者确保它是不是您的默认显示器。可以使用以下方式设置默认显示器xrandr

$ xrandr primary NAME_OF_DEVICE

Wine 虚拟桌面

如果所有这些都失败了,您还有最后一个选择,即配置 Wine 以使用虚拟桌面。这将导致 Wine 创建一个 Windows 窗口,并且您可以指定此窗口的分辨率(以匹配您的显示器的分辨率)。通过 Wine 运行的全屏 Windows 应用程序将仅填充该窗口。您可以使用窗口管理器将其移动到正确的桌面/显示器。

这可以通过打开 Wine 配置(winecfg)并打开“图形”选项卡来完成,或者/desktop=name,1024x768在运行 wine 时使用标志来完成:

wine /desktop=name,1024x768 game.exe

答案2

因此,在虚拟桌面中运行 Wine 似乎是可行的方法。我一直避免这样做,因为如果我将桌面设置为我想要使用的显示器的分辨率,虚拟桌面的标题栏与 Ubuntu 的顶部/活动栏相结合会导致虚拟桌面的很大一部分在底部被切断。此外,dock 会使情况变得更糟。

经过一番折腾,我想到最好的解决方案如下:

  1. 确保在“设置”>“设备”>“键盘”中设置了热键gnome-control-center,用于将窗口移动到其他显示器以及进入全屏
  2. 按照常规使用 Wine 启动所需的程序
  3. 当虚拟桌面出现并占据焦点时,使用热键将窗口移动到所需的显示器。
  4. 使用全屏热键让虚拟桌面使用整个显示器区域

虽然软件在正确的显示器上全屏打开是理想的选择,但这对我来说是一个合适的解决方案,尽管从技术上讲,它更多的是一种变通方法,而不是真正的解决方案。

相关内容