VirtualBox Guest Additions導入で仮想マシンのパフォーマンスを改善

WindowsやMacで手軽にLinuxの仮想環境を構築できるVirtulaBoxですが、ゲストOSの画面をクリックするとカーソルが取られて、ホストOSに帰ってこなくなってしまいます。

特定のキー(Windowsであれば右Ctrl、Macなら左commandキーなど)でホストOSにカーソルが戻るのですが、使い慣れてくるとこの切り換えが結構面倒に感じるようになってきます。

そんな時に便利なのが、VirtulaBox Guest Additions。

Guest Additionsとは

VirtulaBox Guest Additionsを導入すると、

  • マウスカーソルのシームレスな移動
  • シームレスなウインドウサイズの変更
  • 高解像度のデスクトップ画面が使用可能
  • クリップボードの共有
  • ハードウェア3Dアクセラレーションのサポート

などの機能が追加でき、使い勝手が飛躍的に改善します。

ただ、この導入が結構やっかいというか、一筋縄でいかないので導入方法についてサクッとまとめておこうと思います。

なお、Linux資格試験の学習環境の定番となっているCentOS7の仮想環境の場合の導入方法についての解説になります。それ以外のOSについては、導入方法が微妙に異なるため最後にまとめてご紹介します。

Guest Additionsの導入手順

  1. VirtualBoxを最新版にする

VirtualBoxを最新版にします。

本記事執筆時点でのVirtualBoxのバージョンは、6.1.18です。

  1. ゲストOSをアップデート

CentOS7のアップデートを実行します。

# yum update
  1. ゲストOSにGuest Addition導入に必要なパッケージをインストール

ゲストOSがCentOS7の場合、Guest Additionsの導入には、前提として以下のパッケージが必要です。

kernel-headers
kernel-devel
gcc
make

特に確認は必要ないですが、すでに仮想環境に色々なパッケージを導入済みという方もいると思うので念のためrpmコマンドで導入済みかどうかを確認してみましょう。

$ rpm -qa | grep kernel-headers
$ rpm -qa | grep kernel-devel
$ rpm -qa | grep make
$ rpm -qa | grep gcc

コマンド実行後、何も表示されない場合はyumコマンドでパッケージをインストールします。

# yum install kernel-headers
# yum install kernel-devel
# yum install gcc
# yum install make

kernelのバージョンが揃っているかを確認します。

# yum list installed | grep ^kernel
kernel.x86_64 3.10.0-1160.el7 @anaconda
kernel.x86_64 3.10.0-1160.15.2.el7 @updates
kernel-devel.x86_64 3.10.0-1160.15.2.el7 @updates
kernel-headers.x86_64 3.10.0-1160.15.2.el7 @updates
kernel-tools.x86_64 3.10.0-1160.15.2.el7 @updates
kernel-tools-libs.x86_64 3.10.0-1160.15.2.el7 @updates 

行末に@updateがあるもののkernelが同じであればOKのようです。

  1. Guest AdditionsをゲストOSにインストール

ゲストOSとしてCentOS7をどのソフトウェアパッケージでインストールしたかによってGuest Additionsの導入方法が変わります。

サーバー(GUI使用)の場合、Guest Additionsのインストール自体は難しくありません。

ゲストマシンを起動し、VirtualBoxのメニュー「デバイス」→「Guest AdditionsのCDイメージを挿入」をクリックするだけです。

CentOS7などはゲストマシンに自動的にメディアがマウントされ、さらに自動的にターミナルが起動するので、そのままインストールが終了するのを待ちます。

導入に成功すると以下のようなメッセージが表示されます。

リターンキーを押してウインドウを閉じた後で、ゲストOSをリスタートすればGuest Additionsの機能が有効化されます。

Guest Additionsの動作確認

Guest Additionsが正しく動作しているかどうかは以下のコマンドで確認できます。

$ rcvboxadd status
$ systemctl status vboxadd
$ rcvboxadd status
The VirtualBox Additions are not currently running.
$ systemctl status vboxadd
● vboxadd.service Loaded: loaded (/opt/VBoxGuestAdditions-6.1.18/init/vboxadd; enabled; vendor preset: disabled) Active: active (exited) since 火 2021-02-09 09:29:10 JST; 5min ago Process: 691 ExecStart=/opt/VBoxGuestAdditions-6.1.18/init/vboxadd start (code=exited, status=0/SUCCESS) Main PID: 691 (code=exited, status=0/SUCCESS) Tasks: 0 CGroup: /system.slice/vboxadd.service 2月 09 09:28:28 localhost.localdomain vboxadd[691]: VirtualBox Guest Additions: Starting. 2月 09 09:28:28 localhost.localdomain vboxadd[691]: VirtualBox Guest Additions: Building the VirtualBox Guest Additions kernel 2月 09 09:28:28 localhost.localdomain vboxadd[691]: modules. This may take a while. 2月 09 09:28:28 localhost.localdomain vboxadd[691]: VirtualBox Guest Additions: To build modules for other installed kernels, run 2月 09 09:28:28 localhost.localdomain vboxadd[691]: VirtualBox Guest Additions: /sbin/rcvboxadd quicksetup <version> 2月 09 09:28:28 localhost.localdomain vboxadd[691]: VirtualBox Guest Additions: or 2月 09 09:28:28 localhost.localdomain vboxadd[691]: VirtualBox Guest Additions: /sbin/rcvboxadd quicksetup all 2月 09 09:29:02 localhost.localdomain vboxadd[691]: VirtualBox Guest Additions: Running kernel modules will not be replaced until 2月 09 09:29:02 localhost.localdomain vboxadd[691]: the system is restarted 2月 09 09:29:10 localhost.localdomain systemd[1]: Started vboxadd.service.

Guest Additionsが有効になれば、ゲストOSのウインドウとホストOSのデスクトップの親和性が高まり、カーソルが取られることも無くなり、ウインドウサイズも自由に変更できるようになります。

導入前は仮想スクリーンのスケール変更だけが有効ですが、導入後はリサイズのバリエーションが増えます。もちろん、全画面も有効です。

使い勝手やパフォーマンスを上げたい場合は、仮想マシンの各種設定を色々変更してみましょう。以下は自分の設定です。あくまで例ですので同じにする必要はありません。

  • 一般
    高度>クリップボードの共有を双方向に
    高度>ドラッグ&ドロップを双方向に
  • システム
    スクリーン>ビデオメモリーを128MBに変更
    スクリーン>3Dアクセラレーションを有効化にチェック

また、機種によってはパフォーマンスが下がる場合もあるようなので、そう感じる場合は無効にしてください。

トラブルシューティング

ターミナルが起動しない場合やCDイメージが見当たらない場合

ターミナルが起動しない場合やCDイメージが見当たらない場合は、以下のコマンドでCDを/mnt直下にマウントするなどして当該ファイルを実行します。

# mount /dev/cdrom /mnt
# cd /mnt
# ./VboxLinuxAdditions.run

インストールに失敗した場合

必要なパッケージを事前に導入せずにGuest Additionsをインストールしてしまった場合は、モジュールの作成に失敗して以下のようなエラーが出力されます。

Kernel headers not found for target kernel
modprobe vboxguest failed

などのエラーメッセージが含まれています。

主たる原因は、kernel、kernel-headers、kernel-develのバージョンが異なるからで、そのために事前に必要なパッケージの導入が必要になります。

なお、導入に失敗したままの状態で使い続けた場合、起動後にデスクトップで毎回下記メッセージが表示されます。

vboxclient the virtualbox kernel service is not running. exiting

特に害はないのですが、起動の度に表示されて気持ち悪いのでエラーを解決して消しましょう。

ちなみに、導入に失敗したとしても、改めて必要なパッケージを導入してから、Guest Additionsをインストールすればリカバリが可能です。

どうやっても上手くいかない場合

参考までに、ネットで調べたところ、以下のパッケージも導入が必要としているサイトもありました。

dkms
perl
bzip2

kernel-headers kernel-devel gcc makeの4つで上手くいかなかった場合はインストールしてみましょう。

まとめ

無事、Guest Additionsが導入できた暁には、WindowsやMacのデスクトップとの親和性が高まり、画面サイズを任意に変更したり、ホストとゲスト間をシームレスに行き来したり、ファイルのやりとりやクリップボードの共有が可能になります。

自分が講師を務めたスクールでは、オンライン授業に使うLinux環境はスクール貸し出しのWindowsマシンにVirtualBoxでゲストOSとしてCentOS7を導入して使っていますが、Guest Additions導入は指示していません。

導入した方が使い勝手が良いのは間違いありませんが、カリキュラムによりパッケージやプログラムのインストールの順番を意識する必要があるためです。

また、Guest Additionsの導入によりVirtualBoxがどれだけ便利になっても、そのこと自体が資格試験で出題されることはありませんので、導入無しでも特に不便を感じないようであれば、無理に導入する必要はありません。

資格取得のための学習環境構築という点では、WindowsまたはMacとVirtualBoxの組合せの場合、Guest Additionsを導入する方が使い勝手が良くなるので個人的にはオススメしたいです。

参考:ゲストOSがCentOS7以外の場合

CentOS8の場合

kernel-headers、kernel-devel、gcc、makeに加えて、elfutils-libelf-develというパッケージのインストールで問題無く導入できました。

# dnf install elfutils-libelf-devel

Debian系OSの場合

build-essentialdkmslinux-headers-$(uname -r)の3つをインストールすれば良いようです。

$ sudo apt install build-essential dkms linux-headers-$(uname -r)

また、上記以外にgccmakeperlbzip2が必要な場合もあるようです。

参考にさせいていただいたサイト