OSWindowsはVM(ubuntu、libvirt、qemu-kvm)で実行されます。ホストハードウェアにPS/2キーボードがあります。パフォーマンスを損なうことなくゲストOSに渡す方法はありますか( PS/2キーボードからのキーマッピングを使用してUSBキーボードをエミュレートする可能性があります。Spiceサーバー(libvirt GUI「仮想マシンマネージャー」から)を使用しようとしましたが、キーを押すと非常に煩わしい遅延が発生します。
まず、virt-manager GUIを使用してこれを行うことはできないため、virsh edit <vm-name>
を使用して構成XMLを変更する必要があります。
トップレベルの<domain>
タグを確認してください。次のようになります。
<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
タイプがkvmでない場合は、間違ったフライトに搭乗しています。新しいVMからやり直してください。 xmlns:qemu属性がない場合は、追加します。
すでに<qemu:commandline>
セクションがある場合は、その中に次の2行を追加します。
<qemu:arg value='-object'/>
<qemu:arg value='input-linux,id=kbd,evdev=/dev/input/eventN,grab_all=on,repeat=on'/>
そうでない場合は、<domain>
タグのすぐ下に、これら2つのタグを入れて作成します。
また、次のXMLを使用してゲストにキーボードデバイスを作成する必要があります。これを<devices>
セクションに追加する必要があります。
<serial type='dev'>
<source path='/dev/input/eventN'/>
<target port='0'/>
</serial>
ここで定義されている2番目のqemu:argとソースパスの両方にeventN
が定義されています。 Nをキーボードの入力デバイス番号に置き換える必要があります。ターゲットポートは変更しないでください。ソースパスのみを変更してください。
私のキーボードデバイスは2ですが、あなたのキーボードデバイスは0か他の数字かもしれません。自分のものを見つけるには、dmesg | grep input
を実行して、キーボードデバイスを探します。私の言う:
input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input2
それでも/ dev/input/eventNのパスを使用する必要があります。これにより、Nに使用する正しい番号がわかります。おそらくevdevでXを使用している場合は、この情報も見つけることができます。 Xログファイル内。注意点:ホストハードウェアを再構成すると、デバイス番号が変わる可能性があります。
ゲストでキーボードを使用している間、キーボードはホストによって認識されなくなります。ホストを制御するには、次のことができます。
私はこのリンクからこの情報のほとんどを入手しました:
https://www.reddit.com/r/VFIO/comments/5hja2k/how_do_you_pass_through_a_ps2_keyboard/