问题描述
有没有办法可以禁用鼠标中键按钮粘贴行为,默认情况下在gnome上?
我有一个敏感的鼠标滚轮,每当我滚动文本时,有时它会随机地将东西粘贴到文本中。当我将文件发送给其他人时,我会失去相当多的可信度,而其他人则随意地粘贴文本片段。
我看到一个solution,它通过将鼠标的中间按钮映射到一个non-existant鼠标按钮,但这意味着完全摆脱鼠标中键(即没有tab-closing,自动打开链接到一个新的选项卡等)。我想让我的鼠标中键启动,只是禁用粘贴行为。
当我用触摸板滚动文本时也会发生这种情况(意外地碰到two-fingers而没有移动,bam。)
所以这个问题不会通过改变一个新的鼠标来解决(事实上,我相信它比我的鼠标更频繁地发生在我的触摸板上)。
最佳解决办法
要想解决这个问题,请查看我写的指南:http://www.assembla.com/spaces/slipstream/wiki/Disabling_GTK’s_middle_mouse_button_functionality
或者,更直接地,这里是禁用GTK中的’中鼠标按钮粘贴’功能的补丁:http://subversion.assembla.com/svn/slipstream/patches/gtk_disable_middle_mouse_button_paste.patch
次佳解决办法
Jared Robinson gave a simple solution适用于我的机器:
运行以下命令:
xmodmap -e "pointer = 1 25 3 4 5 6 7 8 9"
要坚持这种行为,请编辑〜/.Xmodmap并添加
pointer = 1 25 3 4 5 6 7 8 9
第三种解决办法
我意识到这不是您想要的答案,但您可以在Firefox中关闭此功能(例如,如果您不介意其他地方的功能,但仍希望在Firefox中单击以在新选项卡中打开链接)
在about:config中设置
middlemouse.contentLoadURL false
middlemouse.paste false
不是你问的,但是因为这个问题与几个地方有关,我希望有人发现这个答案有用。
第四种办法
目前这是不可能的 – 尽管如上所述,有些方法可以禁用鼠标3按钮 – 或者重新映射它们 – 这些都不会导致问题的根源。 X11主要选择。
虽然这不是一个解决方案,但希望这个解释能够说明为什么。在Ubuntu中有两个剪贴板在工作。其中一个是每个人都熟悉的freedesktop.org剪贴板(捕获Ctrl
+ C
命令)。第二个是剪贴板管理器,自从Ubuntu甚至存在之前一直在使用 – X11。 X服务器(X11)管理三个其他剪贴板:主要选择,次要选择和剪贴板。当您用指针选择文本时,它将被复制到XServer中的缓冲区(主要选区),并通过鼠标3按钮等待粘贴。另外两个被设计为由其他应用程序使用,以在应用程序之间共享公共剪贴板。在这种情况下,Ubuntu中的freedesktop.org剪贴板管理器已经为我们做到了这一点。
通过我的研究,我找不到禁用X11选择管理器的方法。没有可以禁用此功能的编译标志,应用程序或配置值。在每个应用程序的基础上(这些应用程序的大部分都是命令行的),有各种方法 – 但在全球范围内没有任何应用。
我意识到这不是一个理想的解决方案 – 但似乎是这个问题的真相。我唯一能够想到的相关解决方案实际上就是一个破解,创建一个脚本来执行一个无限的while循环,它只是用一个空值替换Primary Selection。
首先安装xsel
(用于处理X选择的工具)sudo apt-get install xsel
代码如下:
while(true)
do
echo -n | xsel -n -i
sleep 0.5
done
如果将它放在脚本中并将其添加到启动脚本中,这应该不成问题。
第五种办法
不知何故,我最终没有在我的Ubuntu安装任何xmodmap文件,所以我不得不找到一个不同的方法来解决这个问题。
看看xinput命令。
xinput list | grep -i mouse
其中列出了有关鼠标的信息。它显示我的鼠标是“戴尔高级USB光电鼠标”,并且我有“Macintosh鼠标按键模拟”。有了这些信息,我就可以
xinput get-button-map "Dell Premium USB Optical Mouse"
这给了我一个看起来像的列表
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
这是有用的,必需的知识。理论上,我的鼠标有18个按钮。每个按钮的默认动作与其按钮编号具有相同的名称。换句话说,按钮1执行动作1,按钮4执行动作4等。动作0意味着”off”。
列表中的位置显示分配给该按钮的功能。所以如果我的按钮Map读取
1 3 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
这意味着按钮1(位置1)执行动作1(正常的左按钮),按钮2(位置2)执行动作3(中按钮)和按钮3(位置3)执行动作2(右按钮)。
要制作左手鼠标,您需要的只是一个按钮Map
3 2 1 4 5 .....
或者,在你的情况下,它看起来像你想要中间的按钮做按钮1(左按钮)相同的东西,所以你的Map需要开始
1 1 3 ....
我会重置我的鼠标按钮映射,因此:
xinput set-button-map "Dell Premium USB Optical Mouse" 1 1 3 5 6 6 7 8 9 10 11 12 13 14 15 16 17 18
就你而言,你可能有不同数量的映射按钮,并且已经定义了一些特殊的按钮映射。可以肯定的是,你的鼠标也有不同的名字。首先,获取鼠标的”name”。然后,使用get-button-map操作来查找您的基本按钮映射。最后,使用set-button-map选项,修改按钮2来执行操作1。
这不是一个永久的变化。我将必要的代码添加到我的.bashrc中,以便每次登录或打开终端时都会执行。
希望这可以帮助。
第六种办法
我使用gnome-tweak-tool来禁用Ubuntu 16.04中的中间按钮粘贴。从这里下载:
https://apps.ubuntu.com/cat/applications/gnome-tweak-tool/
安装它。在安装的应用程序中搜索”tweak tool”。运行。转到“键盘和鼠标” – > “Middle-click粘贴”关闭。
而已。在Ubuntu 16.04上测试过
第七种办法
我建议使用其中的一种,这对我来说主要适用于:
使用xbindkeys:无论何时按下middle-button,清除主剪贴板。至少在我的系统上,它在粘贴发生之前被清除。详细信息:创建xbindkeys-config:
xbindkeys --defaults > $HOME/.xbindkeysrc
粘贴以下新热键:
"xclip -i /dev/null"
b:2``
重新加载xbindkeys(例如killall xbindkeys; xbindkeys)。完成。
使用xdotool:在窗口焦点更改时清除剪贴板(应与大多数窗体管理器一起使用)。详细信息:执行以下命令:
xdotool search --onlyvisible . behave %@ focus exec xclip -i /dev/null
请注意,使用此命令,您仍然可以在同一个窗口中使用主剪贴板,或者在将中间鼠标按到另一个窗口之前将其聚焦(如果您没有“聚焦在鼠标后面”或某些东西被激活)。
第八种办法
目前为止我发现的最好方法是使用EasyStroke,它可以全局拦截middle-button点击并允许在某些应用程序中表现为中间按钮。
您可以在EasyStroke中添加”group”,以便一次在多个应用程序中应用此截取。我已经设置禁用中间点击一些我的文本编辑器,只有IDE和MATLAB,并按预期工作。
参考:http://ubuntuforums.org/showpost.php?p=11811126&postcount=25
完成EasyStroke How-To:http://sourceforge.net/apps/trac/easystroke/wiki/Documentation
第九种办法
这中间的鼠标按钮粘贴行为是X服务器(和文本控制台上的gpm)的一个特性,据我所知至少X.org不能被配置为禁用它 – 你所能做的就是改变映射像其他人已经提出的物理鼠标按钮。
如果您希望使用编辑器进行配置,则可以配置触摸板以避免不必要的中间单击,请参阅gpointing-device-settings(缺省情况下未安装)或synaptics联机帮助页。
第十种办法
下面的链接为我解决了这个问题。
通过上述链接提到的页面有一节介绍如何通过执行几条命令来禁用滚轮上的中间鼠标粘贴,用户可以获取鼠标按钮映射,也可以更改映射。正如页面中所解释的那样,我通过执行命令禁用了中间按钮:
$ xinput set-button-map 4 1 0 3