无法在 VirtualBox 上的 Debian 7 中可靠地自动执行 xrandr 设置

Kyl*_*and 23 debian virtualbox multiple-monitors xrandr i3-window-manager

尽管有几个关于这个问题的现有问题(最有帮助的答案是this)和其他论坛上的各种主题,但我无法xrandr在 VirtualBox 上的 Debian 7 中可靠地设置我的设置。

我试图用来xrandr控制我的显示设置(而不是让我的桌面环境自动执行它们),因为我使用的是i3window manager,它不会自动显示设置或使用 Gnome 桌面环境显示设置。

设置:

我不确定这些有多大关系,尤其是硬件方面,因为我认为Debian 实际上无法访问有关监视器设置的很多信息;据我所知,VirtualBox 只是报告虚拟屏幕的存在,就好像它们是硬件监视器一样。

硬件

  • 带有 nVidia 图形的联想笔记本电脑(未使用集成的英特尔 GPU,AFAIK——我曾使用 BIOS 设置来完成此操作)
    • Windows 7的
    • 32GB 内存
    • 使用最新的(我认为)nVidia 驱动程序(340.84)——这可能很重要,因为我在 VirtualBox 中启用了 3D 加速(见下文),我认为这允许来宾操作系统访问主机硬件
  • Seiki 4K 电视(用作显示器)通过扩展坞通过 HDMI(内部将 DisplayPort 转换为 HDMI)
  • 三星 SyncMaster 243T 显示器变成立式

虚拟盒子

  • 使用 VirtualBox 4.3.20
  • 安装了来宾添加(相同版本)
  • 显示器数量:2(在全屏模式下分配给 Seiki 和 SyncMaster)
  • 使用的最大视频内存 (128 MB)
  • 3D 加速已启用

访客设置

  • 32 位 Debian 7
  • gnomegdm3已安装
  • 首选 WM 是 i3

行为:

当我启动i3和查询xrandr,默认的显示设置始终显得之间相同VBOX0并且VBOX1,这两个“显示器”是VirtualBox的报告xrandr(至少,这就是我如何理解它,我可能会失去了一些东西)。请注意,据我所知,没有很好的方法来判断哪个 VBOX# 是哪个监视器缺少反复试验。

通常这包括我的垂直 SyncMaster 的合理(如果略低于原生)分辨率,但没有 Seiki 的 4K 分辨率。VirtualBox 中的“自动调整访客显示大小”选项似乎不会影响xrandr.

我已尝试对上面链接的答案中描述的脚本进行各种修改,但总的来说,我似乎遇到了各种xrandr错误。我没有发现我尝试过的各种事情与我得到的错误之间有很多相关性,但以下是可能很重要的主要事情:

脚本调整

  • (通常)跳过VBoxService重启步骤(它们似乎不会改变xrandr行为)
  • xrandr --fb在任何其他xrandr命令之前使用选项;这有时会导致下面列出的“指定的屏幕不够大”错误
  • 使用 30 fps 而不是 60(通过当前 HDMI 的 4K 最大为 30fps,但我认为这在 VirtualBox 中无关紧要;在任何情况下,我认为我有时让它工作,有时它会以两种方式失败)
  • 使用cvt而不是gtf(这些似乎表现得基本相同)
  • gtf用较小的数字替换由(通常约为 200 或 300)给出的第一个数字,例如100.00(我认为这在命令行上工作了一两次,但通常似乎没有区别)
  • 使用随机化新模式名称$RANDOM(我也尝试过各种其他摆弄名称的方法)
  • --rmmode使用创建它们之前的显式模式--newmode(这似乎是为了防止下面列出的“字体”错误)
  • 在设置s时使用--right-ofor (因为屏幕通常默认是镜像的)--left-of--output

错误信息

  • xrandr: specified screen 5120x2160 not large enough for output VBOX0 (3840x2160+3840+0) X Error of failed request: BadValue (integer parameter out of range for operation) 我刚刚在监视器已经被强制为其正确分辨率后重新运行脚本时得到了这个(使用下一节中描述的变通方法)。这让我感到惊讶,因为xrandr报告如下: Screen 0: minimum 64 x 64, current 5120 x 2160, maximum 16384 x 16384
  • X Error of failed request: BadMatch (invalid parameter attributes) 尝试执行--newmode. 这可能是脚本失败的第二个最常见的原因。我认为这可能是由于xrandr“记住”了先前尝试设置模式的名称所致,但使用$RANDOM似乎并不能始终如一地解决问题,因此可能是其他一些问题。(我想即使$RANDOM存在名称冲突也是可能的。)自从我开始使用以来,我还没有看到这个错误--rmmode,但是自从添加该命令以确保它对行为。
  • X Error of failed request: BadMatch (invalid parameter attributes) 尝试执行--addmode. 这可能是脚本失败的最常见原因,这让我很困惑。有时手动(即在终端中)执行脚本使用的相同命令序列似乎是解决此错误的可行方法,这很奇怪。

侏儒解决方法:

我发现,如果我登录 Gnome 桌面,然后执行 VirtualBox 的“自动调整访客显示大小”功能,然后注销并重新登录i3xrandr通常在其自动生成的中包含 Seiki 和 SyncMaster 的正确分辨率模式列表,并将 4K 分辨率设置为每个 VBOX 屏幕的“首选”分辨率。这使我可以简单地使用xrandr --output [4K VBOX] --auto --left-of [SyncMaster VBOX], 其次是xrandr --output [SyncMaster VBOX] --mode [SyncMaster resolution](请注意,仍必须手动指定 SyncMaster 分辨率,因为xrandr报告两者 VBOX#的首选分辨率相同,而不考虑真实性或理智)。

这种解决方法一旦执行,显然在关机和重新启动后仍然存在(也就是说,所需的模式仍然存在于xrandr的模式列表中,尽管xrandr在启动i3会话后我仍然需要运行这两个命令),但在简单的情况下并不总是持续存在注销并开始新的i3会话。请注意,gdm3登录屏幕从来没有正确的分辨率(就我所见)。我对这里发生的奇怪事情没有进一步的评论。

编辑:这种方法似乎无法编写脚本,而且行为实际上似乎并不一致。

其他注意事项:

  • 我的目录中没有xconf(或类似的)文件etc/X11
  • 修复显示器是一个非常常见的问题,因为每当我关闭一台显示器时,VirtualBox 就会杀死其中一台全屏虚拟显示器。(呃。)

问题:

  • 有没有办法以编程方式区分 VirtualBox 中不同显示器的实际硬件功能(即原始分辨率)?
  • 为什么我会看到这些不同的错误?是怎么回事xrandr,等等?
  • 有没有什么方法可以可靠地获得正确的全屏分辨率,而无需我在gnome会话之前启动i3会话?

可能相关的问题

  • 我的鼠标指针不能可靠地与似乎检测到点击的位置正确对齐;单击通常发生在指针的下方和右侧。一旦我正确配置了屏幕,这个问题通常会消失,尽管目前屏幕具有正确的分辨率但指针仍然略微偏离。
  • 当我设法使分辨率正确时,屏幕偶尔会闪烁。这是烦人但宜居的。知道是什么原因造成的,或者是否可以修复?

Kyl*_*and 0

更新到最新的 VirtualBox 版本 5.0.14 似乎已经解决了该问题。