HOOOS

彻底解决 Looking Glass 虚拟机游戏鼠标漂移、定位不准与双光标不同步

0 11 极客玩家 虚拟机游戏鼠标定位
Apple

在使用 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 中添加硬件

  1. 打开 virt-manager 虚拟机管理器。
  2. 选中你的虚拟机,点击“详情” -> “添加硬件”。
  3. 选择 USB 主机设备 (USB Host Device)
  4. 在列表中找到你的游戏鼠标,点击完成。

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 设备直通

点评评价

captcha
健康