QEMU VNC 访问 CentOS 虚拟机时“双鼠标指针”问题的解决

2010/12/22 | 23:58 | 分类:Linux与开源 | 标签: | 4,383次阅读

  前文提到过,在虚拟硬件配置中使用绝对定位设备(tablet)取代相对定位设备(mouse)是解决 QEMU VNC 访问 Xen 虚拟机时“双鼠标指针”问题的办法之一。这种办法对于 Windows 和 Ubuntu 虚拟机都有效,无需在虚拟机操作系统内做额外配置。但这对于 CentOS 虚拟机无效,初步判断是 CentOS 没有相应的 tablet 设备驱动。不过经实验发现,CentOS 中已包含相应驱动,只是没有对 X 进行适当的配置。只要对 CentOS 虚拟机进行以下配置,即可使两个鼠标指针同步移动:

  1、确保系统中存在 evdev 驱动模块:/usr/lib/xorg/modules/input/evdev_drv.so(x86_64 系统为 /usr/lib64/xorg/modules/input/evdev_drv.so)。

  2、在 proc 文件系统下查看 QEMU USB Tablet 对应的 event 设备名。在本例中为 event2。

  1. $ cat /proc/bus/input/devices
  2.  
  3. I: Bus=0003 Vendor=0627 Product=0001 Version=0000
  4. N: Name="QEMU 0.8.2 QEMU USB Tablet"
  5. P: Phys=usb-0000:00:01.3-2/input0
  6. S: Sysfs=/class/input/input2
  7. H: Handlers=mouse1 event2 js0
  8. B: EV=b
  9. B: KEY=70000 0 0 0 0 0 0 0 0
  10. B: ABS=103

  3、修改 xorg.conf,添加一个 InputDevice(本例中命名为“MouseTS”),并将其加入 ServerLayout 段。其中 Device 选项的值参考上一步找到的 event 设备名。

  1. $ vi /etc/X11/xorg.conf
  2.  
  3. Section "ServerLayout"
  4.         Identifier     "Default Layout"
  5.         Screen      0  "Screen0" 0 0
  6.         InputDevice    "Keyboard0" "CoreKeyboard"
  7.         InputDevice    "MouseTS" "CorePointer"
  8. EndSection
  9.  
  10. Section "InputDevice"
  11.         Identifier     "MouseTS"
  12.         Driver         "evdev"
  13.         Option         "Device" "/dev/input/event2"
  14.         Option         "DeviceName" "touchscreen"
  15. EndSection

  参考:
  http://thread.gmane.org/gmane.comp.emulators.qemu/11516
  http://forums.opensuse.org/english/get-help-here/hardware/418972-usb-mouse-device-problem.html

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

2010/12/18 | 23:41 | 分类:Linux与开源 | 标签: | 3,747次阅读

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

  1. Windows Registry Editor Version 5.00
  2.  
  3. [HKEY_CURRENT_USER\Control Panel\Mouse]
  4.  
  5. "MouseSpeed"="0"
  6. "MouseThreshold1"="0"
  7. "MouseThreshold2"="0"

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

  1. [Desktop Entry]
  2. Name=No name
  3. Encoding=UTF-8
  4. Version=1.0
  5. Exec=xset m 0 0
  6. X-GNOME-Autostart-enabled=true

  注意,这一配置也只有在登录 Gnome 之后才生效。用户登录之前仍存在双鼠标指针。
  而对于较新版本的 X,推荐的方法是在 xorg.conf 中加入以下配置(参考[1][2],暂未实验),这一配置是全局性的:

  1. Section "InputDevice"
  2. Option "AccelerationProfile" "-1"
  3. Option "AccelerationScheme" "none"
  4. EndSection

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

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

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