在使用 Linux 宿主机通过 Looking Glass 运行 Windows 虚拟机进行游戏时,鼠标漂移、定位不准、视角疯狂打转(尤其在 3D/FPS 游戏中),或者双光标不同步,几乎是每个玩家都会踩到的经典深坑。
导致这个问题的底层逻辑很简单:Looking Glass 默认使用的是绝对坐标定位(Absolute Coordinates),将宿主机的鼠标位置映射到虚拟机内;而大多数 3D 游戏(如《赛博朋克 2077》、《CS2》等)在接管鼠标时,需要的是相对坐标(Relative Coordinates)/ 原始输入(Raw Input)。当这两者冲突,或者宿主机与虚拟机的 DPI 缩放不一致时,就会出现鼠标疯狂漂移或定位不准的情况。
以下是目前社区公认最完美的几种解决方案,按游戏体验从优到次排列。
终极方案:配置 Evdev 输入直通(强烈推荐)
这是兼顾“无延迟原生游戏性能”与“宿主机/虚拟机无缝切换”的最优雅方案。它将鼠标的原始事件(event)直接写入 QEMU,绕过了 Spice 和 Looking Glass 的虚拟指针。
1. 查找鼠标的物理 ID
在宿主机终端中运行以下命令,找到你的游戏鼠标对应的 event 设备:
ls -l /dev/input/by-id/
寻找类似 usb-YOUR_MOUSE_NAME-event-mouse 的路径。
2. 修改虚拟机 XML 配置
使用 virsh edit 虚拟机名称 编辑你的 XML 配置文件。
首先,确保 <domain> 根标签中声明了 QEMU 命名空间:
<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
然后,滚动到文件最底部(</devices> 标签之后,</domain> 标签之前),添加以下配置(将 evdev 路径替换为你实际的鼠标 ID):
<qemu:commandline>
<qemu:arg value='-object'/>
<qemu:arg value='input-linux,id=mouse1,evdev=/dev/input/by-id/usb-Logitech_G_Pro-event-mouse'/>
<!-- 如果需要同时直通键盘,可以加下面这行 -->
<!-- <qemu:arg value='-object'/> -->
<!-- <qemu:arg value='input-linux,id=kbd1,evdev=/dev/input/by-id/usb-Your_Keyboard-event-kbd,grab_all=on,repeat=on'/> -->
</qemu:commandline>
3. 配置权限与快捷键
为了让 QEMU 有权限读取该设备,编辑宿主机的 /etc/libvirt/qemu.conf,找到 cgroup_device_acl 部分,取消注释并加入你的鼠标路径,或者直接允许 input 组:
cgroup_device_acl = [
"/dev/null", "/dev/full", "/dev/zero",
"/dev/default-state",
"/dev/input/by-id/usb-Logitech_G_Pro-event-mouse"
]
同时在 /etc/libvirt/qemu.conf 中确保 user = "root" 或将你的用户加入到 input 用户组中。重启 libvirtd 服务。
使用体验:
启动虚拟机后,同时按下 左 Ctrl + 右 Ctrl(默认快捷键,可自定义),鼠标控制权就会在宿主机和虚拟机之间无缝切换。在虚拟机内,鼠标是 100% 的原始数据输入,完全不会有任何漂移和延迟,游戏视角也不会乱转。
备选方案一:物理 USB 端口直通(最简单暴力)
如果你有一只多余的鼠标专门用来打游戏,或者你的主板支持将某个 USB 控制器整体直通(IOMMU 分组正常),直接把鼠标以物理硬件的形式挂载给 Windows 虚拟机是延迟最低、最不会出错的方案。
1. 在 Virt-Manager 中添加硬件
- 打开
virt-manager虚拟机管理器。 - 选中你的虚拟机,点击“详情” -> “添加硬件”。
- 选择 USB 主机设备 (USB Host Device)。
- 在列表中找到你的游戏鼠标,点击完成。
2. 解决游戏时的光标锁死
物理直通后,该鼠标将完全由虚拟机接管,宿主机无法使用。如果需要在单显示器下切换,可以配合物理 USB 切换器(KVM 切换器)或使用 scrcpy、网络控制等软件辅助。
临时方案:调整 Looking Glass 客户端参数(适合不便修改 XML 的用户)
如果你不想折腾复杂的 XML 配置,只想快速修复轻微的定位不准,可以通过微调 Looking Glass 的捕获设置来缓解。
1. 禁用 Windows 提高指针精确度
在虚拟机(Windows)的控制面板中:
- 路径:
控制面板 -> 硬件和声音 -> 鼠标 -> 指针选项 - 取消勾选 “提高指针精确度”(即禁用 Windows 自带的鼠标加速度,这会导致绝对坐标转换时产生累计误差)。
2. 统一宿主机与虚拟机的 DPI 缩放
如果你的 Linux 宿主机开启了 150% 或 200% 的高分屏缩放(Fractional Scaling),而虚拟机内是 100% 缩放,Looking Glass 在进行坐标换算时会出现越界和漂移。
- 确保 Linux 端和 Windows 端的显示缩放比例完全一致(推荐均设为 100%)。
3. 运行 Looking Glass 时锁定光标
在启动 looking-glass-client 时,可以使用命令行参数强制锁定光标。例如在 Linux 终端启动时加上 -m 参数或通过快捷键(默认 Scroll Lock)进入捕获模式:
looking-glass-client -m 98
(注:-m 参数对应的键码可以在官方文档中查询,用于设置光标捕获快捷键。)
总结
对于 Looking Glass 游戏玩家来说,解决鼠标漂移的唯一终极正解是避免使用虚拟的 Tablet/Mouse 指针。
- 追求完美、丝滑体验: 花 10 分钟配置 Evdev 直通,一键切换且支持高回报率(1000Hz 轮询率无压力)。
- 图省事、有双鼠标: 直接在 Virt-Manager 里做 USB 设备直通。