无法在VirtualBox上可靠地自动化xrandr设置


23

虽然有关于此事的几个存在的问题(从最有用的答案是这样),并在其他论坛不同的线程,我不能可靠地设置我的xrandr设置存在于Debian 7 VirtualBox上。

我试图用来xrandr控制我的显示设置(而不是允许我的桌面环境对其进行自动化),因为我使用的是i3窗口管理器,该管理器不能自动执行显示设置或使用Gnome桌面环境显示设置。

设定:

我不确定这其中的相关性如何,尤其是硬件方面的相关性,因为我不认为 Debian实际上可以访问有关显示器设置的许多信息。据我所知,VirtualBox只是报告虚拟屏幕的存在,就好像它们是硬件监视器一样。

硬件

  • 具有nVidia图形的Lenovo笔记本电脑(不使用集成的Intel GPU,AFAIK-我曾经使用BIOS设置来完成此操作)
    • Windows 7的
    • 32GB RAM
    • 使用最新的(我认为)nVidia驱动程序(340.84)-这可能很重要,因为我在VirtualBox中启用了3D加速(请参见下文),我认为这允许来宾OS可以访问主机硬件
  • 通过扩展坞通过HDMI(内部将DisplayPort转换为HDMI)的Seiki 4K电视(用作显示器)
  • 三星SyncMaster 243T显示器变成垂直

虚拟盒子

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

访客设定

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

行为:

当我启动i3和查询时xrandr,默认显示设置在VBOX0和之间始终是相同的,并且VBOX1VirtualBox向其报告的两个“监视器” 之间是相同的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(这似乎是为了防止下面列出的“字体”错误)
  • 使用--right-of--left-of设置--outputs时(因为默认情况下通常会镜像屏幕)

错误讯息

  • 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会话吗?

可能相关的问题

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

我需要挖掘笔记,但是显示支持的模式是什么?i3是否有某种方法可以在登录之前/之后立即启动脚本?superuser.com/questions/808737/…是我最终遇到的类似的物理问题,但这可能需要一些麻烦才能解决。
Journeyman Geek

@JourneymanGeek 4K在60 Hz时支持大多数标准模式,并在30 Hz时支持更大的模式(包括4K)。SyncMaster似乎支持大多数正常模式,其原始(垂直)分辨率为1920x1280。i3 config脚本确实支持在登录时运行脚本。我正在使用此功能自动运行上述脚本,该脚本看起来与您的脚本相似,但是我不断收到奇怪的xrandr错误。
Kyle Strand

您如何启动i3?它有自己的X初始化例程吗?还是您将其放入您的手机.xinitrc并使用startx?我使用xmonad(据我了解,它与i3类似?)使用xmonad启动startx。我的xrandr脚本编写全部在.xinit启动窗口管理器之前完成。这样我就取得了出色的成绩。X已准备就绪,没有其他任何干扰。
克里斯(Chris)

我使用gdm3并已i3选择作为我的帐户的默认桌面环境。
凯尔·斯特兰德

1
不幸的是,由于VBox似乎无法始终如一地为监视器分配名称,因此我想不起来。您可以在xrandr --query(a)检测到设置错误时以及(b)在一切正常运行之后发布输出吗?或至少一切正常工作。
克里斯(Chris)

Answers:


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.