虽然有关于此事的几个存在的问题(从最有用的答案是这样),并在其他论坛不同的线程,我不能可靠地设置我的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
gnome
并gdm3
安装- 首选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
(这似乎是为了防止下面列出的“字体”错误)- 使用
--right-of
或--left-of
设置--output
s时(因为默认情况下通常会镜像屏幕)
错误讯息
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的“自动调整访客显示”功能,然后注销并使用再次登录i3
,xrandr
通常会在自动生成的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
会话吗?
可能相关的问题
- 我的鼠标指针不能可靠地与似乎检测到单击的位置正确对齐;单击通常发生在指针的下方和右侧。一旦我正确配置了屏幕,尽管当前屏幕具有正确的分辨率,但指针仍然略微偏离,该问题通常会消失。
- 当我设法获得正确的分辨率时,屏幕有时会闪烁。这很烦人但是很宜居。知道是什么原因或是否可以解决?
xrandr
错误。
.xinitrc
并使用startx
?我使用xmonad(据我了解,它与i3类似?)使用xmonad启动startx
。我的xrandr
脚本编写全部在.xinit
启动窗口管理器之前完成。这样我就取得了出色的成绩。X已准备就绪,没有其他任何干扰。
gdm3
并已i3
选择作为我的帐户的默认桌面环境。
xrandr --query
(a)检测到设置错误时以及(b)在一切正常运行之后发布输出吗?或至少一切正常工作。