web-dev-qa-db-ja.com

ゲストOSへのパススルーPS / 2キーボード

OSWindowsはVM(ubuntu、libvirt、qemu-kvm)で実行されます。ホストハードウェアにPS/2キーボードがあります。パフォーマンスを損なうことなくゲストOSに渡す方法はありますか( PS/2キーボードからのキーマッピングを使用してUSBキーボードをエミュレートする可能性があります。Spiceサーバー(libvirt GUI「仮想マシンマネージャー」から)を使用しようとしましたが、キーを押すと非常に煩わしい遅延が発生します。

3
avi9526

まず、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ログファイル内。注意点:ホストハードウェアを再構成すると、デバイス番号が変わる可能性があります。

ゲストでキーボードを使用している間、キーボードはホストによって認識されなくなります。ホストを制御するには、次のことができます。

  • ゲストを終了する、または
  • USB経由で別のキーボードを接続する、または
  • Ssh経由でログインする、または
  • シリアルコンソールを使用します。

私はこのリンクからこの情報のほとんどを入手しました:

https://www.reddit.com/r/VFIO/comments/5hja2k/how_do_you_pass_through_a_ps2_keyboard/

1
fluffysheap