问题描述
我有一个问题正在变成一场噩梦,我认为可能更容易完全废弃Ubuntu并尝试别的东西。我有一台运行Ubuntu 12.04的HP PC。当我用我的鼠标left-click时,它有时是double-clicks(可能是50%的时间)。
到目前为止,这导致:随机发送未完成的电子邮件,随意突出显示和删除我不想删除的内容,同时编写电子邮件(非常令人沮丧),随机删除两个浏览器标签而不是一个(多次),并且(在某种意义上)尝试在桌面上移动窗口或从终端窗口移动cut-and-paste时,这是一个非常令人沮丧的end-user体验。感谢Alt
– F7
– 但我不想学习我使用的每个程序以及操作系统的键盘快捷键(而且不能使用copy-paste对我来说是一个很大的损失)。
我不是唯一有此问题的人,但谷歌搜索表明可能有多种原因;我在网上看过的修补程序都没有为我工作过。让我详细介绍一切,包括对其他人有用的修复,但不适用于我。哦 – 我有一个hp光学鼠标。
-
它不是一个破碎的鼠标。我在我的系统上试过两只老鼠 – 都表现出了问题。这两款鼠标在我的家用笔记本电脑上也可正常运行Ubuntu 12.04。
-
我的
/etc/X11/xorg.conf
只有几行,没有”InputDevice”部分。 -
我没有hald,或安装了hal包。
-
它开始于大约一周前,似乎没有变得更好或更糟。
-
在绝望中我刚刚升级到12.10但这并没有解决问题,现在我正在运行一个不是LTS的发行版(因此对我来说并不理想: – \)
但它使我的系统很难使用。
可能重要的更新:我尝试用xev做一些调查。在我看来,这些老鼠看起来很糟糕 – 这是常见的吗?我可以按住鼠标按钮,然后按(鼠标单击)(暂停)(鼠标释放)(非常短的暂停)(鼠标单击)(暂停)(鼠标释放)(非常短的暂停)(鼠标点击)等我想知道是否例如其他操作系统说“你不能释放,然后在0.05秒内再次点击,所以这一定是一个小故障,我会假设按钮从未被释放”。我可以告诉Ubuntu忽略release-and-then-reclick-almost-instantly事件吗?
这看起来像是一个糟糕的鼠标问题。也许我应该挖一个更新的鼠标?我只尝试过很老的: –
最佳解决方案
好吧,在受影响的机器上使用xev进行大量测试,并在各种系统上的各种鼠标之间切换,我相信我已经解决了这个问题。当然是YMMV。
我的解决方案:它是一只破碎的老鼠。
更确切地说,点击时激活的连接器有点老旧或有些东西,有时,当按住按钮时,连接完成,然后暂时断开,然后再次制作,导致双击。
异议:但是当我将它插入我的Windows机器时鼠标工作正常!
计数器:将以下伪代码行放入驱动程序或操作系统不是一件容易的事:“如果用户取消鼠标然后在0.05秒内再次点击它,那么这可能是一个脏连接器,所以让我们只是忽略那个“。因此,如果您将鼠标切换到运行另一个操作系统的另一台计算机和/或在不同的硬件上使用其他驱动程序(即使使用相同的操作系统,您可能正在使用不同的硬件,对吗?),您可能会得到不同的结果?
异议:但我尝试了另一只老鼠,它也出现了同样的问题!
反击:令人惊讶的是,来自同一家公司的两只老鼠都能以同样的方式打破,呃?你从来没有注意到,因为你试过的第二只老鼠在插入不同硬件时没有出现任何问题(见前一个计数器)。
如果你真的不相信你的鼠标坏了,那就测试一下:
$ xev
然后找到黑色背景的方块,单击它,然后观察输出。你肯定一定得到一个干净的”click”而没有别的吗?我经常会得到一个干净的点击,但偶尔会有一个“反弹”(点击忽略点击)。或许更好:
$ xev | grep ButtonRelease
现在将鼠标插入带有黑色轮廓的正方形(或该窗口中的任何位置),然后单击并取消单击20次。每次松开按钮时都应该获得”ButtonRelease”线,否则不会。我点击时偶尔会得到一个。
梦魇结束了。
次佳解决方案
禅和鼠标维护。似乎很多人在应用单击时双击鼠标有问题。鼠标按钮是微动开关。生活中的事实是开关触点反弹。它们实际上并没有弹跳而是摩擦。无论如何我们会称之为反弹。出于某种原因,程序员已经放弃了这个。应该在读取之前应用足够持续时间的等待循环以使触点稳定。什么都没有,我的解决方案的一个样本是在开关触点上放置一个电容器。我使用0.1uF的帽子没有特别的原因,除了我有一个很小的尺寸适合鼠标内部。我没有对停留时间,时间常数或决策水平进行任何花哨的分析,以找到最佳值。不管怎样,各种型号都有不同的参数。
我已经使用这个修改已经有一段时间了,到目前为止这个问题还没有重新出现。
要应用mod。找一个小尺寸的电容器,适合鼠标 shell 。我使用0.1uF,因为我有一个,这是一个很好的数字,但其他值可能会工作,但不要太大或太小。什么太大或太小都是实验的问题。太大可能会影响预期的双击,太小不会达到预期的效果。我把帽子的一条腿焊接在一个方便的位置,在那里它没有弄脏鼠标的内部结构,在电路板的铜面上,到0伏的平面(地球平面,如果你愿意的话)我勾住了盖子的另一条腿到开关主动用一根细线。我使用了一条腿很短的再生组件。一个新的可能会有足够长的腿到达需要的地方。您需要一个合适的精细烙铁来完成这项工作。
如果你不知道电容器。 0.1uF电容器可以指定为0.1uF或104或100nF,或者具有棕黑色黄色带。表面贴装类型也是一个不错的选择。用一些细线连接它。可以将它粘在电路板连接面上。
我有一个计划B,我可能会在下次尝试,或者当前计划最终失败。放弃用于spst PCB安装触觉薄膜开关的微动开关应该可以解决这个问题。这是键盘和键盘中使用的开关类型,并没有出现这个问题。脚印不像微动开关。提供7mm高的开关,其高度与现有的微动开关相同。较小的开关需要间隔到正确的高度。将支腿与开关主体成直角弯曲并将其粘贴到电路板上,使执行器与微动开关执行器占据的位置对齐。鼠标按钮必须击中正确的位置。用一些细线连接开关触点,理论上一切都应该是好的。
第三种解决方案
我为Ubuntu 14.10构建了一个修补过的xserver-xorg-input-evdev
。我使用了http://blog.guntram.de/?p=16(补丁可以找到here和here)和Debian包装手册中的说明。
以下是关于构建包的说明。
#!/bin/bash
# http://blog.guntram.de/?p=16
#
apt-get build-dep xserver-xorg-input-evdev
dquilt="quilt --quiltrc=${HOME}/.quiltrc-dpkg"
wget --output-document=evdev-debounce.patch http://blog.guntram.de/?ddownload=20
apt-get source xserver-xorg-input-evdev
cd xserver-xorg-input-evdev-*
$dquilt new debounce.patch
$dquilt add include/evdev-properties.h src/Makefile.am src/debounce.c src/evdev.c src/evdev.h src/debounce.c
patch -p1 <../evdev-debounce.patch
$dquilt refresh
$dquilt header -e
debuild -us -uc -b
cd ..
sudo dpkg -i xserver-xorg-input-evdev_*.deb
-
好消息:它奏效了。
-
坏消息:它并不总是有帮助。我的鼠标按钮接触非常糟糕,需要200毫秒的延迟,这使我无法接受double-clicking。另一只弹跳鼠开始工作正常。
编辑:感谢@MatijaNalis,补丁获取步骤可能是:
wget https://aur.archlinux.org/packages/xf/xf86-input-evdev-debounce/xf86-input-evdev-debounce.tar.gz
tar xzf xf86-input-evdev-debounce.tar.gz
# ...
patch -p1 < ../xf86-input-evdev-debounce/debounce.patch
第四种方案
这个问题由Jack Ganssle解释,这里:http://www.eng.utah.edu/~cs5780/debouncing.pdf – 联系反弹过滤。软件需要在任何应用程序中存在,从简单的single-board计算机到操作系统,以某种形式存在。
https://www.google.se/?gfe_rd=cr&safe=off#q=%2Bcontact+%2Bbounce+%2Bsoftware&safe=off
随着联系人/按钮变老,效果会变得更糟。 WD40可能不是用于电子产品的最佳喷雾剂,还有其他更适合的电子产品。谷歌’Contact spray’。
第五种方案
我有一个问题,一个额外的按钮点击两次。正如我已经将其映射到xbindkeys
(有关详细信息,请参阅How can I assign actions to all my mouse buttons?),我的解决方案是更改~/.xbindkeysrc
中的条目,如下所示:
"if [ ! -e /dev/shm/button ]; then touch /dev/shm/button; /usr/bin/xte 'keydown Control_L' 'key Page_Down' 'keyup Control_L'; sleep 0.2; rm /dev/shm/button; fi"
b:7
这为/dev/shm/
中的每个按钮创建一个”lockfile”(我希望它位于RAM上)并在0.2秒后将其删除。 xte
命令应在鼠标点击时完成,不得在0.2秒内完成两次。
(只是想我会分享我的解决方案,万一有人想要复制它或修复它。)
第六种方案
有一个软件错误,截至2014年6月,它没有修复。它不会发生在所有鼠标模型上。我的罗技老鼠很好,但大多数其他老鼠都失败了。这适用于RHEL,CentOS和Ubuntu。所有鼠标都在纯窗盒上工作,但KVM中存在同样的问题
还没有解决方案,开发人员确实知道它。
干杯。唐。