VirtualBoxでスクリーンショットを撮る方法 - VBoxManageコマンド活用チュートリアル
仮想マシン上での各種インストールや操作の記録として、スクリーンショットを撮りたい場面は多いものです。VMwareシリーズの仮想化製品にはシステムメニューにスクリーンショット機能が組み込まれているため、非常に簡単に撮影できます。ところが、VirtualBoxにはそのようなオプションが存在しません。そのため、ホストOS側のユーティリティ、つまり各種スクリーンショットソフトやPrtScrnキー、Alt+PrtScrnなどのキーコンビネーションに頼らざるを得ません。操作自体はそれほど難しくありませんが、最大の問題は、VirtualBoxがインターフェースの一部をゲストOSの画面領域として扱ってしまう点にあります。その結果、スクリーンショットはどうしてもきれいに撮れません。
つまり、課題はこう整理できます。フォルダ共有を設定したり、仮想マシン内からホストへ画像をコピー&ペーストしたりすることなく、外部からゲストOSのスクリーンショットを撮りたい。しかも、画像に写り込んでしまうVirtualBoxの内側の枠線を除外した状態で撮影したい。これは可能なのでしょうか?答えは「はい」です。バージョン4.0以降なら実現できます。それでは詳しく見ていきましょう。
従来のスクリーンショット撮影の課題
SnagIt、IrfanView、GIMP、GNOME Screenshot、KSnapshotなど、どのツールを使っても結果は同じです。VirtualBoxウィンドウを撮影したことが一目瞭然となる、上下の邪魔な枠線が付いてしまいます。例えば、次のような感じです。
これは非常に面倒です。必要なのは青い矩形部分だけなのに、その領域を手動で切り取る(クロップする)作業が発生し、貴重な時間を浪費してしまいます。実は、もっと簡単な代替手段があります。ただし、VirtualBoxのコマンドラインを使用する必要があります。
解決策:コマンドラインからVBoxManageを使う
この機能はバージョン4.0以降で利用可能です。それ以前のバージョンでは動作しないため、注意してください。実行するコマンドは次の通りです。
VBoxManage controlvm <仮想マシン名> screenshotpng <ファイル名>.png
これがすべてです。<仮想マシン名>には対象の仮想マシンの名前を、<ファイル名>には後で識別しやすい任意の文字列を指定します。
以下はUbuntu Lucidでの実行例です。
スクリプトによる自動化
この手順は部分的に自動化できます。毎回手動でコマンドラインを開いてコマンドを打ち込む必要はありません。まず、コマンドを実行してくれるスクリプトを作成できます。ここでは、Windowsのバッチファイル(BAT)とLinuxのBASHを使った例を紹介します。次に、画像に汎用的な識別子を使えば、毎回名前を手入力する手間が省けます。環境変数RANDOMやタイムスタンプを利用するのが良い選択肢でしょう。さらに、デスクトップやアプリケーションパネルにショートカットを作成し、ホットキーの組み合わせを割り当てることも可能です。
Windowsの例
Windowsでコマンドラインを使うのは馴染みがないかもしれませんが、実はとても簡単です。基本をマスターすれば、バッチファイルの作成にもすぐ移行できます。
画像名を固定値として書き込んでも構いませんし、日時文字列や乱数のように、毎回一意の文字列を生成する仕組みを利用してもよいでしょう。あとは、コマンドを実行するだけのシンプルなバッチファイルを用意します。
echo off
"<VBoxManage.exeへのフルパス>" controlvm <仮想マシン名> screenshotpng <ファイル名>.png
具体的な例として、Windows 8のゲストOSの場合を見てみましょう。仮想マシン専用のバッチファイルを作成し、画像名にランダムな文字列を付加して一意性を確保します。画像はShareディレクトリに保存していますが、好きな場所を指定できます。同様に、仮想マシン名も固定値として埋め込んでも、入力引数として渡しても構いません。
echo off
"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" controlvm Windows-8 screenshotpng C:\Share\image-%random%.png
最後に、ショートカットを作成して任意の場所に配置し、プロパティを編集してショートカットキーの組み合わせを登録すれば完成です。これで作業が格段に速く、快適になります。
Linuxの例
Linuxではさらに簡単です。
わずか1行のシンプルなスクリプトを作成できます。
#!/bin/bash
VBoxManage controlvm <仮想マシン名> screenshotpng ~/image-`date +%s`.png
exit 0
この結果、ホームディレクトリに、1970年からの経過秒数が番号として付加された画像ファイルが保存されます。仮想マシン名をスクリプトに直接記述してもよいですし、入力引数として渡すこともできますが、その場合は実行時に操作が必要になります。あるいは、プロセステーブルを解析して現在実行中の仮想マシンの名前を検出すれば、完全に無人で動作するスクリプトも作れます。また、whichコマンドを使えば、VBoxManageバイナリのフルパスを検出できます。
あとはショートカットを登録します。例えばGNOMEでは、上部パネルにカスタムランチャーを追加し、コマンド欄にスクリーンショット用スクリプトへのフルパスを記述します。これで、メニュー操作とほぼ同等、場合によってはそれ以上に高速な自動化ソリューションが完成します。選択肢は多数ありますが、まずはこの方法で始めるのに十分でしょう。
さらなる利点
この方法には、外部ユーティリティにはないもう一つの利点があります。それは、ゲスト画面の内容全体を取得できるという点です。たとえホストモニター上に一部しか表示されていなくても問題ありません。つまり、ホストとゲストで異なる解像度を使っている場合や、複数モニター環境、ウィンドウモードで仮想マシンを実行している場合でも、煩わしいトリミングは一切不要です。例えば、このWindows 8仮想マシンの画面をご覧ください。水平・垂直のスクロールバーが見えますか?これは表示しきれていない部分があることを意味しますが、スクリーンキャプチャ機能ならその問題も解決できます。
まとめ
以上で解説は終わりです。VirtualBoxで最も厄介な問題の一つである、仮想マシンのスクリーンショット管理を回避する方法を学びました。コマンドラインを少し活用するだけで、スクリーンショット撮影をほぼ100%自動化できます。
このチュートリアルはVirtualBoxとスクリーンショットに焦点を当てていますが、柔軟な発想法や、VirtualBoxの強力なコマンドライン管理機能、スクリプト・ショートカット・ショートカットキーを活用して作業を効率化する方法も併せて学べます。WindowsとLinuxの両方の例(BASICとBASH)を紹介しましたが、どちらも問題なく動作します。本記事がお役に立てば幸いです。それでは、快適な仮想化ライフをお楽しみください。
それではまた。
-
VirtualBoxでディスクをクローンする方法【VBoxManage活用チュートリアル】
仮想化を業務でも趣味でも利用している方なら、VirtualBoxという強力かつ多用途な無料ソリューションを目にしたことがあるかもしれません。VirtualBoxは、デスクトップユーザーに対して、あらゆる形でOSを展開できる大きな柔軟性を提供してくれます。さらに、単なる趣味として仮想化を楽しんでいるだけでなく、仮想化を通じて新しいOSを学ぼうとする熱心なソフトウェア愛好家の方であれば、次のような場面に必ず直面することでしょう。それは「大量の仮想マシンを展開する必要がある」というシナリオです。一台ずつインストール作業を行う時間的な余裕はないはずです。実際、大規模に環境を展開する際に手動で一つずつマ
-
仮想マシンでの3Dアクセラレーション パート2:VirtualBoxとOpenGLの設定方法チュートリアル
本記事は、仮想マシンにおける3D仮想化の設定と活用方法を解説する全3回シリーズの第2回です。今回は、WindowsまたはLinuxホスト上にインストールしたVirtualBoxで動作するWindows仮想マシンに対して、OpenGLアプリケーション(およびゲーム)向けの3Dアクセラレーションを有効にする方法を学びます。前回の第1回では、VMware製品を使ってWindows上のDirectXプログラムに3Dアクセラレーションを有効化する手順をご紹介しました。このときはホストOSがWindowsでもLinuxでも問題なく動作しました。そして最終回となる第3回では、LinuxホストとLinux仮想