虚拟化中的额外鼠标按钮无法工作(VMware/VirtualBox,Ubuntu主机)

我正在尝试在Ubuntu上运行VMware Workstation和/或VirtualBox。虚拟机在这两个应用程序中都能完美运行,除了额外的鼠标按钮(前进/后退)。在Ubuntu中,所有鼠标按钮都能正常工作。
虚拟化应用程序:VMware Workstation 10.0.1,最新的VirtualBox
我测试过的Ubuntu版本:12.04、13.10、14.04 beta
我测试过的客户操作系统:Windows 7,几个Linux操作系统(使用实时模式)
我测试过的鼠标(都带有侧边按钮):Logitech M510(unifying receiver),旧版Razer Copperhead,无名鼠标
我已经尝试了很多在线解决方案,例如在VMware WS的.vmx文件中更改鼠标设置(mouse.vusb.enable等),在VMware/VirtualBox中更改输入设置,重新安装客户操作系统上的Guest Tools等。
我认为这是Ubuntu的问题,而不是虚拟化应用程序的问题。 有人有解决办法吗?

mika209:你能在客户操作系统的终端中运行xev | grep -i "button"吗?然后移动到窗口,点击鼠标的前进和后退按钮。请将输出添加到你的问题中或者上传到Ubuntu Pastebin以便阅读。 - Anders F. U. Kiær
5个回答

可能的解决方法:
在编辑虚拟机的 .vmx 文件后添加以下内容:
mouse.vusb.enable = "TRUE"
mouse.vusb.useBasicMouse = "FALSE"
usb.generic.allowHID = "TRUE"

您可以在虚拟机中使用您的五键鼠标。要这样做,请打开您的虚拟机,然后导航到虚拟机 > 可移动设备 > [您的鼠标] > 连接(与主机断开连接)。您将会收到几个警告,告诉您不能再与主机一起使用鼠标,只需点击“确定”即可。

现在,无论是全屏模式还是窗口模式,您只能在虚拟机中使用鼠标。按下键盘上的Ctrl-G来去除主机鼠标图标,并完全沉浸在虚拟机中。一旦您需要在虚拟机外再次使用鼠标,按下Ctrl+Alt并释放。现在焦点回到您的主机操作系统。按住Alt并按下V以打开虚拟机菜单,使用箭头键导航到虚拟机 > 可移动设备 > [您的鼠标] > 断开连接(连接到主机)

现在一切都恢复正常了。希望Ubuntu或VMWare Player很快会有变化,让这个过程更加简单。


是的,我已经尝试在VMware的.vmx设置中添加usb.generic.allowHID = "TRUE"。之后你就可以直接将鼠标/人机界面设备连接到虚拟机上。但我认为这只是一种权宜之计而非真正的解决方案。 - mika209
同意。如果你计划在虚拟机中长时间专注工作,那么它是有效的,但最终并不太用户友好。 - MattSayar
1Windows 10 主机,Ubuntu 14.04 客户机。VMWare 11。添加这三行对我很有效。具体来说,useBasicMouse 行很重要。如果没有它,解决方案仍然适用,但我的鼠标会在全屏客户机中随机跳回主机操作系统。 - Halsafar
2对我来说完美地运作了!我只需要编辑.vmx文件添加这三行代码。我不需要断开鼠标与主机的连接,鼠标仍然可以在主机和客户机之间自动切换,就像以前一样。VMware Workstation 11,Windows 7主机,Ubuntu 12.04和16.04客户机。为了使此功能生效,虚拟机必须先关闭再重新启动 - 暂停/恢复操作是不够的。 - EM0
1VMware Workstation 12.5.2,Windows 7 主机,Ubuntu 17.04 客户机。刚刚停止了虚拟机,将这三行代码添加到 VMX 文件中,然后重新启动。解决了问题。 - Pierre Henry

要在VMware下使额外的鼠标按钮起作用,编辑configfile.vmx文件(追加以下行):
mouse.vusb.enable = "TRUE"
mouse.vusb.useBasicMouse = "FALSE"

上述设置将启用一个具有20个按钮的虚拟vmware鼠标。然而,在某些情况下,vmware无法将到达主机的鼠标事件映射到正确的客户端事件。
为什么无法发送正确的鼠标事件是一个很好的问题,但没有涉及到。
在客户操作系统中启动并运行以下命令。在终端中运行xev | grep -i "button"。移动到生成的窗口,单击您想要分配或交换的按钮一次。xev会输出已注册的鼠标事件,在许多情况下,应该是鼠标按钮8或9的额外鼠标按钮被接收为鼠标按钮事件16或17。
可以使用xinput重新分配鼠标按钮事件,以下示例将设备ID 8的鼠标按钮16设置为鼠标8,鼠标按钮17设置为鼠标9。
xinput set-button-map 8 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 8 9

我已经尝试过了。不幸的是,这并没有起作用。 - mika209
@mika209 你有使用basicmouse吗?你在虚拟机的客户操作系统中安装了vmware工具吗? - Anders F. U. Kiær
是的,我已经在每个虚拟机中安装了VMware Tools。.basicmouse = FALSE - 这些设置没有改变任何东西。但是在VirtualBox中也不起作用。所以我仍然认为这是Ubuntu的问题。 - mika209
@mika209,你能否将命令xinput | grep VMware | awk '{print substr($8,4);}' | xargs -L 1 xinput list的输出添加到你的问题或者http://paste.ubuntu.com/上?请在你的Ubuntu虚拟机中运行该命令,并确保上述设置仍然存在于该虚拟机的vmx文件中。 - Anders F. U. Kiær
好的,为了确保没有错误:Ubuntu 13.10 主机(额外的鼠标按钮可用)-> 最新的 VMware Workstation -> Ubuntu 13.10 客户机(带有 .vmx 中的 .vusb-settings 和已安装的 VMware-Tools)。结果是:额外的鼠标按钮不起作用(我测试过的鼠标:见上文)!这是您发布的命令的输出:http://paste.ubuntu.com/7211311/ 不管怎样,感谢您的回答! - mika209
mika209:你能在客户操作系统的终端中运行xev | grep -i "button"吗?然后移动到窗口,点击鼠标的前进和后退按钮。请将输出添加到你的问题中或者上传到Ubuntu Pastebin以便阅读。 - Anders F. U. Kiær
1这对我来说完美地运作了:Windows 7 x64(主机)+ SetPoint 6.65.62 + M705罗技鼠标,VMWare 10,Kubuntu 14.04 x64(客户端)。我可以立即看到xev | grep -i "button"的结果,并且正确地将按钮事件8/9映射为后退/前进。在Linux系统上,在Chrome和Firefox上无需任何其他配置即可正常工作。 - Angelos Pikoulas
1这对我也起作用了 - 谢谢!Fedora 24和Windows 8.1(x64)主机,配备Logitech G9。VMware Workstation 12.5。 - Devator
2非常感谢!在我的Windows 10主机和Ubuntu 16.04客户机上完美运行。在编辑.vmx文件后,我甚至不需要使用xinput来映射任何内容,额外的按钮可以原生地作为返回/前进功能。 - DaveTheScientist
1当我将它放在VMNAME.vmx文件夹中时,这对我起作用了。但是有没有办法使其全局化? - Michael Yoo
1我创建了该文件并在~/.vmware/config中添加了更改,使用.encoding = "UTF-8"头,并且它起作用了,所以我假设这是在全局范围内设置此项的方式(针对您的用户)。 (工作站14) - Michael Yoo
1我可以确认,在Windows 10主机上使用VMware Workstation 15.5和Ubuntu 19.10虚拟机作为客户端时,这是有效的。我只需将这两行添加到.vmx文件中。 - lanoxx

在VirtualBox和VMware中,您无法模拟超过3个按钮。这是因为它向客户系统呈现了一个(超级)标准的3按钮鼠标。如果他们愿意的话,可能会有可能,但目前的答案是否定的。

那么,为什么它在Windows上运作?因为Linux和Windows的实现遵循不同的路线图,并且"每个前端都有其自己获取鼠标输入的方式"(参见source)。这可以在Super User的另一个问题中看到


如果您在Windows 7/8上使用VMware或VirtualBox作为主机,额外的鼠标按钮将在许多客户操作系统中正常工作。这是如何实现的呢? - mika209
@mika209 不同的实现方式。就是这么简单。 - Braiam
2@braiam:我无法确定VirtualBox的情况,但是我可以告诉你VMware Workstation和Player支持24个按钮。等我有时间时,我会回来给你一个更新和扩展的答案。在此期间,如果你能更新你的回答,不包括VMware的话,那就更好了。 - Anders F. U. Kiær
根据OP在此处的评论,显然它不起作用。 - Braiam
@braiam,如果你查看时间戳,你会很容易发现OP并没有尝试更新的答案,也没有继续运行xev。然而,我已经不再关心了。我已经重现了这个问题,因为我经常使用相同的设置与vmware。我现在分享了这个知识。如果其他人想玩无知的游戏,随便他们。 - Anders F. U. Kiær

我尝试了所有这些,在我的Dell XPS 13,Windows 10,VMware Player 12,Ubuntu 14.04客户机上修复很简单。
启动控制面板,更改鼠标设置,鼠标和键盘中心,Microsoft鼠标设置,滚轮按钮。将其设置为中间鼠标单击,而不是默认的即时查看器。
这允许在Ubuntu中使用中间鼠标单击复制和粘贴。
詹姆斯

在Windows 10主机上测试过(在ubuntu上应该是一样的),使用VMware Workstation Player 12和罗技M510鼠标。

如果你这样做,你的鼠标将只能在虚拟机中工作,所以你需要了解键盘快捷键来启用和禁用,除非你有两个鼠标,或者像笔记本电脑那样有一个触控板和一个鼠标。

1. 前往您的虚拟机文件夹,找到.vmx文件。 2. 使用记事本编辑它,并添加以下内容: ``` usb.generic.allowHID = "TRUE" usb.generic.allowHID = "TRUE" usb.generic.allowLastHID = "TRUE" ``` 3. 打开虚拟机,导航至虚拟机 > 可移动设备 > [您的鼠标] > 连接(与主机断开连接)。这样做后,鼠标只能在虚拟机上工作。 4. 在虚拟机上安装罗技鼠标驱动/软件(如果需要,您可以在一切之前完成此步骤)。 5. 您可以按下键盘上的Ctrl+G来隐藏主机鼠标图标,完全沉浸在虚拟机中。 6. 当您想要再次在主机上使用鼠标时,按下Ctrl+Alt,然后释放,以使焦点位于VMware Player上,而不是虚拟机上。现在您可以使用常规的Windows键盘快捷键。在这种情况下,按下Alt+P打开VMware Workstation Player菜单,并使用键盘箭头键导航至虚拟机 > 可移动设备 > [您的鼠标] > 断开连接(与主机连接)