HOOOS

Looking Glass 宿主机与虚拟机剪贴板双向无缝同步配置指南

0 7 极客边缘 KVM 虚拟机剪贴板同步
Apple

在 KVM/QEMU GPU 直通的方案中,Looking Glass 凭借极低的延迟成为了许多单机双系统用户的首选。然而,很多用户在搭建好 Looking Glass 后,会发现宿主机(Linux)与虚拟机(Windows)之间的剪贴板无法同步,极大地影响了跨平台协作效率。

Looking Glass 本身并不直接处理剪贴板的传输,而是**依赖 SPICE 协议的通道(vdagent)**来实现这一功能。要实现双向无缝同步,需要正确配置 Libvirt XML虚拟机驱动与代理程序 以及 Looking Glass 客户端参数

以下是完整的配置步骤。


第一步:配置虚拟机 XML(Libvirt)

我们需要在虚拟机的配置文件中添加 SPICE 服务器以及与之通信的 VirtIO 串口通道。

  1. 打开终端,编辑你的虚拟机 XML 配置(将 win10 替换为你的虚拟机名称):

    virsh edit win10
    
  2. <devices> 标签内,确保存在并添加以下配置:

    1. 添加 SPICE 图形支持(仅用于传输控制信号和剪贴板,不用于显示图像)

    <graphics type='spice' autoport='yes'>
      <listen type='address' address='127.0.0.1'/>
      <image compression='off'/>
    </graphics>
    

    注意:将监听地址设置为 127.0.0.1 可以确保安全,防止外部网络访问该 SPICE 服务。

    2. 添加 VirtIO 串口控制器(如果已有可忽略)

    <controller type='virtio-serial' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x0f' function='0x0'/>
    </controller>
    

    (注:slot 地址需根据你 XML 的实际 PCI 布局自动分配或调整)

    3. 添加 SPICE 代理通道

    <channel type='spicevmc'>
      <target type='virtio' name='com.redhat.spice.0'/>
      <address type='virtio-serial' controller='0' bus='0' port='1'/>
    </channel>
    
  3. 保存并退出编辑器。


第二步:在 Windows 虚拟机中安装驱动与代理

光有通道还不够,Windows 内部必须有对应的驱动程序和后台代理(Agent)来处理剪贴板事件。

  1. 启动虚拟机。
  2. 安装 VirtIO 驱动:
    如果之前没装完整,请下载最新的 VirtIO Win ISO 驱动包。确保设备管理器中的 VirtIO Serial Driver 已正确安装且无黄色感叹号。
  3. 安装 SPICE Guest Tools:
  4. 验证服务运行状态:
    • 按下 Win + R,输入 services.msc
    • 检查 Spice VDAgent 服务是否处于“正在运行”状态,并将其启动类型设置为“自动”。

第三步:启动 Looking Glass 客户端

Looking Glass 客户端启动时需要与本机的 SPICE 接口建立连接,从而充当剪贴板的中转站。

通常情况下,Looking Glass 会尝试自动连接本地默认的 SPICE 端口。如果你的配置非标准,或者为了确保剪贴板正常工作,建议在启动 Looking Glass 客户端时显式声明 SPICE 参数。

命令行启动

looking-glass-client -c 127.0.0.1 -p 5900
  • -c 参数指定 SPICE 服务器地址。
  • -p 参数指定 SPICE 端口(默认通常是 5900,可通过 virsh domdisplay win10 查看实际分配的端口)。

配置文件持久化

你也可以将此配置写入 Looking Glass 的配置文件 ~/.config/looking-glass/client.ini 中,避免每次输入参数:

[spice]
host=127.0.0.1
port=5900
enable=yes

常见排查与优化

如果完成上述配置后剪贴板依然无法同步,请按照以下步骤排查:

1. 检查宿主机(Linux)端权限

在某些 Linux 发行版(如 AppArmor 或 SELinux 启用的系统)上,Libvirt 可能会限制 Looking Glass 客户端读取 SPICE 的 Unix Socket。

  • 检查 /var/log/libvirt/qemu/ 下对应虚拟机的日志,看是否有 Permission denied 相关的报错。
  • 若使用 Unix Socket 代替 TCP 端口,确保当前加入 Looking Glass 的用户在 libvirtkvm 用户组中。

2. Wayland 与 X11 环境差异

Wayland 桌面环境(如 GNOME 默认 Wayland 会话)下,由于安全机制限制,后台程序获取系统剪贴板的行为可能会受到严格限制。

  • 临时解决方案:尝试切换回 X11 (Xorg) 会话,看剪贴板是否能恢复正常。
  • 若必须在 Wayland 下运行,确保你的 looking-glass-client 是通过原生 Wayland 编译的,或者使用了 XWayland 兼容层,并赋予了相应的窗口权限。

3. 双向同步失效(单向能用)

如果只能单向复制(例如只能 Windows 复制到 Linux,反之不行):

  • 检查 Windows 任务管理器中是否存在 vdagent.exe 进程,尝试结束进程并手动重新运行 C:\Program Files\SPICE Guest Tools\vdagent.exe
  • 避免在 Windows 中开启“跨设备同步剪贴板”或第三方剪贴板历史记录工具(如 Ditto),因为它们可能会抢占剪贴板钩子导致 SPICE 代理失效。

点评评价

captcha
健康