[概要] [詳細] [ビルドメモ]

VMware Command Line Tools

概要

註: このプログラム集の機能のほとんどは、現在は Windows 用 "vmw.exe" と DOS 用 "vmw.com", "vmtsr.com" に含まれています(http://chitchat.at.infoseek.co.jp/vmware/vmtoolsj.html)。 また、このプログラム集は VMware Workstation 3.x で開発されそれ以降更新されていないため、現在の VMware プロダクトでは動作しなかったり、異なる動作をする可能性があります。

VMware Command Line Tools は、VMware の非公開 "バックドア" 機能を 使用するための、単純で小さな DOS/Windows 用のコマンドラインプログラム集です。 以下のプログラムが含まれています:

名称 説明
vmchk VMware の中で動いているかどうかをチェックします。
vmdev 仮想デバイス(floppy, CD, soundなど)を接続、切断します。
vmpref copy & paste、時刻同期などの VMware GUI オプション設定の 有効、無効を切り替えます。
vmtime ゲストのシステム時刻をホストに同期します。
ただし現在はただの "ワンショット" プログラムなので 長時間同期させておくには、定期的にこれを実行する必要があります。
vmcopy テキストデータをゲストからホストのクリップボードにコピーします。
DOS にはクリップボード機能がないので、標準入力からテキストを読み込みます。
vmscr vmcopy と同じくテキストデータをホストにコピーしますが、標準入力 ではなく画面上からテキストを読み取ります。
要は DOS 版の "スクリーンショット" です。
vmpaste ホストのクリップボードから、テキストをペーストします。
DOS にはクリップボード機能がないので、テキストは標準出力に書き出します。
vmpop 冗談プログラムです
TOP

詳細

vmchk.com (DOS16)
vmchk.exe (WIN32)

VMware 内で実行されているかどうかをチェックして標準出力にメッセージを 表示します。同時にリターンステータス (ERRORLEVEL) も返すので DOS バッチ ファイルのなかで使うこともできます。たとえばバッチファイルの中とかで メッセージを表示したくない場合は NUL デバイスにでもリダイレクトしてください。

VMware 内で実行されていない場合のリターンステータスは 0 です。
VMware 内の場合、リターンステータスは VMware から返ってきた "バージョン番号"です。この"バージョン番号" の意味は謎のままです。

Options:
なし。

Examples:
VM 以外で実行した場合

    C:\>vmchk
    Not running inside VMware.
VM 内で実行した場合
    C:\>vmchk
    Running inside VMware (version 6).
バッチファイル例
    @echo off
    vmchk > NUL

    if errorlevel 1 goto inside

    echo Not in VM!
    ...

    :inside
    echo Inside VM!
    ...
TOP

vmdev.com (DOS16)
vmdev.exe (WIN32)

デバイスの接続・切断。同時にデバイス状況の一覧を標準出力に表示します。

Options:
vmdev [<action>][<device>]

<action>
+ 指定デバイスを接続します。action のデフォルト。
対象デバイスが既に接続されている場合、一旦切断して再接続します。 (この機能はかなり本気で便利です。)
- 指定デバイスを切断します。
<device>
0..9 接続・切断する対象デバイス番号。
* 全デバイス。device のデフォルト。

<action> <device> 両方が省略された場合、リスト表示のみ 行います。接続済みのデバイスには '+' マークがつきます。

Examples:
デバイスリストを表示する:

    vmdev
全デバイスを接続(または再接続)する:
    vmdev *
 or vmdev +*
 or vmdev +
全デバイスを切断する:
    vmdev -*
 or vmdev -
デバイス 2 を接続(または再接続)する:
    vmdev 2
 or vmdev +2
デバイス 1 を切断する:
    vmdev -1

TOP

vmpref.com (DOS16)
vmpref.exe (WIN32)

以下の preference 設定の有効・無効を切り替えます。同時に現在の設定一覧 を標準出力に表示します。

最初の三つのマウスカーソル関係は DOS ゲストではどっちみち役に立ちません。 プログラム的にカーソルを grab/release する方法もわかりませんし...
時刻同期も DOS ゲストでは意味がないです。VMTool for DOS の時刻同期 はこの設定とは関係がありませんので。
ただし、copy & paste の設定は VMware Command Line Tools にも影響があります。 この設定が無効になっているときは、VMware 自体がデータのやり取りをしてくれません。

Options:
vmpref [[<action>]<feature>]

<action>
+ 有効にする。
- 無効にする。
<action> が省略された場合のデフォルト動作は'トグル'です。
<feature>
G Grab when cursor enters window.
U Ungrab when cursor leaves window.
S Scroll when cursor approaches window edge.
C Copy and paste between host and guest.
T Time syncronization between host and guest.

<feature> オプションの大文字・小文字は区別しません。<feature> オプション省略時は設定一覧表示のみ行います。

Examples:
設定一覧を表示する:

    vmpref
 or vmpref +
 or vmpref -
コピー & ペースト機能をトグルする:
    vmpref c
時刻同期を有効にする:
    vmdev +t
'ungrab' を無効にする:
    vmdev -u

TOP

vmtime.com (DOS16)
vmtime.exe (WIN32)

実行すると、ゲストのシステム時刻をホストに同期し、更新された 現在時刻を標準出力に表示します。まだ常駐機能はないので、ホストと ゲストの同期を長時間保つには、定期的に実行しなければなりません。

註:Windows 用 vmw.exe と DOS 用 vmtsr.com には定期実行機能があります。

Options:
なし

TOP

vmcopy.com (DOS16)
vmcopy.exe (WIN32)

標準入力から読み込んだテキストデータをホストのクリップボードにコピーします。
DOS16、WIN32 版とも標準入力からテキストデータを読み込みますが、 DOS16 版はキー入力を受け付けません(実際には受け付けるのですが、 キー入力を待たないので何も入力しないうちに終了してしまいます)。 このプログラムはパイプ、リダイレクトなどと併用することを前提としています。

WIN32 版は最大 65,355 バイトをコピーすることが出来ます。これはおそらく VMware 自体の制限です。DOS16 版では若干少なく、最大約 65,000 バイトです。

正規の VMware-Tools と同様、転送できるのはテキストデータのみです。 これは、VMware が無条件に LF-CR/LF 変換を行ってしまうためです。

このプログラムが動作するためには、 VMware の コピー & ペースト機能が有効になっていなければなりません。 無効時には VMware 自体がデータのやり取りをしてくれません。 ここで一つ注意点があります。このプログラムを(DOS16 版、WIN32 版どちらでも) 正規の VMware-Tools が実行されている Windows ゲスト内で使用する場合、 データをホストにコピーした後でコピー&ペースト機能を無効に しなければなりません。 そうしないと、ゲストがフォーカスを失った時点で、正規の VMware-Tools が ゲストのクリップボードの内容をホストに送ってしまい、先に送ったデータが 上書きされてしまうので、このプログラムで送ったデータをホストで取得する ことが出来なくなってしまいます。
以下のような単純なバッチファイルでこれを自動化することも出来ます:

    @echo off
    REM copy & paste を有効にする
    vmpref +c

    REM 標準入力からのデータをコピーする
    vmcopy

    REM ここで copy & paste を無効にする
    vmpref -c

Options:
なし

Examples:
ファイルからテキストをコピーする:

    vmcopy < somefile.txt
コマンドの実行結果をコピーする:
    dir | vmcopy
TOP

vmscr.com (DOS16)

画面上のテキストデータをホストのクリップボードにコピーします。
WIN32 版はありません(意味がないので)。正規の VMware-Tools が使用できます。

註:DOS 用 vmtsr.com には、同じことをホットキーで実行する機能があります (ほとんどいつでもスナップショットが取れます)。

vmcopy と同様、VMware のコピー & ペースト機能を 有効にしておいてください。Windows ゲストで使用する場合の 注意点も同様です。

Options:
なし

Examples:
vmpaste と併用すると、ホストのクリップボードを 借用して DOS ゲスト内で画面の「スクリーンショット」をとることが出来ます。

    vmscr
    vmpaste > screen.txt

TOP

vmpaste.com (DOS16)
vmpaste.exe (WIN32)

ホストのクリップボードからテキストデータを読み込み、標準出力に 書き出します。
vmcopy と同様、パイプ、リダイレクトと併用されることを 想定しています。

VMware は最大 65,355 バイトを転送しますが、DOS16 版、WIN32 版とも この最大サイズまで扱うことができます。ホストのクリップボードにそれ以上 のデータが入っている場合、VMware 自体がゲストにデータを転送してくれません。

VMware の コピー & ペースト機能は有効になっている必要があります。 vmcopy で説明したその他の注意事項は当てはまりません。

他の VMware Command Line Tools プログラムと違い、このプログラムはエラー メッセージを標準エラー(WIN32) または画面に直接(DOS16) 出力します。 これは、標準出力は大抵の場合リダイレクトされると思われるからです。

Options:
なし

Examples:
ホストのクリップボードの内容をファイルに保存する:

    vmpaste > somefile.txt
ホストのクリップボードの内容を他のプログラムに送る:
    vmpaste | sort > sorted.txt
TOP

vmpop.com (DOS16)
vmpop.exe (WIN32)

このプログラムを実行すると、

    A bootable CD-ROM disc, floppy diskette,
    or hard disk was not detected.
ダイアログがホスト上に表示されます。誰かの役に立つかどうか分かりませんが、 とりあえず入れておきました。
ひとつ注目に値すると思われるのは、このダイアログが表示されている間、 ユーザが OK ボタンをクリックするまで仮想マシンの動作が完全に停止する、 ということです。誰かこのプログラムの実用的な使い方を思い付いたら教えて ください。

Options:
なし

TOP

Build Notes

VMware Command Line Tools ソースのコンパイル/アセンブルに関する 覚え書きです。基本的にはプログラムを書いたことのある人にとっては 何も特別なことはありません。

C ソースについて (WIN32)

アセンブリソースについて (DOS16)

TOP