如何在VirtualBox虚拟机中安装Guest Additions?

我最近在Oracle的Virtualbox上安装了Ubuntu。现在我想安装客户机增强功能。 我启动了Ubuntu客户机操作系统,点击"设备",选择"安装增强功能"。什么都没发生,我在桌面上也看不到CD图标。 我该如何解决这个问题?

5安装完成后,请点击此处查看如何检查是否成功 - Evgeni Sergeev
13个回答

如果您在VirtualBox虚拟机中安装Ubuntu时遇到问题,因为安装程序窗口不适合低分辨率屏幕大小,您可以使用Alt+F7移动窗口。

从存储库安装客户附加组件

如果我们从存储库安装了Virtual Box的OSE版本,我们可以在客户机中添加来自存储库的客户附加组件。这将安装与从存储库获取的Virtual Box版本相匹配的客户附加组件。不建议在从Oracle存储库获取的较新版本的Virtual Box中安装这些附加组件(请参见下文)。

或者,我们可以在主机Ubuntu中安装软件包virtualbox-guest-additions-iso

sudo apt-get install virtualbox-guest-additions-iso

将包含OSE版增强功能CD的.iso文件安装到主机目录/usr/share/virtualbox/VBoxGuestAdditions.iso中。在虚拟机的设置中将此.iso文件挂载为光盘。然后,在客户机中您将可以访问带有安装程序的光盘。

通过Virtual Box Manager安装增强功能

如果增强功能无法构建,我们可能需要安装Linux内核头文件(参见如何安装内核头文件?)或者build-essential Install build-essential工具。同时,建议安装dkms Install dkms(请参阅下面的注释4)。您可以在终端中运行以下命令来安装两者:

sudo apt install build-essential dkms
选择“设备 -> 安装增强功能”(或从虚拟盒管理器中按下“Host”键+“D”键),增强功能光盘的iso文件将会被加载,但不会在您的客户操作系统中安装。要进行安装,我们需要以root权限运行安装程序脚本“VBoxLinuxAdditions.run”,或通过自动运行提示执行(见下文)。

GNOME Shell

安装Guest Additions后,我们将在桌面上看到一个CD图标,只要虚拟驱动器被挂载:

enter image description here

下一步是在已挂载的CD上以root身份运行autorun.sh脚本,方法是打开驱动器并点击“运行软件”按钮。这将构建并安装所需的vbox内核模块。

统一

增强功能已作为虚拟 CD 挂载在启动器上可见:

enter image description here

如果系统设置为自动运行CD,它应该只是打开以下的自动运行对话框(如果没有,请选择CD符号,选择打开,然后选择打开自动运行提示)。

enter image description here

在输入了您的根访问凭据后,虚拟机增强功能将会根据终端输出进行构建。

enter image description here

按下 回车 键关闭终端。
注意1: 需要重新启动您的虚拟机操作系统才能使增强功能生效。 注意2: 在某些系统中,虚拟机增强功能的CD图标可能不会显示在桌面上,但可以从“位置”菜单中访问。如果CD仍然不在那里,您可能需要在Virtual Box Manager的“存储”菜单中手动添加VBoxGuestAdditions.iso作为光驱。在Ubuntu主机中,磁盘映像位于/usr/share/virtualbox/VBoxGuestAdditions.iso。 注意事项3 在某些系统中(例如运行Xubuntu的虚拟机),我们可能没有挂载CD时的自动运行提示。此时,我们可以通过打开挂载的虚拟机增强.iso文件所在的终端,并运行sudo ./VBoxLinuxAdditions.run来安装虚拟机增强功能。在Lubuntu或Ubuntu Server虚拟机中,我们还需要在客户系统中安装GNU C编译器(gcc)和make实用程序,以便能够编译虚拟机增强功能。 注意事项4 在客户操作系统中运行DKMS将在客户内核更新后保留安装的Guest Additions。这不是Guest Additions的先决条件,但如果使用它,应该在我们安装Guest Additions之前安装。

从终端安装Guest Additions

如果Guest Additions没有正确安装,我们可能无法启动到图形界面。在这种情况下,我们需要按住Shift键启动,以访问Grub菜单,在那里我们可以访问一个root shell,如下面的问题所示(我们确实需要将文件系统挂载为读写才能继续):

Guest Additions的.iso文件需要从Virtual Box Manager安装到/dev/cdrom上(请参见上文)。然后,我们可以通过输入以下命令来安装Guest Additions:

mount /dev/cdrom /mnt              # or any other mountpoint
cd /mnt
./VBoxLinuxAdditions.run
reboot

移除客户机增强功能

如果在安装客户机增强功能时出现问题,或者在安装后客户机操作系统无法启动,我们可能需要移除这些增强功能。可以通过在root shell中运行位于guest /opt目录下的卸载脚本来完成此操作。

cd /opt/<VirtualBoxAdditions-x.x.xx>/
sudo ./uninstall.sh
x.x.xx 替换为您当前的客户附加版本。

14在尝试在Ubuntu服务器上安装Guest Additions时,我遇到了这个答案。如果你需要在服务器上安装,还有一步是缺少的:首先运行sudo apt-get install dkms。(参考http://www.virtualbox.org/manual/ch04.html#idp19765808) - Charles Roper
1我尝试了你提供的解决方案,将Ubuntu 12.10服务器作为客户机,Mac OS X作为主机。虚拟机版本是4.2.6。然而,我无法使共享文件夹正常工作。似乎客户机附加组件没有起作用。即使在"设备" > "安装增强功能"中也无法成功。甚至virtualbox-guest-additions软件包也没有帮助。每次尝试运行GuestAdditions.iso都无法在/media/cdrom下找到该iso文件。请给予指导。 - Kim Stacks
1@kimsia: 你需要先在服务器上挂载这个.iso文件。然后你可以使用 sudo ./<挂载点>/VBoxLinuxAdditions.run 命令来安装GA。 - Takkat
@Takkat,这个安装无法工作。另外,好消息是,我终于找到了解决方法,使一切都能正常运作起来了。http://superuser.com/a/527508/8184,所以非常感谢你的回答,非常感激 :) - Kim Stacks
@kimisa:请注意,你提供的方法不会安装最新的客户机增强功能,而是安装从Ubuntu软件源中可用的版本(对于12.10来说是4.1.18,对于13.04来说是4.1.22)。如果你的主机Virtual Box版本较新,则不建议运行旧版本的客户机增强功能(但它们大多仍然可以正常工作)。 - Takkat
@gertvdijk 谢谢你的努力,但我故意省略了标题和构建部分,因为在纯净默认的Ubuntu安装中我们不需要这些。GA可以正常构建,无需采取任何进一步的步骤(这只适用于Xubuntu和Lubuntu)。DKMS应该在更新内核时有所帮助,但出于某些原因,我们仍然必须在内核更新后重新构建GA。 - Takkat
好的,这根本不起作用。在Ubuntu 32位和64位版本14.04上进行了测试。并且只有在http://askubuntu.com/questions/22743/how-do-i-install-guest-additions-in-a-virtualbox-vm/99479#99479上才有效。 - Kangarooo
请指定需要哪种版本的翻译。 - Karl Morrison
对不起,我必须给这个打-1分。看起来是一个"什么都有"的集合。 - Alex Gordon
2@IIIIIllllllllIlllllIIIIIIIIlll: 当然没问题 - "规范"问答就是要涵盖所有内容。有什么遗漏的,有什么过时的吗? - Takkat
为了在Ubuntu 14.04.4 Server上构建Guest Additions,我首先需要执行sudo apt-get updatesudo apt-get install make gcc命令。 - Marko Bonaci
在Ubuntu 16.04上,当我执行apt-get install virtualbox-guest-additions-iso命令时,它建议先卸载VMware。这似乎有危险,我会丢失我的现有虚拟机的数据或设置吗? - rubo77
@rubo77 这是由vmware引入的依赖问题...绝对与安装客户附加ISO文件无关。 - Takkat
是的,因为这是消息,如果您尝试在主机系统中安装客户附加ISO,这似乎是错误的。在我在客户系统中安装ISO之后,它起作用了。 - rubo77
@rubo77 这是vmware依赖项中的一个错误。在guest中安装一个安装程序ISO文件只是浪费空间。 - Takkat
所以你应该描述一下如何解决这个bug。 - rubo77
@rubo77 或者我们可以按照上面链接的另一个答案中所说,在虚拟机中安装guest-utils。不管怎样,从Oracle仓库安装定期更新的VirtualBox版本对我来说效果更好。 - Takkat
@Takkat 根据您于2013年6月26日的评论,Xubuntu怎么样?具体来说,如果我在GA脚本之前加上sudo apt-get install build-essential linux-headers-virtual dkms以防万一,这样安全吗?(注意:linux-headers-virtual包含linux-headers-generic作为依赖项,而后者与内核版本同步,与linux-headers-$(uname -r)不同。)例如,我读到它可能会导致类似这样的依赖关系问题。 - Evgeni Sergeev
@EvgeniSergeev:我从来没有在任何虚拟机中手动安装过头文件,但如果出于任何原因你必须这样做,那么在Ubuntu上,linux-headers-virtuallinux-headers-generic只是指向适当内核头文件的过渡包。通过安装linux-headers-$(uname -r)也可以获得这些包,不应该有任何区别,也不会有依赖问题。 - Takkat
1不需要在主机上安装ISO文件。你可以直接在虚拟机上操作,然后使用mount命令挂载它。 - sudo
1非常感谢。我使用了以下组合方法:1)我在VB中使用CD将.iso映射到其中,2)使用终端进入/mnt目录并执行*.run安装文件,然后重新启动。希望这个增强功能的麻烦事能一劳永逸地解决。 - Beezer

你也可以尝试以下方法(在更新管理器将其删除后,我重新安装了Guest Additions并成功解决了问题)。解决方案在这里找到:

http://www.unixmen.com/install-guest-addition-in-ubuntu-1010-maverick-meerkat-fix/

总结一下:
sudo apt-get update
sudo apt-get install build-essential linux-headers-$(uname -r)
sudo apt-get install virtualbox-ose-guest-x11
这个方法找到并更新了正确版本的VirtualBox Guest Additions,我的系统似乎又正常工作了。我认为如果从菜单项安装Guest Additions失败,这个方法也会起作用。 还有一件事需要注意。我最初尝试在fish shell下运行,确保你使用的是bash(即在开始之前在终端中输入“bash”)。
注意:在较新的系统中,该命令已更改为
sudo apt-get install virtualbox-guest-x11

你的回答帮了我很多,尽管我是在全新安装的Ubuntu服务器上进行安装。非常感谢。http://superuser.com/questions/527507/use-ubuntu-server-as-web-server-on-mac-os-x-via-virtualbox - Kim Stacks
18在最新的系统上,该软件包被称为virtualbox-guest-x11。我认为这应该是被接受的答案,因为通过ISO安装的Guest Additions可能不会自动更新,而使用apt-get安装的则不同。 - krlmlr
2请注意,我在全新安装的14.04系统上没有安装 build-essentials,并且已经安装了linux-headers。因此,在客户系统上运行 sudo apt-get install virtualbox-guest-x11 是我需要做的全部操作。 - pcworld
1我喜欢使用这种方法是因为上述的原因。然而,在我的OSX主机(10.9.3)和VirtualBox(4.3.12)上的Ubuntu 12.04客户机上,它对我不起作用。我不得不使用ISO安装http://askubuntu.com/a/22745/24203(否则会出现“没有这样的设备错误”http://stackoverflow.com/questions/3492466/how-to-mount-virtualbox-shared-folder-on-ubuntu-server-10-04-gui-sbin-mount-vb)。 - IsaacS
1好的,这对我有效。Ubuntu 32位和64位版本14.04。 - Kangarooo
对我也有效,Ubuntu 14.04 64位,主机Win7 64位。 - Edu Ruiz
奇怪的是,每次我重新启动虚拟机和主机后,我都需要重新安装虚拟机才能正常使用无缝模式。 - Edu Ruiz
sudo apt-get install virtualbox-guest-x11,我正在使用这个版本,它很好用。 - user84592
命令"sudo apt-get install build-essential linux-headers-$(uname -r)"对我来说没有起作用。那个(uname -r)的东西也没用。 - Berit Larsen
我现在还不能复制粘贴我输入的内容,但是这里是: sudo apt-get install virtualbox-guest-x11 xorg-video-abi-15 xserver-xorg-core libcheese* - Gavin Palmer

在客户操作系统中,安装软件包virtualbox-guest-dkms。例如,使用终端应用程序,输入sudo apt-get install virtualbox-guest-dkms

2在Ubuntu 14 LTS上对我有效。 - Jongosi
2适用于我在Ubuntu 16.04上工作。 - InvisibleWolf
在Ubuntu 16.04.1上对我来说很有效。安装完成后,请确保重新启动计算机。一切运行顺畅。 - Giora Guttsait
在16.04.4上工作过(虽然还需要调整一下图形设置...) - Ben Bolker
3在Ubuntu 18.0.4.1LTS上对我有效。然而,我仍然无法从主机复制和粘贴内容到虚拟机中(使用这里提到的任何其他方法也不行);按理说,这个问题应该在此之后解决了吧? - Carlo Wood
像魔法一样好用,你真棒!@ChrisJ <3 - Swadhikar
1适用于Ubuntu 20.04 LTS。 - Javier G.Raya

以下是在虚拟机内安装VirtualBox Guest Additions内核模块的手动步骤:
  1. 下载ISO文件,例如:

    wget http://download.virtualbox.org/virtualbox/5.0.20/VBoxGuestAdditions_5.0.20.iso -P /tmp
    
  2. 挂载ISO文件:

    sudo mount -o loop /tmp/VBoxGuestAdditions_5.0.20.iso /mnt
    
  3. 运行安装程序(在sh后面添加-x进行调试):

    sudo sh /mnt/VBoxLinuxAdditions.run
    
要找到正确的ISO文件版本,请在以下链接中检查:http://download.virtualbox.org/virtualbox/
如果您正在使用Vagrant,只需按照以下命令进行安装就会简单得多:
vagrant plugin install vagrant-vbguest
vagrant up
vagrant vbguest

1这些步骤最终让我拥有了一个全屏终端。我的主机操作系统是Windows 7,VirtualBox版本是5.1。我的客户操作系统是Ubuntu 16.04.1 LTS。我还在/etc/default/grub文件中添加了以下两行内容:GRUB_GFX_MODE=1600x1200和GRUB_GFXPAYLOAD_LINUX=keep。 - nicholsonjf
绝对是一个被低估的答案——非常直接,可以让你安装比apt仓库中提供的更新版本的Guest Additions。而且,无需为你的虚拟机添加虚拟CD-ROM驱动器! - bonh
2最佳答案。我不知道为什么其他答案都要采取不必要的步骤,比如从源代码构建或创建虚拟驱动器。 - sudo
我在我的Vagrant配置脚本中添加了一个变体。运行得非常完美。 - ddoxey
太棒了!使用Vagrant,我发现我可以在我的Vagrantfile中将vagrant-vbguest指定为插件:这里我已经将它作为列表的一部分进行了指定(以便在需要时可以指定其他插件), config.vagrant.plugins = [ "vagrant-vbguest", ] - Andrew Richards

在由Oracle提供的.iso文件中,标准的"virtualbox-guest-additions"软件包具有适用于不同客户操作系统的通用工具... 然而,Ubuntu有自己专门的Ubuntu特定的Guest Addon软件包... 命名为virtualbox-ose-guest-dkms和..-x11和..-utils。 这些'virtualbox-ose-guest-*'软件包是DKMS感知的... "(DKMS是一个旨在允许单独升级内核模块而无需更改整个内核的框架。)" 这是我5-6个月前关于这个问题提出的问题的链接... 如何使Compiz在VirtualBox虚拟机中工作

我收到了“无法找到软件包virtualbox-ose-guest-dkms”的错误信息。我需要添加apt仓库吗? - Dan Dascalescu
1我认为在较新的Ubuntu上,你只需要安装virtualbox-guest-x11软件包,它会自动引入其他所需的依赖项。 - Lambart
3现在它被称为 virtualbox-guest-dkms。顺便说一下,这是我在此线程中唯一可接受的答案,因为这是我的VBox中唯一使客户附加组件工作的方法。我提前将我的用户添加到了vboxusers组,这可能有帮助吗? - Erikas

以下是我运行的步骤,最终成功了。但正如用户“pcworld”在上面所说,可能只有最后一个命令是必需的。我永远不会知道,但我想分享一下,以防对其他人有帮助:
sudo apt-get install virtualbox-guest-additions-iso
sudo apt-get update 
sudo apt-get dist-upgrade
sudo apt-get install virtualbox-guest-x11
不要忘记在“显示”设置部分中,将您的VirtualBox实例设置为使用128MB视频内存和启用3D加速,以获得良好的性能。

在vagrant中安装docker后,我遇到了Guest Addition的错误。通过运行sudo apt-get dist-upgrade解决了问题。谢谢Clay。 - Robert Gabriel

这对我来说在Ubuntu Server 14.04的虚拟机(无GUI)上有效: 编辑:在Ubuntu Server 15.04和16.04上也有效。 1)安装dkms。从虚拟机中运行:
sudo apt-get install dkms
2) 从VirtualBox虚拟机窗口菜单中选择:设备 --> 插入Guest Additions CD镜像... 3) 使用blkid命令来识别CD-ROM设备。在客户机中运行以下命令:
sudo blkid
输出中的一行应该是这样的:
/dev/sr0: LABEL="VBOXADDITIONS_4.3.16_95972" TYPE="iso9660"
第一部分(/dev/sr0)是 CD-ROM 设备的名称。 4) 挂载 CD(将上述设备名称中的 /dev/sr0 替换为实际设备名称):
sudo mount /dev/sr0 /media/cdrom/
5) 运行Guest Additions安装程序:
sudo /media/cdrom/VBoxLinuxAdditions.run
6) 重新启动客户机。

3sudo sh /media/cdrom/VBoxLinuxAdditions.run 这里需要使用 sh 命令是因为 CD 没有执行权限被挂载上了。 - Steve Pitchers
你好 @DavidLevesque ,我在16.04上尝试过,但不幸的是无法正常运行。我还尝试了--nox11参数。你有任何想法吗? - efkan
@efkan 除非你提供更多细节,否则我一无所知。对我来说,在Ubuntu 16.04上运行正常。 - David Levesque
@DavidLevesque 你说得对 :) 我在Windows 10上使用VirtualBox v5.0.26。然后我在VirtualBox中安装了Ubuntu Server 16.04.1。(服务器没有X Window系统)接着,我按照这里的步骤进行操作:http://en.ig.ma/notebook/2012/virtualbox-guest-additions-on-ubuntu-server。然后我重新启动并尝试执行复制粘贴操作,但是我看不到任何动作。谢谢。 - efkan
@efkan 我猜在真正的控制台上不起作用。 - Polluks

这个过程非常简单。 在Virtual Box菜单中选择设备 > 插入增强功能CD映像...。 接下来会在您的Ubuntu桌面上出现以下弹窗:

guest addition popup

选择运行,Guest Additions将自动安装。

2在我使用的Ubuntu 14.04 LTS上,安装在Windows 10上的Oracle VM 5.0上运行良好。只需两个点击.....谢谢! - Sym-Sym
2这是最佳答案,因为它确保了客户附加组件已更新并适用于您特定版本的VirtualBox。Ubuntu的软件包和其他答案中的wget URL可能已过时。 - Chai T. Rex
1适用于我在Ubuntu 18.04上工作 - randow_user_1234

我认为现在(2020年4月27日)使用最新的稳定版Ubuntu(20.04)和当前版本的Virtualbox(6.1.6),正确的做法只需按照以下步骤进行: sudo apt install virtualbox-guest-dkms virtualbox-guest-x11 virtualbox-guest-utils 我刚刚尝试了这个方法,确实有效。 我猜这个问题可能不会引起太多关注,但至少如果有人搜索20.04,他们可能能找到一些更近期的信息。;)

1这个相当大:需要下载457个新软件包,总共154MB,额外需要867MB的磁盘空间。我建议添加--no-install-recommends选项,这样只需下载30MB并占用300MB的磁盘空间。 - rubo77
1virtualbox-guest-utils 不需要。 - rubo77
@rubo77 可能是真的。你确定吗?这是用来做什么的?看起来 mount.vboxsf 可能是用于挂载共享文件夹的?但大部分依赖关系都在其他两个上。 - Warkwark
1不确定了,是否还需要。 - rubo77

必须安装virtualbox-guest-additions软件包。此外,可能会出现什么都没有发生的情况,但是“安装增强功能”按钮只是挂载光盘。您应该打开文件管理器(Nautilus / Dolphin),选择“CD设备”并运行安装程序。