Windowsオペレーティングシステムは、仮想マシン(ubuntu、libvirt、qemu-kvm)で実行されます。私のコンソールハードウェアにPS / 2キーボードがあります。パフォーマンスを低下させることなくゲストOSに転送する方法はありますか(おそらくPS / 2キーボードのキーマッピングを使用してUSBキーボードをエミュレートするなど)。 Spiceサーバー(libvirt GUI「Virtual Machine Manager」で)を試してみましたが、キーを押すと非常に迷惑な遅延が発生します。
答え1
virsh edit <vm-name>
まず、virt-manager GUIを介して構成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つのタグを含めます。
<devices>
また、このセクションに追加する必要がある次のXMLを使用して、クライアントからキーボードデバイスを作成する必要があります。
<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/
答え2
Debian Bullseyeに対する他の回答の手順を試して、いくつかのガイドラインを更新したいと思いました。journalctl -b
その後、検索を使用することをお勧めしますinput.*keyboard
。私のシステムの稼働時間が改善され、dmesgにこれらの行が表示されなくなりました。私が見つけたもの:
kernel: input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/in>
systemd-logind[2716]: Watching system buttons on /dev/input/event0 (AT Translated Set 2 keyboard)
これにより、現在私のキーボードがevent0を使用していることがわかっているので、ls -l /dev/input/by-path
asを介して見つけることができます/dev/input/by-path/platform-i8042-serio-0-event-kbd
。
libvirtバージョン7.4.0以降、ドメインXMLはサポートされています<input type='evdev'>
。 Bullseye-backportsでlibvirtを更新してバージョン8を取得しました。したがって、VM XMLに追加する必要があるのは次のとおりです。
<input type="evdev">
<source dev="/dev/input/by-path/platform-i8042-serio-0-event-kbd" grab="all" grabToggle="ctrl-ctrl" repeat="on"/>
</input>
grabToggle="ctrl-ctrl"
左Ctrl +右Ctrlを使用してゲストとホストをキーボードで切り替えることができるアドインに注意してください。
私はこれをどこで得ましたか?アーチLinuxウィキ。これには、「PS / 2からVirtio入力に切り替える」ことで遅延をさらに減らすための提案も含まれていますが、まだ試していません。
このアプローチの利点は、キーボードを使用するためにQemuの追加ACL /権限を設定する必要がないことです。私がその方法を試したときにこれが問題を引き起こしましたqemu:commandline
。