在虚拟机中调整显示几何?

在Parallels 5.0虚拟机中运行11.04 beta版,但这个问题适用于任何虚拟化软件。
Parallels 5 Linux工具(客户附加组件)不适用于10.10和11.04,我也不需要它们。我喜欢虚拟机的集成方式。唯一需要调整的是屏幕几何尺寸。
系统->首选项->显示器中的选项都不能完美适配我的显示器。我需要的分辨率是1080 x 1920(9:16)或1920 x 1080(16:9)。
许多不同的分辨率可以使用(请参见下面的屏幕截图),其中包括:
- 1680 x 1080(水平太窄,垂直稍微有点短) - 1920 x 1200(水平完美,垂直稍微有点高)
我如何手动调整屏幕分辨率(显示器尺寸)?

我迄今为止尝试过的方法

$ cvt 1920 1080
# 1920x1080 59.96 Hz (CVT 2.07M9) hsync: 67.16 kHz; pclk: 173.00 MHz
Modeline "1920x1080_60.00"  173.00  1920 2048 2248 2576  1080 1083 1088 1120 -hsync +vsync
$ sudo xrandr --newmode "1920x1080"  173.00  1920 2048 2248 2576  1080 1083 1088 1120 -hsync +vsync
xrandr: Failed to get size of gamma for output default

$ cvt 1080 1920 
# 1080x1920 59.96 Hz (CVT) hsync: 119.26 kHz; pclk: 176.50 MHz
Modeline "1080x1920_60.00"  176.50  1080 1168 1280 1480  1920 1923 1933 1989 -hsync +vsync
$ sudo xrandr --newmode "1080x1920"  176.50  1080 1168 1280 1480  1920 1923 1933 1989 -hsync +vsync

$ sudo xrandr -q
xrandr: Failed to get size of gamma for output default
Screen 0: minimum 640 x 480, current 1920 x 1200, maximum 1920 x 1200
default connected 1920x1200+0+0 0mm x 0mm
   1920x1200       0.0* 
   1600x1200       0.0  
   1680x1050       0.0  
   1400x1050       0.0  
   1280x1024       0.0  
   1440x900        0.0  
   1280x960        0.0  
   1280x800        0.0  
   1024x768        0.0  
   800x600         0.0  
   640x480         0.0  
  1920x1080 (0x11d)  173.0MHz
        h: width  1920 start 2048 end 2248 total 2576 skew    0 clock   67.2KHz
        v: height 1080 start 1083 end 1088 total 1120           clock   60.0Hz
  1080x1920 (0x11e)  176.5MHz
        h: width  1080 start 1168 end 1280 total 1480 skew    0 clock  119.3KHz
        v: height 1920 start 1923 end 1933 total 1989           clock   60.0Hz

2个新的分辨率在监视器首选项图形用户界面中没有显示出来: enter image description here 尝试Takkat的解决方案:
以下是我所做的和得到的结果:
$ gtf 1920 1080 60 -x

  # 1920x1080 @ 60.00 Hz (GTF) hsync: 67.08 kHz; pclk: 172.80 MHz
  Modeline "1920x1080_60.00"  172.80  1920 2040 2248 2576  1080 1081 1084 1118  -HSync +Vsync

$ sudo xrandr --newmode "1920x1080_60.00"  172.80  1920 2040 2248 2576  1080 1081 1084 1118  -HSync +Vsync

$ sudo xrandr --addmode default 1920x1080_60.00

$ xrandr 
xrandr: Failed to get size of gamma for output default
Screen 0: minimum 640 x 480, current 1680 x 1050, maximum 1920 x 1200
default connected 1680x1050+0+0 0mm x 0mm
   1920x1200       0.0  
   1600x1200       0.0  
   1680x1050       0.0* 
   1400x1050       0.0  
   1280x1024       0.0  
   1440x900        0.0  
   1280x960        0.0  
   1280x800        0.0  
   1024x768        0.0  
   800x600         0.0  
   640x480         0.0  
   1920x1080_60.00   60.0  

我也尝试了gtf 1920 1080 60 -x
在这两种情况下,我无法切换到该分辨率,并且出现以下错误信息:
  • 无法为CRTC 262设置配置

enter image description here

所有其他的分辨率都可以正常使用。

1你安装了虚拟机增强工具吗?(如果使用 VMware,则为 open-vmware-tools) - OpenNingia
@OpenNingia,我正在Parallels 5上安装它。希望避免使用客户机附加组件。我只需要改变屏幕分辨率。 - Aleksandr Levchuk
@Alexsandr Levchuk,Guest Additions、VMware Tools等的目的是为了提供更好的图形驱动支持、键盘/鼠标集成以及其他一些杂项硬件和网络支持。 - Jeremy Bicha
@jbicha,这就是为什么我不需要安装客户机增强工具 - 对我来说,所有提到的问题都可以在没有安装客户机增强工具的情况下正常工作。每次内核更新时,客户机增强工具都会出现故障。在Parallels 5中,它们根本不适用于Ubuntu 10.10和11.4。 - Aleksandr Levchuk
除了显卡驱动程序运行不正常,这也是你提出这个问题的原因 - Jeremy Bicha
@jbicha,你是说没有安装增强功能就无法调整屏幕尺寸吗?我对此表示怀疑。我可以将其调大到1080 x 1920以上或者缩小,但是无法调整到中间的某个尺寸吗? - Aleksandr Levchuk
我相信使用Guest Additions(和VirtualBox)是使其正常工作的最好且最简单的方法。像你之前已经尝试过的那样,使用randr可能也能起作用,但我对randr不太熟悉。 - Jeremy Bicha
这里是Parallels 5 Desktop for Mac,但没有序列号的话,它只能使用30天。你仍然可以用它来测试一些东西。 - Aleksandr Levchuk
6个回答

在Oracle Virtual Box中,您可以通过拖动窗口或选择全屏模式来调整虚拟屏幕分辨率,在安装了Guest Additions之后。无需对xorg.conf进行任何操作。XServer 1.10(包含在11.04中)和Unity 3D仅在Virtual Box >=4.0.6中运行。
1. 使用鼠标调整屏幕大小
通过使用鼠标调整Virtual Box窗口的大小,可以实现任何屏幕分辨率,最高可达主机屏幕分辨率。
2. 使用预定义的标准屏幕尺寸
如果您需要一个固定(标准)的分辨率,您也可以选择“系统设置 -> 显示器”(适用于11.04版本)或“显示器”(适用于12.04版本),以选择一些固定的分辨率(这里是12.04版本的示例)。

enter image description here

  • 要获得最大的主机屏幕分辨率,您需要在Virtual Box中运行全屏模式(Host+F
  • 要获得固定的主机屏幕分辨率,我们需要在Virtual Box管理器的View菜单中禁用自动调整大小的客户机显示HOST+G)。

3. 使用 xrandr 定义新的几何形状

如果您需要一个不在监视器分辨率列表中的固定几何形状,则必须使用xrandr定义一个新的分辨率:

首先,我们使用gtf来计算可能分辨率的模型线:

gtf <xres> <yres> <refresh> [-x]

给定x分辨率、y分辨率和刷新率的期望值。标志“-x”是默认值,可以省略。对于60 Hz的纵向分辨率480x640,你将获得以下输出:
$ gtf 480 640 60 -x
$ 480x640 @ 60.00 Hz (GTF) hsync: 39.78 kHz; pclk: 24.82 MHz Modeline "480x640_60.00" 24.82 480 504 552 624 640 641 644 663 -HSync +Vsync

从这里我们可以复制并粘贴模型行,将其添加到xrandr已知分辨率列表中。
xrandr --newmode "480x640_60.00" 24.82 480 504 552 624 640 641 644 663 -HSync +Vsync

并为Virtual Box监视器添加这个。
xrandr --addmode VBOX0 480x640_60.00

VBOX0 替换为适当的监视器,如果您已经设置了多个监视器的虚拟盒子(或者驱动程序报告的任何其他输出名称)。
我们现在可以按照上述描述切换到新定义的几何形状(2.)。

3Virtual Box 4.0 在屏幕尺寸方面有一个新的“缩放模式”。http://www.virtualbox.org/wiki/Changelog - djangofan
2我强烈推荐使用VirtualBox(VB);它适用于任何操作系统,不仅限于Mac。它是开源的,因此如果您希望Ubuntu成为主机操作系统,它可以在Ubuntu软件仓库中找到,并且如果您希望Ubuntu成为客户端操作系统,guest-utils也可以在软件仓库中找到(但请确保guest-utils版本号与VB版本匹配)。由于大多数人没有安装Parallels,所以很难从Ubuntu用户那里获得社区支持。 - Jeremy Bicha
亲爱的@Takkat,我卡在最后一部分 - xrandr --addmode VBOX0 480x60_60.00。我没有VBOX0。我在哪里可以找到可用显示器的列表? - Aleksandr Levchuk
@Takkat,谢谢你解释如何查找显示器(我的是“默认”)。我进展了一些,但仍然遇到了一个障碍。请看我在问题中的更新。 - Aleksandr Levchuk
@Takkat,我所有的操作都是在全屏模式下进行的。 - Aleksandr Levchuk
@Takkat,我没有安装增强功能。也许你可以在没有增强功能的虚拟机上重复我所做的操作,以便复现我遇到的“CRTC 262”错误。 - Aleksandr Levchuk
@Takkat,我的视频内存足够了。我甚至可以设置1920x1200的分辨率,这已经超出了我的实际屏幕尺寸。我不得不在虚拟化软件Parallels中调整视频设置。我将其设置为最大值(256MB)。 - Aleksandr Levchuk
@Takkat,在Virtual Box中,共享文件夹功能会出现问题,但这是另一个话题。我用Parallels使用了一年,然后用Virtual Box使用了6个月,现在又回到了Parallels。我切换回Parallels的原因是Ubuntu开始冻结(也许1GB RAM不够)。Parallels 5不会冻结,但它的"Guest Additions"无法安装在Ubuntu 10.10及更高版本上。这是一种退化情况,但我认为我不是唯一一个想知道如何在没有Guest Additions的Ubuntu虚拟机中调整显示尺寸的人。 - Aleksandr Levchuk
@Takkat,我把奖励颁给你,因为你可能是其他答案中最接近的。然而,我的问题仍然未得到解答 - Aleksandr Levchuk
@Aleksandr Levchuk:谢谢你 :) 赏金问题没有得到真正解决并不罕见(我自己也遇到过),但它们确实会被查看(接近1千次)。我同意,如果没有GA,改变屏幕分辨率将是一个很好的功能。然而,只要GA工作正常,可能没有多少人需要它。我们可以尝试一种可能的解决方案,即使用EFI BIOS引导并在那里设置几何图形。然而,我不太清楚如何做到这一点,而且我也不确定虚拟机是否会保持稳定。1 GB的虚拟RAM足以运行Ubuntu,我从未遇到过崩溃。为了减少混乱,我删除了之前的评论。 - Takkat
非常好的答案,第三步“使用xrandr方法定义新几何图形”也帮助我解决了在Mac上运行VMware Fusion 4.1中Ubuntu 12.04无法显示1920 x 1080选项的问题。 - DanC
我在Virtual Box 6.1下安装了Ubuntu 20.4,但是在进行第二步之后,重新启动后分辨率又恢复到之前的设置。有没有办法使这个更改永久生效? - thanos.a

在VirtualBox中,我使用了一个简化版本的经典xorg.conf文件。
Section "Monitor"
    Identifier      "Monitor0"
    HorizSync       30.0 - 96.0
    VertRefresh     50.0 - 160.0
EndSection

Section "Device"
    Identifier      "Device0"
    Driver          "vesa"
EndSection

Section "Screen"
    Identifier      "Screen0"
    Monitor         "Monitor0"
    Device          "Device0"
    DefaultDepth    24
    SubSection "Display"
        Depth       24
        Modes       "1280x1024"
    EndSubSection
EndSection

Section "ServerLayout"
    Identifier      "Layout0"
    Screen          "Screen0"
EndSection

我不知道你是否需要为TFT提供HorizSync和VertRefresh,但无论如何,请不要复制我的值!

可能不再需要了。VirtualBox 4.0有一个新的“缩放模式”可以调整屏幕大小。http://www.virtualbox.org/wiki/Changelog - djangofan
这对我没有起作用。在放置xorg.conf文件并重新启动后,屏幕变黑了。通过按下ctrl + alt + f1键恢复了。 - Aleksandr Levchuk


只是简要总结一下一个简洁的工作答案。在18.04版本中测试了lubuntu-desktop:
  1. 在虚拟机上安装增强功能sudo apt-get install virtualbox-guest-dkms
  2. 重启虚拟机:sudo shutdown -r now
  3. 登录虚拟机后,将VirtualBox窗口调整为所需大小。(窗口内部的虚拟机屏幕尚未自动调整大小。)
  4. 在虚拟机上,进入首选项 -> 显示器设置 -> 选择自动 -> 应用 -> 确定

(如果已经安装了增强功能,可以跳过第1步。首先检查sudo lsmod | grep vbox是否返回任何内容。)



Virtual Box 4.0在屏幕尺寸方面有一个新的“缩放模式”。http://www.virtualbox.org/wiki/Changelog - djangofan

我在Windows8(主机Ubuntu)上遇到了这个问题。它无法根据外接显示器的尺寸进行缩放。
在Virtualbox中,点击文件,首选项[CTRL]+[G],选择显示,然后选择最大客户屏幕尺寸-自动。
问题解决。 VirtualBox - 设置