Windows 操作系统在虚拟机(ubuntu、libvirt、qemu-kvm)上运行。我的主机硬件上有 PS/2 键盘。有什么方法可以将其传递到来宾操作系统而不损失性能(也许可以使用 PS/2 键盘的按键映射来模拟 USB 键盘)。我尝试使用 Spice 服务器(来自 libvirt GUI“虚拟机管理器”),但按键时它会产生非常烦人的延迟。
答案1
首先,您必须使用virsh edit <vm-name>
来修改配置 XML,因为您无法通过 virt-manager GUI 来执行此操作。
检查您的顶级<domain>
标签。它应该看起来像这样:
<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
如果类型不是 kvm,则说明您登上了错误的航班 - 使用新的 VM 重新开始。如果 xmlns:qemu 属性不存在,请添加它。
如果您已经有一个<qemu:commandline>
部分,请在其中添加以下两行:
<qemu:arg value='-object'/>
<qemu:arg value='input-linux,id=kbd,evdev=/dev/input/eventN,grab_all=on,repeat=on'/>
如果不这样做,则在标签下创建它,<domain>
并在其中包含这两个标签。
您还需要使用以下 XML 在客户机中创建键盘设备,您应将其添加到该<devices>
部分:
<serial type='dev'>
<source path='/dev/input/eventN'/>
<target port='0'/>
</serial>
第二个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 使用的正确数字是多少。如果您将 X 与 evdev 一起使用(您可能就是这样),您还可以找到此信息在 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 在访客和主机之间切换键盘。
我从那里得到这个Archlinux 维基。这还包含通过“从 PS/2 切换到 Virtio 输入”进一步减少延迟的建议,但我还没有尝试过。
这种方法的好处是您无需为 Qemu 配置额外的 ACL/权限即可使用键盘。当我尝试该部分的方法时,这给我带来了问题qemu:commandline
。