远程访问虚拟机时“双鼠标指针”问题的简单解决

2010-12-18

Xen 自带的 QEMU VNC 和 VirtualBox 自带 VRDP 允许用户通过 VNC/RDP 协议远程访问虚拟机图形界面。但有时我们发现远程访问窗口中会出现双鼠标指针:一个是客户端的,一个是虚拟机的,二者移动并不同步,导致难以精确定位。这个问题的缘由是远程访问协议转换鼠标绝对坐标与相对坐标时重复应用了鼠标加速(参考 Red Hat bugzilla 上的描述[1][2])。要解决这个问题,通常的方法包括:1.在虚拟机内安装附加组件(如 VirtualBox Guest Additions);2.在虚拟机内安装 VNC/RDP Server;3.在虚拟硬件配置中使用绝对定位设备(tablet)取代相对定位设备(mouse);4.使用上述 bugzilla 条目中提到的修改过的远程访问工具。如果出于种种原因不便于在宿主机上做修改,或没有管理员权限在虚拟机上安装这些工具,其实也有简单的解决方法,即在虚拟机操作系统内禁用鼠标加速。

在 Windows XP 虚拟机下,只需要在控制面板内打开“鼠标”属性,去掉“指针选项”页面内“提高指针精确度”前面的勾。其对应的注册表项目如下:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Control Panel\Mouse]

"MouseSpeed"="0"
"MouseThreshold1"="0"
"MouseThreshold2"="0"

需要注意的是,这一配置只针对登录用户有效。用户登录之前仍存在双鼠标指针。

在运行 X 的 Linux 虚拟机下,最简单的方法是执行“xset m 0 0”命令立即禁用鼠标加速。针对不同的桌面环境,可将这一命令加入相应的启动项。例如对于 Gnome,可在 /usr/share/gnome/autostart 目录下创建名为 xset.desktop、内容如下的文件:

[Desktop Entry]
Name=No name
Encoding=UTF-8
Version=1.0
Exec=xset m 0 0
X-GNOME-Autostart-enabled=true

注意,这一配置也只有在登录 Gnome 之后才生效。用户登录之前仍存在双鼠标指针。

而对于较新版本的 X,推荐的方法是在 xorg.conf 中加入以下配置(参考[3][4],暂未实验),这一配置是全局性的:

Section "InputDevice"
    Option "AccelerationProfile" "-1"
    Option "AccelerationScheme" "none"
EndSection

针对 Gnome 桌面,另一种方法是在“鼠标首选项”(可通过“gnome-mouse-properties”命令打开)内找到“加速”滑块,仔细试验将其滑动到适当位置,即可保证两个鼠标指针同步移动。对应的配置在 ~/.gconf/desktop/gnome/peripherals/mouse/%gconf.xml 文件中,当 motion_acceleration 属性取值为 1 时鼠标无加速:

<entry name="motion_acceleration" mtime="..." type="float" value="1">

事实上,禁用鼠标加速并没有真正消除两个指针,而只是使它们同步移动。我们还需要使二者尽可能重合,因此有时候需要利用屏幕边角人工对准两个指针,多试试就能够掌握技巧。最完美的方案仍是在虚拟机内安装 VNC/RDP Server。