以不同的分辨率和声音启动第二个 X 会话

以不同的分辨率和声音启动第二个 X 会话

我有两个屏幕通过 twinview 连接在一起。有些应用程序将其视为一个 3840*1200 的大面板,但这在第一人称射击游戏中是相当不理想的,因为您的视线最终会进入两个屏幕之间的间隙。

因此,我通常在 1920*1200px 的窗口中运行 Wine 游戏。窗口管理器会在一个屏幕上全屏显示,这对某些游戏来说效果很好。但是有些游戏会延迟,这会导致鼠标飞出 Wine 窗口的一侧,导致我的玩家像吸毒的狐狸一样旋转。

此外,还有大量原生游戏(X3、OpenArena、Quake4、QuakeWars 等)没有良好的窗口模式。在 X3 上使用窗口模式会导致鼠标变得非常敏感。

如果我可以在仅使用一个屏幕的新 X 会话中启动一些游戏,那不是很好吗?!

是的。对于 Steam,我了解到以下信息:

#!/bin/sh

X :3 -ac & nvidia-settings --load-config-only
sleep 10 # wait for X to catch up

cd ~/.wine/drive_c/Program\ Files/Steam/
DISPLAY=:3 WINEDEBUG=-all wine "Steam.exe"

现在这在技术上使用了两个屏幕,但是当游戏在全屏模式下启动时,一旦它们已经设置为 1920*1200,它们似乎会适应并使用我的 xorg.conf 元模式之一。如果我可以在此可执行文件中明确说明模式,那就更好了。有办法吗?

也没有声音。我已经安装了 WinePulse 补丁,所以我只需要将 PulseAudio 连接到此会话(反之亦然),我想现在就可以了。

编辑:Ralf 注意到了一些问题,但忽略了(或误解了)其他一些问题。这可能是因为我的问题太冗长了。尽管帖子很长,但我只遇到了两个问题。

以下是我所遇到的简洁问题:

  • 如何以指定的分辨率启动新的 X 会话?我最好在调用 X 时指定现有的元模式或精确的分辨率。

  • 如何让新 X 会话中的应用程序与正确的 PulseAudio 服务器通信?目前,它们似乎没有对齐。我已经用 测试过totem,而不仅仅是 Wine 应用程序。

答案1

对于声音,您只需运行ck-launch-session脚本:

#!/bin/sh

X :3 -ac & nvidia-settings --load-config-only
sleep 10 # wait for X to catch up

cd ~/.wine/drive_c/Program\ Files/Steam/
DISPLAY=:3 ck-launch-session
DISPLAY=:3 WINEDEBUG=-all wine "Steam.exe"

两个 X 显示器的声音被合并。

答案2

更具体地回答您的问题。您可以使用 nvidia-settings 来更改元模式。来自 nvidia-settings --help 的片段:

-a, --assign=[ASSIGN]
  The ASSIGN argument to the '--assign' commandline option is of the form:

    {DISPLAY}/{attribute name}[{display devices}]={value}

  This assigns the attribute {attribute name} to the value {value} on the X
  Display {DISPLAY}.  {DISPLAY} follows the usual {host}:{display}.{screen}
  syntax of the DISPLAY environment variable and is optional; when it is
  not specified, then it is implied following the same rule as the
  --ctrl-display option.  If the X screen is not specified, then the
  assignment is made to all X screens.  Note that the '/' is only required
  when {DISPLAY} is present.

  {DISPLAY} can additionally include a target specification to direct an
  assignment to something other than an X screen.  A target specification
  is contained within brackets and consists of a target type name, a colon,
  and the target id.  The target type name can be one of "screen", "gpu",
  "framelock", "vcs", "gvi", or "fan"; the target id is the index into the
  list of targets (for that target type).  The target specification can be
  used in {DISPLAY} wherever an X screen can be used, following the syntax
  {host}:{display}[{target_type}:{target_id}].  See the output of
  `nvidia-settings -q all` for information on which target types can be
  used with which attributes.  See the output of `nvidia-settings -q
  screens -q gpus -q framelocks -q vcs -q gvis -q fans` for lists of
  targets for each target type.

  The [{display devices}] portion is also optional; if it is not specified,
  then the attribute is assigned to all display devices.

  Some examples:

    -a FSAA=5
    -a localhost:0.0/DigitalVibrance[CRT-0]=0
    --assign="SyncToVBlank=1"
    -a [gpu:0]/DigitalVibrance[DFP-1]=63

答案3

运行多个X会话

我认为这正是您想要的。而且可以运行多个 X 会话,但这并不意味着所有视频驱动程序都允许您使用相同的视频卡。因此,运行多个 Xsession 意味着您将需要多个视频卡。

元模式

游戏可以使用元模式更改桌面的分辨率和屏幕的设置。假设左侧有一台 1680x1050 的大显示器,右侧有一台较旧、较小的显示器,其最高分辨率为 1025x768。

Section "Screen"
Identifier  "Default Screen"
DefaultDepth    24
    Option         "TwinView" "1"
    Option         "TwinViewXineramaInfoOrder" "CRT-0"
    Option         "metamodes" "CRT-0: 1680x1050 +0+0, CRT-1: 1024x768 +1680 +0; CRT-0: 1680x1050 +0+0, CRT-1: NULL; CRT-0: 1400x900 +0+0, CRT-1: NULL;"
EndSection

当您可以在游戏中选择分辨率时,您将拥有以下选项:

2704x1050      this refers to the total viewport size of using two monitors
1680x1050      this means the second monitor is off, and you will use a high resolution
1400x900       this also only used the first monitor, but it will run a bit quicker 

您可以添加许多元模式。只需确保“结果”视口具有唯一的分辨率。否则游戏将无法理解它。

有趣的是,当您按 alt-tab 退出游戏时,系统将切换回原始元模式,而当您按 alt-tab 返回游戏时,它将返回到为该游戏配置的元模式。

葡萄酒/蒸汽

元模式技巧也适用于 wine。不过,有些游戏不支持更改分辨率。

一个很好的解决方法:

- turn on emulate virtual desktop, in wine-config, and set it to your desktop size
- compiz will automatically turn it into 'fullscreen' mode and hide panels
- the mouse will be captured properly. Your other monitor is still on, and displays whatever is there. You will need to alt=tab to reach it though. Perhaps its a good idea to associate a shortcut to minimize window. 

如果您在玩某些游戏时仍遇到鼠标捕捉问题,则可以使用鼠标变形模式:

WINEFORCEMOUSEWARP=yes wine yourapp.exe

Pulseaudio 与 Wine

您可以使用此 PPA 来获取已启用脉冲音频驱动程序的 wine。请确保还使用 wine-config 选择它。

 https://launchpad.net/~neil-aldur/+archive/ppa

相关内容