如何禁用鼠标中键单击粘贴?


131

有没有办法禁用gnome上默认的鼠标中键粘贴行为?

我有一个灵敏的鼠标滚轮,每当我滚动文本时,有时它会将内容随机粘贴到文本中。当我将文件发送给粘贴有随机文本片段的其他人时,我失去了很多信誉。

我已经看到了一种解决方案,将鼠标的中间按钮映射到不存在的鼠标按钮,但这意味着完全摆脱了鼠标中键(即,不关闭任何标签,自动将链接打开到新标签中,等等)。 。我想保持鼠标中键处于活动状态,只是禁用粘贴行为。

当我用触摸板滚动文本时也会发生这种情况(偶然碰到两指而没有移动,嗡嗡声)。

因此,仅更换新鼠标并不能解决问题(事实上,我相信触摸板发生的频率要比鼠标发生的频率高)。


5
真正令人讨厌的默认行为。您是如何禁用它的?
umpirsky 2011年

5
如果您只想滚动时鼠标记录了中间点击,则建议您尝试使用另一种鼠标模型(可能是压力较大的鼠标模型)。在使用Linux数年之后,我再也没有为您的问题感到烦恼,实际上,单击中间的粘贴已证明非常有用:)
Maxime R.

3
@umpirsky我很难称其为白痴;但是,我同意这可能会很烦人(尤其是在图形程序中滚动时)
Vreality 2013年

2
我遇到了同样的问题,我个人认为这是一个巨大的安全漏洞。复制密码和密钥并不罕见,并且在尝试滚动时不小心将它们粘贴到随机网站中,否则肌肉记忆是一场噩梦。
Ryan The Leach

2
哦,所以我不是一个人遇到这个问题。首先,我很害怕自己的随机文本粘贴在网站的某些输入上,只是在意识到这是由系统造成的,并且将粘贴操作映射到了中点击和off之后。滚动时意外发生在我的鼠标上。希望将来将其默认删除。
Jurosh

Answers:


15

有关此问题的解决方案,请查看我撰写的本指南

或者,更直接地,这是在GTK中禁用“鼠标中键粘贴”功能的补丁


1
我使用的是gtk 2.0-0_2.24.10的Ubuntu 12.04 64位,但在dpkg-buildpackage行上失败了。它不会使用未提交的本地更改来构建,因此我必须运行dpkg-source --commit。
山姆·金

1
@Sam:感谢大家的注意。显然,该--source-option=--auto-commit选项可以传递给dpkg-buildpackage(由于不必编辑更改日志,因此该选项更加方便)。我已经更新了指南以反映这一点。
耶勒·盖尔特斯

1
我尝试了此解决方案,但是每次进入该sudo apt-get build-dep libgtk2.0-0部分时,都会出现“ Picking 'gtk+2.0' as source package instead of 'libgtk2.0-0' E: Unable to find a source package for gtk+2.0 帮助” 错误?
FCTW

1
@FCTW:我怀疑问题的原因是GTK3在现代发行版中已取代GTK2。因此,您必须通过运行类似的命令来查找已安装的GTK3库的软件包名称dpkg -l | grep libgtk。它可能类似于libgtk-3-0。我已经验证了我的补丁程序可以在早期版本的GTK3上运行;希望它仍然有效。
Jelle Geerts

2
这似乎是回答问题的唯一答案。不幸的是,它似乎已经过时了。当前有效的任何修复程序吗?(我一般是说。调整工具可以在某些程序(如Gedit)中将其关闭,但不能在大多数程序中将其关闭。)
Kvothe

42

我使用gnome-tweak-tool禁用Ubuntu 16.04中的中间按钮粘贴。

  1. 安装它

    sudo apt install gnome-tweak-tool
    
  2. 通过在已安装的应用程序中搜索“调整工具”来运行它,或者只需gnome-tweak-tool在终端中输入即可。

  3. 转到“键盘和鼠标”->“单击鼠标中键粘贴”
  4. 关掉。

    屏幕截图

而已。

或仅使用CLI

gsettings set org.gnome.desktop.interface gtk-enable-primary-paste false

在16.04测试。


4
重新启动后它不起作用:'(
Ahmad Muzakki

13
如果可行的话,使用“调整”工具将是迄今为止最好的方法。我关闭了单击鼠标中键的粘贴,它仍然与以前一样单击鼠标中键的粘贴。重新启动后相同。有人解决类似的问题吗?
Kvothe

2
@Kvothe:我刚刚注意到Tweak工具中的设置似乎只影响某些标准的Gnome程序,例如gedit,gnome-terminal,gnome-calculator等。另请参见tinyurl.com/y7qtak7g(此处的其他问题,没有答案)。我还注意到,中间按钮粘贴将复制上一次标记的所有文本,甚至不仅仅是显式复制的文本。然后剪贴板将填充该文本。一个非常烦人的功能。(但是,当文本在标准的Gnome程序(如gedit等)中最后被标记时,在单击中键时剪贴板将变为空白。)
trollkotze

3
同样有趣的是,对于使用当前选择覆盖剪贴板缓冲区的怪异的中键单击行为的解释:askubuntu.com/a/225879/653860 (但可悲的是,如该答案中所述,完全禁用了鼠标中键也禁用了我的鼠标滚轮完全
消失了

2
“然后剪贴板中将填充该文本。这真是个令人讨厌的功能。” 好吧,不,我必须纠正自己。这不是真的。看来复制和粘贴剪贴板与怪异的单击鼠标中键无关。单击鼠标中键将始终粘贴当前选定的内容。剪贴板不受此影响。
trollkotze

34

Jared Robinson提供了一个适用于我的计算机的简单解决方案

运行以下命令:

xmodmap -e "pointer = 1 25 3 4 5 6 7 8 9"

若要保留此行为,请编辑〜/ .Xmodmap并添加

pointer = 1 25 3 4 5 6 7 8 9

27
这不是完全禁用中间按钮吗?关闭标签,打开指向新标签的链接等等?
levesque 2011年

3
虽然从理论上讲这可以回答问题,但最好在此处包括答案的基本部分,并提供链接以供参考。
克里斯·哈珀

21
@HDave到底应该如何将其标记为一个问题的答案,该问题专门指出他看到了将鼠标中键重新绑定到其他键的解决方案,但是这些解决方案并不令人满意?这正是答案。
Thor84no 2014年

5
谁能解释这个幻数系列的含义?
尼尔·特拉夫特

1
@Neil Traft我没有过多研究这种确切的配置,但是根据我对输入事件系统的了解,当您拥有鼠标之类的输入设备时,当按下按钮时,它会发回标准输入事件,这些事件告诉您“按钮已更改状态”,“该按钮的ID为X”和“其当前状态已按下/释放”,通常gtk会将其接收的输入事件修改为映射按钮ID [0,1,2,3,4,5,6,7,8 ]到[1,2,3,4,5,6,7,8,9]要记住,大多数鼠标仅使用前3个按钮ID来指示左,中和右的按钮ID。所以现在中间是25号
2015年

28

我意识到这并不是您想要的答案,但是您可以在Firefox中将其关闭(例如,如果您不介意其他功能,但仍希望在Firefox中单击鼠标中键以在新标签页中打开链接)

在about:config中设置

middlemouse.contentLoadURL false
middlemouse.paste false

不是您问的,而是因为这个问题是从几个地方链接到的,所以我希望有人觉得这个答案有用。


3
+1很有帮助。我还要补充一点,在LibreOffice中,您可以通过Tools/Options/LibreOffice/View/Mouse将“鼠标中键”更改为首选设置来执行此操作。
汤姆·布鲁斯曼

21

目前这是不可能的-但是,正如您已经提到的,有一些方法可以禁用MOUSE 3按钮-或重新映射它-这些都不是问题的根源。X11主要选择。

虽然这不是解决方案,但希望这种解释可以清楚地说明原因。在Ubuntu中,有两个剪贴板在工作。第一个是大家都熟悉的freedesktop.org剪贴板(captures Ctrl+ C命令);第二个是剪贴板管理器,它自Ubuntu诞生之前就一直在使用-X11。X Server(X11)管理其他三个剪贴板:Primary SelectionSecondary SelectionClipboard。当使用指针选择文本时,它将文本复制到XServer的缓冲区中,即“主要选择”,并等待通过“鼠标3”按钮进行粘贴。其他两个被设计为供其他应用程序使用,以一种在应用程序之间共享公用剪贴板的方式。在这种情况下,Ubuntu中的freedesktop.org剪贴板管理器已经为我们做到了。

通过我的研究,我找不到禁用X11选择管理器的方法。没有可禁用此功能的编译标志,应用程序或配置值。基于每个应用程序有多种解决方法(这些应用程序中的大多数是命令行应用程序)-但在全球范围内没有。

我意识到这不是理想的解决方案-但这似乎是问题的真相。我可以召集的唯一相关解决方案实际上是黑客,创建一个执行无限while循环的脚本,该循环只是将null替换为Primary Selection。

首次安装xsel(用于操纵X选择的工具)sudo apt-get install xsel

代码如下:

while(true)
do
    echo -n | xsel -n -i
    sleep 0.5
done

如果将其放在脚本中并将其添加到启动脚本中,这应该不是问题。


4
是否有可能只清除缓冲区而不是取消所有选择的脚本?
levesque 2010年

2
而(真)?看起来它将杀死CPU :)
umpirsky

我尝试通过向xorg.conf添加选项“ ButtonMapping”“ 1 1 3 4 5”来映射按钮,但是该问题可以解决。
umpirsky

4
@umpirsky这while(true)不是问题,因为循环包含sleep 0.5在每次循环迭代中放弃半秒的CPU时间。因此(以及xsel构成循环另一部分的命令调用的轻巧性),即使在最慢的Ubuntu计算机上,循环占用的CPU资源也将非常小。
伊利亚·卡根

4
这在Unity上似乎无法正常工作,因为脚本会清除终端中的任何现有选择,这意味着您无法以任何方式从终端复制测试(在尝试复制时,未选择文本)。
Fantius 2012年

18

不知何故,我在Ubuntu安装上最终没有任何xmodmap文件,因此我不得不找到解决该问题的另一种方法。

看一下xinput命令。

xinput list | grep -i mouse

列出有关鼠标的信息。它显示我的鼠标是“ Dell Premium 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表示“关闭”。

位置在清单显示分配给该按钮的功能。因此,如果我的按钮图已读

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(右键)。

要制作左手鼠标,您需要做的是开始的按钮映射

3 2 1 4 5 .....

或者,在您的情况下,您似乎希望中间按钮执行与按钮1(向左按钮)相同的操作,因此您需要启动地图

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

在您的情况下,您可能具有不同数量的映射按钮,并且已经定义了一些特殊的按钮映射。Likwely,您的鼠标也有不同的名称。首先,获取鼠标的“名称”。然后,使用get-button-map操作查找您的基本按钮映射。最后,使用set-button-map选项,修改按钮2来执行操作1。

这不是永久性的变化。我在.bashrc中添加了必要的代码,以便每次我登录或打开终端时都执行。

希望这可以帮助。


谢谢(你的)信息。它进一步说明了鼠标按钮及其所应用的操作。但是,这不是我要寻找的解决方案。如果您在Chrome浏览器中的标签上单击鼠标左键(以我的示例为例),它将选择它(如果尚未选择)。用中间按钮单击它,将其关闭(即不单击X)。我也错过了在链接中单击鼠标中键使其在新选项卡中打开以供以后阅读的念头。我知道我可以替代克服这些,但我习惯了这种工作方式....
neildeadman

只是一个想法; 我的鼠标上有其他任何按钮,我说我有18个按钮,尽管我还没有实际找到其中的8个左右)可能是您想要的功能。尝试将其他按钮映射到第三个按钮,看看是否发现有用的东西。
Wes Miller

1
如果您将鼠标重新映射为两个按钮,则不应更改滚轮功能,因为滚轮按下按钮5和6(或7和8或类似的按钮)。
Wes Miller

我可以确认这对内置ThinkPad轨迹点和具有相同布局的Lenovo键盘均有效。在get-button-map联想键盘上回来了22个键的我,但同样的set-button-map <<name-or-id>> 1 0 3方法也适用于我
Milimetric

就是答案(尽管我认为您的描述已关闭)-get-button-map将列表中的位置链接到物理按钮,这与xmodmap相反,后者将列表中的位置链接到函数。使用set-button-map,我们可以将两个物理按钮映射到一个逻辑位置。对我来说是华硕zenbook pro。
zzzeek 2016年

5

我建议使用其中一种,它最适合我:

使用xbindkeys:只要按下中间按钮,就清除主剪贴板。至少在我的系统上,粘贴之前已清除它。详细信息:创建xbindkeys-config:

xbindkeys --defaults > $HOME/.xbindkeysrc

粘贴以下新热键:

"xclip -i /dev/null"    
    b:2``

重新加载xbindkeys(例如killall xbindkeys; xbindkeys)。做完了

使用xdotool:在窗口焦点更改时清除剪贴板(应与大多数windowmanager一起使用)。详细信息:执行以下命令:

xdotool search --onlyvisible . behave %@ focus exec xclip -i /dev/null

请注意,使用此命令,您仍可以在同一窗口内使用主剪贴板,或者在将其聚焦之前将中间鼠标按下到另一个窗口上(如果没有激活“聚焦于鼠标”或其他东西)。


3

到目前为止,我发现的最好方法是使用EasyStroke,它可以全局拦截中键单击并仅在某些应用程序中充当中键。

您可以在EasyStroke中添加一个“组”,以一次在多个应用程序中应用此拦截。我已设置为仅在某些文本编辑器(IDE和MATLAB)中禁用中键单击,并且可以按预期工作。

参考:http : //ubuntuforums.org/showpost.php?p=11811126&postcount=25

完整的EasyStroke操作方法:http//sourceforge.net/apps/trac/easystroke/wiki/Documentation


感谢将来的提示。刚开始时,我将只使用xinput完全禁用它,而不需要运行一些额外的程序,但是EasyStroke使得可以设置组,在其中可以禁用某些应用程序(主要是我的编辑器)的中间按钮,并且将手势添加到某些其他应用程序并使用中间按钮。到目前为止,效果很好(14.04 Gnome后备)。
Marty Fried

添加到我的评论中:使用EasyStroke一段时间后,我发现它通常无法阻止中间点击。由于我没有使用过手势,因此我放弃了该程序用于xinput。
Marty Fried

2

鼠标中键粘贴行为是X服务器(以及文本控制台上的gpm)的功能,据我所知至少不能将X.org配置为禁用它-您所能做的就是更改映射正如其他人已经建议的那样。

可以通过配置触摸板来避免不必要的中间点击,这是一种很好的选择,如果您更喜欢使用编辑器进行配置,请参见gpointing-device-settings(默认情况下未安装)或synaptics联机帮助页。


2

这是我发现的最简单的解决方案,它可以保持中键单击功能而不会粘贴东西。

首先安装sxhkdxsel

然后像这样配置./.config/.sxhkd/sxhkdrc

~button2
    echo -n | xsel -n -i
~control + c
    echo -n | xsel -n -i
~control + x
    echo -n | xsel -n -i

基本上就是这样。

现在启动sxhkd(或将其配置为在启动时启动)。现在,鼠标中键将不再粘贴任何东西,但将正常运行。(只要您仅使用ctrl + c和ctrl + x复制内容,如果使用鼠标复制内容,它可以粘贴一次,然后恢复正常。)


1

几个月前我遇到了同样的问题,我通过更换鼠标解决了!但是,正如您一样,我很沮丧,无法通过软件修复来优雅地解决简单的按钮映射问题。幸运的是,我在工作计算机上遇到了问题,而我的老板拥有各种备用鼠标控制器。这是一个免费的解决方案!

我认为适当的鼠标硬件实现不应在滚动时发送随机的中间点击。最近,我发现即使在使用Windows时,这种行为也会变得令人讨厌!

现在,我已经使用适当的硬件解决方案(更换鼠标)修复了硬件错误,我什至开始沉迷于“粘贴中单击”行为!

祝您快乐!

真诚的


1

下面的链接为我解决了这个问题。

https://wiki.ubuntu.com/X/Config/Input#示例:_Disabling_middle-mouse_button_paste_on_a_scrollwheel_mouse

上面的链接所引用的页面上有一个部分,说明如何通过执行一些命令来禁用滚动键上的鼠标中键,用户可以获取鼠标按键映射,也可以更改映射。如页面中所述,我通过执行以下命令禁用了中间按钮:

$ xinput set-button-map 4 1 0 3

5
OP特别提到他不想完全禁用中间单击按钮。
user369450 2014年

1

西南软件:Ubuntu 14.04,Gnome退后了。汉:我有一台笔记本电脑,所以中间的按钮实际上是笔记本电脑上/笔记本电脑上的鼠标。解决方案:转到Ubuntu SW中心并下载Unity Tweak Tool。启动调整工具。在“鼠标”设置下,它具有用于打开/关闭中键单击插入的开关。祝你有个愉快的一天。


我有相同的系统。我下载了Unity Tweak Tool,浪费了时间查看每个设置,但是没有这样的设置。也许您的意思是“ Tweak Tool”,我认为是Gnome Tweak Tool。它有一个设置,尽管它似乎不起作用。
Marty Fried

1

我尝试了xinput-redirection技巧,更改了中心鼠标的“按钮”(实际上是一个滚轮),因此它的行为就像鼠标左键一样。它仍然可以像滚轮一样工作,并且(显然)在我滚动过去时已停止将其粘贴到源代码中间的随机位置。

就我而言,命令是

xinput set-button-map "PixArt USB Optical Mouse" 1 1 3 4 5 6 7 8 9 10 11 12 13 14 15 16

但是YMMV是通过鼠标模型制作的。


1

如果您使用带触摸点/触摸板的lenovo X ...,我可能会为您提供部分答案。突触鼠标按钮存在“已知”错误。如果您尝试使用USB鼠标并没有问题,但是使用触摸板/接触点鼠标(内置在键盘中),您确实会有随机响应,可以在键入时删除大量文字,那么这可能就是我在谈论的错误。

https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1506817

如果适合您的情况,请在该错误报告中将您的姓名添加到已识别此错误的人员列表中。也许如果我们中有更多人对此进行报告,它将得到解决。


0

它不仅仅是一个gnome功能,我认为它几乎可以在任何地方使用,它也可以在控制台中使用,而且我认为即使在我的“ Scratch Linux”中也可以使用。

因此,即使在内核中的某个地方,它实际上也是一项基本功能。

顺便说一句:它确实很有用,它不是像Ctrl + V这样的常规粘贴,用光标标记的所有内容都存储在第二个存储中,而使用middleclick可以粘贴您最后标记的内容。


1
BTW2:它将粘贴到您单击的位置,而不是“文本”光标所在的位置。
phiphi 2010年

1
收到您的意见真是太好了,但这不是OP的要求!
Matt Fletcher 2013年

0

使用我在以上文章中学到的知识,此bash一线式工具对我而言非常理想...

mouse_id=$(xinput list | grep 'Mouse' | awk '{print $9}' | sed 's/[^0-9]//g') && xinput set-button-map "$mouse_id" 1 0 3

2
OP特别提到他不想完全禁用中间单击按钮。
user369450 2014年

我修改了您的单线以支持多只小鼠:xinput list | grep 'Mouse' | grep -o 'id=[0-9]*' | grep -o '[0-9]*' | xargs -i xinput set-button-map "{}" 1 0 3
Kurt,

0

您可能想要尝试模拟两个按钮的鼠标。使用两个按钮的鼠标,您可以通过同时单击两个鼠标按钮(而不是滚动轮)来进行粘贴。

安装gpointing-device-settings:

sudo aptitude install gpointing-device-settings

http://live.gnome.org/GPointingDeviceSettings

或者,如果您不想安装gpointing-device-settings,并且不被命令行选项所困扰,请参阅https://wiki.ubuntu.com/X/Config/Input。在此Wiki页面上有几个命令行/配置选项,选择您喜欢的一种。


这是否仍允许我使用滚轮滚动应用程序(例如Chrome)?我会尝试的,谢谢!
neildeadman 2012年

应用程式已安装,但看不到有什么帮助。链接到文档已损坏。
HDave 2014年

0

对于Gnome应用程序,您可以在“键盘和鼠标”选项卡下使用gnome-tweaksgnome-tweak-tool软件包的新名称)“中间单击粘贴”选项,或直接编辑org.gnome.desktop.interface / gtk-enable-primary-paste Gnome选项。

对于KDE应用程序,似乎有一个等效的解决方案

对于整个X(包括非Gnome应用程序),您可以安装XMousePasteBlock,然后必须运行该XMousePasteBlock(对于用户而言这是足够的,不需要root)才能正常工作。这将完全禁用中间点击粘贴,而不会禁用其他中间点击功能。


0

对我有用的唯一答案是在https://unix.stackexchange.com/a/277488/288916 Radivarig(所有功劳归于他)给出。请注意,我必须做出一项更改才能使其生效:

安装xbindkeys:

sudo apt-get install xbindkeys xsel xdotool

~/.xbindkeysrc使用以下文本为xbindkeys创建配置文件 :

"echo -n | xsel -n -i; pkill xbindkeys; xdotool click 2; xbindkeys"
b:2

使用以下方式加载配置文件

xbindkeys -p

将此行添加到〜。/ bashrc中,以便xbindkeys始终在启动时加载。

这是对我有用的,但是Radivarig建议的是改用

"echo -n | xsel -n -i; pkill xbindkeys; xdotool click 2; xbindkeys"
    b:2 + Release

这最后一个不适用于我,但是如果版本不起作用,我建议尝试另一个。

经过长时间的寻找,这是我发现的唯一可以普遍关闭鼠标中键而不必完全禁用鼠标中键的解决方案。


请注意,对于现有的已批准答案,他们要么不回答问题,而是告诉您如何完全禁用鼠标中键,要么提供仅在少数程序中有效的解决方案(仅在gedit和gnome终端中提供调整解决方案和其他几个),或者他们只是简单地说这是不可能的。


spawn的回答具有相似的精神,并且可能也有用,在找到此解决方案之前我没有看到它。


-1

这是一个很好的问题,我还没有答案。一种快速而又肮脏的解决方法是将其重新映射为0,而不是0。这样,它将中间的“单击”变为左键单击,并且不会影响您的滚动条……这是迄今为止我能想到的最好的方法。

注意:此信息来自Ubuntu论坛,而不是我自己的头!:)


-3

你检查了gpm吗?有关更多信息,请访问http://manpages.ubuntu.com/manpages/lucid/man8/gpm.8.html。可通过sudo aptitude install gpm透明方式获得。我在ubuntu软件包中看不到disable-paste程序,但是-A选项可能值得尝试。


5
我不理解gpm ..在它们的软件包描述中说:“此软件包试图成为Linux控制台上运行的应用程序的有用鼠标服务器。” 这与在窗口模式下运行的应用程序有什么关系?
levesque 2010年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.