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

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

尽管关于此事存在几个问题(其中最有帮助的答案是)以及其他论坛上的各种帖子,我无法可靠地设置我的xrandrVirtualBox 上 Debian 7 中的设置。

我正在尝试使用xrandr来控制我的显示设置(而不是允许我的桌面环境自动执行这些设置),因为我正在使用i3窗口管理器,它不会自动执行显示设置或使用 Gnome 桌面环境显示设置。

设置:

我不确定这些与我有多大关系,尤其是硬件方面,因为我不思考Debian 实际上可以访问有关显示器设置的大量信息;据我所知,VirtualBox 只是报告虚拟屏幕的存在,就好像它们是硬件显示器一样。

硬件

  • 配备 nVidia 显卡的联想笔记本电脑(据我所知,未使用集成的英特尔 GPU - 我使用 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并查询时, VirtualBox 报告的两个“监视器”和xrandr之间的默认显示设置似乎始终相同(至少,这是我的理解;我可能遗漏了一些东西)。请注意,据我所知,除了反复试验之外,没有很好的方法可以分辨哪个 VBOX# 是哪个监视器。VBOX0VBOX1xrandr

通常,这包括适用于我的垂直 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-of或(因为屏幕通常默认是镜像的)--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 解决方法:

我发现,如果我登录 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我仍然需要运行这两个命令),但是xrandri3不是退出并开始新i3会话时始终保持。请注意,gdm3登录屏幕绝不具有正确的分辨率(就我所见)。对于此处发生的奇怪现象,我没有进一步的评论。

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

其他说明:

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

问题:

  • 有没有什么方法可以通过编程区分 VirtualBox 中不同显示器的实际硬件功能(即原始分辨率)?
  • 为什么我会看到这些错误? 等发生了什么xrandr
  • 有没有什么方法可以可靠地实现正确的全屏分辨率而不需要我在会话gnome之前启动会话i3

可能相关的问题

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

答案1

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

相关内容