qemu
端末を開かずにWindows 7でインスタンスを実行しています。今、私は次のコンピュータをシャットダウンしたいと思います。マイコンピュータ名またはUSBデバイスを追加してください。スクリプト可能なソリューションが必要です。 Libvirtは私のシステムに他の欠点があるため、ソリューションではありません。
私は次の魔法の行を探しています。
qemu-monitor -connect=MyMachineName command="shutdown"
どうすればいいですか?
ベストアンサー1
私が好む方法は、UNIXソケットを介してQEMU "Monitor"に接続することです。この方法は正しく文書化されていませんが、うまく機能します。
QEMUを開始するときに、以下-monitor
のパラメーターを追加します。
$ qemu-system-i386 [..other params..] -monitor unix:qemu-monitor-socket,server,nowait
qemu-monitor-socket
これはキーワードではなく、ディスク上のソケットを表すホストパスとファイル名を選択することです。 QEMUが起動すると、このファイルが生成されていることがわかります。
このオプションはserver,nowait
QEMUに接続を受信しますが、接続を待たずに仮想マシンを起動するように指示します。
あなたはそれを使用することができますソカットユーティリティ(すべての良いリポジトリで利用可能)はソケットに接続し、QEMUモニタプロンプトにコマンドを入力します。
$ socat -,echo=0,icanon=0 unix-connect:qemu-monitor-socket
QEMU 2.8.1 monitor - type 'help' for more information
(qemu) _
socatがすることは、2つのランダムなストリーム/ソケットを一緒に接続することです。最初の引数はコンソールキーボードと出力と-
同義です。stdio
これらの2つのオプションは、echo=0,icanon=0
入力したコマンドが再びエコーされるのを防ぎ、Tab記録の完了と矢印キーを有効にしてキーボードの対話を強化します。最後のパラメータは、以前に作成されたソケットファイルへの接続を表します。
QEMUにワンタイムコマンドを送信するには、エコsocatを介してUNIXソケットに到達します。
$ echo "info status" | socat - unix-connect:qemu-monitor-socket
QEMU 2.8.1 monitor - type 'help' for more information
(qemu) info status
VM status: running
(qemu)
$ _
スクリプトの出力をより明確にするために、最初の行とプロンプト行を| tail --lines=+2 | grep -v '^(qemu)'
フィルタリングするフィルタも追加しました。(qemu)
$ echo "info status" | socat - unix-connect:qemu-monitor-socket | tail --lines=+2 | grep -v '^(qemu)'
VM status: running
$ _
必要に応じて仮想マシンをシャットダウンするのに役立つモニターコマンドは、仮想system_powerdown
マシンのオン/オフボタンを押して正常にシャットダウンするかquit
、QEMUをすぐにシャットダウンすることです。
いくつかの注意:
-qmp
QEMUを使用すると、代わりにJSONベースのインターフェースを提供できます。-monitor
これはプログラム制御にもっと強力ですが、私は試したことがありません。ディスク上のソケットファイルは常に空です。これは、データを保存せずにプログラムが通信用に開く任意のハンドルにすぎません。