244

Is there a way to disable the middle mouse button paste behavior that is here by default on gnome?

I have a sensitive mouse wheel and whenever I scroll texts, sometimes it pastes stuff randomly into the text. I lose quite a lot of credibility when I send a file to someone else that has random text snippets pasted all over it.

I have seen a solution that goes by mapping the mouse's middle button to a non-existant mouse button, but that implies getting rid of the middle mouse button altogether (i.e. no tab-closing, opening links into a new tab automatically, etc.). I'd like to keep my middle mouse button active, just disable the pasting behavior.

This also happens when I scroll text with my touchpad (accidentally hit two-fingers without moving, bam.)

So the problem will not be fixed just by changing for a new mouse (in fact I believe it happens more often with my touchpad than with my mouse).

Flyk
  • 1,480
  • 3
  • 18
  • 24
levesque
  • 4,572

28 Answers28

106

I use gnome-tweaks for disabling middle mouse button paste.

  1. Install it

    sudo apt install gnome-tweaks
    
  2. Run it by searching "tweaks" in the Dash or just type gnome-tweaks in the terminal.

  3. Go to Mouse & Touchpad -> Middle Click Paste

  4. Turn off.

    enter image description here

That's it.

Or using just CLI

gsettings set org.gnome.desktop.interface gtk-enable-primary-paste false
karel
  • 122,292
  • 133
  • 301
  • 332
Sunny127
  • 1,305
  • 2
  • 9
  • 4
79

I realise that this is not exactly the answer you want, but you can turn this off in Firefox (e.g. if you don't mind the feature elsewhere, but still want middle click in Firefox to open links in new tabs)

In about:config, set

middlemouse.contentLoadURL false
middlemouse.paste false

Not what you asked, but as this question is linked to from a few places I hope someone finds this answer useful.

Ben
  • 799
51

Jared Robinson gave a simple solution that works on my machine:

Run the following command:

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

To persist this behavior, edit ~/.Xmodmap and add

pointer = 1 25 3 4 5 6 7 8 9
Tapper
  • 2,780
28

This currently isn't possible - though, as you have mentioned, there are ways to disable the MOUSE 3 button - or remap it- none of those get at the source of the issue. The X11 Primary Selection.

While this isn't a solution, hopefully this explanation will make it clear WHY. In Ubuntu there are two clipboards at work. One, which everyone is familiar with, the freedesktop.org clipboard (captures Ctrl+C command) The second is a clipboard manager that has been at play since before Ubuntu even existed - X11. The X Server (X11) manages three other clipboards: Primary Selection, Secondary Selection, and Clipboard. When you select text with your pointer it gets copied to a buffer in the XServer, the Primary Selection, and awaits pasting by means of the Mouse 3 button. The other two were designed to be used by other applications in a means to share a common clipboard between applications. In this case the freedesktop.org clipboard manager in Ubuntu already does this for us.

Through the extent of my research I can not find a way to disable the X11 selection manager. There are no compilation flags, applications, or configuration values that can disable this. There are various ways around this on a per application basis (majority of these applications being command line ones) - but nothing on a global scale.

I realize this isn't an ideal solution - but seems to be the truth to the issue. The only relevant solution I could muster is actually a hack, create a script that executes an infinite while loop that just replaces the Primary Selection with a null value.

First install xsel (Tool for manipulation of the X selection) sudo apt-get install xsel

The code is as follows:

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

If you place this in a script and add it to your startup scripts this shouldn't be an issue.

Marco Ceppi
  • 48,827
22

Somehow, I ended up without any xmodmap files on my Ubuntu install, so I had to find a different approach to this problem.

Take a look at the xinput command.

xinput list | grep -i mouse

which lists information about your mouse. It shows my mouse is "Dell Premium USB Optical Mouse" and also that I have "Macintosh mouse button emulation". Armed with that info, I can

xinput get-button-map "Dell Premium USB Optical Mouse"

which gives me a listing that looks like

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

Here is the useful, required knowledge. My mouse has, theoretically, 18 buttons. Each button's default action has the same name as it's button number. In other words, button 1 does action 1, button 4 does action 4, etc. Action 0 means "off".

The position in the listing shows the function assigned to that button. So if my button map read

1 3 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 

this would mean button 1 (position 1) does action 1 (normal left button), button 2 (position 2) does action 3 (middle button) and button 3 (position 3) does action 2 (right button).

To make a left handed mouse all you would need would be a button map that starts

3 2 1 4 5 .....

Or, in your case, it looks like you want the middle button to do the same thing as button 1 (left button) so your map needs to start

1 1 3 ....

I'd reset my mouse button mappings thus:

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

In your case, you may have a different number of mapped buttons and have some special button map already defined. Likwely, your mouse has a different name, too. First, get your mouse's "name". Then, use the get-button-map operation to find your base button map. finally, use the set-button-map option, modifying button 2 to do action 1.

This is not a permanent change. I added the necessary code to my .bashrc so it executes every time I login or open a terminal.

Hope this helps.

20

For a solution to the problem, please view this guide I wrote:

A while ago, I wrote a patch to disable the 'middle mouse button paste' functionality in GTK. I thought that there would be others who want to disable it as well, and hence I thought I should write a small guide to explain how this feat can be accomplished.

Now, some may ask, why would anyone want to disable it? There are a few reasons:

  • The middle mouse button doesn't actually paste the so-called XA_CLIPBOARD clipboard, but the XA_PRIMARY clipboard. This is probably counterintuitive to many (users coming from Windows, perhaps), and therefore some may view it as more user-friendly to disable the "inconsistent" or unexpected behavior.
  • Some may accidentally paste text using the middle mouse button, and want to avoid that.

A bit of background regarding the XA_CLIPBOARD and XA_PRIMARY clipboard: The XA_PRIMARY clipboard is used mostly for storing selections. Whenever you select some text in for example the GNOME Text Editor (gedit), this text is copied to the XA_PRIMARY clipboard. This text is not pasted when you use the 'Edit -> Paste' menu item, only when you click the middle mouse button. The XA_CLIPBOARD clipboard is mostly used when one uses the general 'Copy/Paste' functionality (through keyboard shortcuts, such as CTRL+C and CTRL+V, or through the menu items 'Edit -> Copy' and 'Edit -> Paste').

Perhaps a patch of this sort (or more drastic changes to the X clipboard and/or how libraries/applications use it) could some day become standard in Linux. I realize opinions on this differ greatly. However, for people who seek to minimize the chances of accidentally pasting some random text, the patch can be pretty useful. For example, with the patch, you can't accidentally paste (at least, with the middle mouse button) text into a document you are editing, or into a web page, or into an instant message, etc.

The guide is for Debian or Debian-based Linux distributions such as Ubuntu and Mint.

What follows are terminal commands with a brief description of what they do (the lines starting with # are comments, which contain these descriptions). You should start a terminal and enter the commands one by one, after carefully reading the descriptions.

# This is a small guide that explains how to patch GTK so that the middle mouse
# button doesn't paste text anymore.

NOTE:

The below instructions are for GTK2. However, they should be easy to adapt

for GTK3 (at the time of writing, the patch works fine for GTK3 too).

First, update the system by first synchronizing the package index files, and

then upgrading the packages.

sudo apt-get update sudo apt-get upgrade

Get the build dependencies and essential packages needed in order to compile

code and create packages.

sudo apt-get build-dep libgtk2.0-0 sudo apt-get install build-essential

Create a temporary directory, in which we will store the GTK sources and

later on the packages.

mkdir /tmp/gtk cd /tmp/gtk

Download the actual patch that will disable the 'middle mouse button paste'

functionality (it should be stored in the directory '/tmp/gtk', and will be,

if you indeed executed the command 'cd /tmp/gtk').

wget http://subversion.assembla.com/svn/slipstream/patches/gtk_disable_middle_mouse_button_paste.patch

Retrieve the GTK sources.

apt-get source libgtk2.0-0

You should adapt this line so that it changes to the correct directory (the

name of the directory that I used here will probably not match the name of

the directory that was created during 'apt-get source libgtk2.0-0', as it

contains a version number that often changes). You can find out what the

correct directory is by entering 'ls -d */' (without the quotes) and looking

at the names of the directories that it shows.

cd gtk+2.0-2.20.1

Apply the patch that we downloaded earlier.

patch -p1 < /tmp/gtk/gtk_disable_middle_mouse_button_paste.patch

The output of the previous command should be:

patching file gtk/gtkselection.c

If it wasn't, then something went wrong. Maybe you mistyped something, maybe

the current directory isn't the correct directory, maybe the GTK sources

were changed and the patch doesn't work anymore, etc.

Build the package (you may have to be patient, this may or may not take a

while).

dpkg-buildpackage -uc -us --source-option=--auto-commit

You should adapt this line so that it installs the correct package. The

package that we want to install is the package containing the GTK library,

thus not the 'bin', 'udeb', 'common', 'dev', or 'doc' package. To find out

what the exact package is that you should install, try to find the package (a

file with a name ending in '.deb') which is closest to the example filename I

used here (the packages are stored in '/tmp/gtk', and you can list the

packages using the command 'ls /tmp/gtk/*.deb' (without the quotes)).

sudo dpkg -i ../libgtk2.0-0_2.20.1-2_i386.deb

And lastly, to make sure that only the patched library is in use, you should

either log out and back in, or restart your computer.

And then, the 'middle mouse button paste' functionality should be disabled.

To test whether it is, try selecting some text in the GNOME Text Editor, or

in a GNOME Terminal, and then press the middle mouse button while the cursor

hovers over some place where you can normally type text. If indeed no text

appears, then it appears that the patch worked.

If however, the patch did not work, try to re-read this document, to see if

you made any mistake. And if you did, you may want to either start all over

again (should be fail-safe), or continue with the guide from the point where

you made a mistake.

Or, more directly, here's the patch to disable the 'middle mouse button paste' functionality in GTK:

diff -ur gtk+2.0-2.20.1/gtk/gtkselection.c gtk+2.0-2.20.1-patched/gtk/gtkselection.c
--- gtk+2.0-2.20.1/gtk/gtkselection.c   2010-05-01 22:14:29.000000000 -0500
+++ gtk+2.0-2.20.1-patched/gtk/gtkselection.c   2011-09-17 10:45:37.000000000 -0500
@@ -1065,6 +1065,24 @@
   display = gtk_widget_get_display (widget);
   owner_window = gdk_selection_owner_get_for_display (display, selection);
  • if (selection == gdk_atom_intern("PRIMARY", TRUE)) {
  •  GtkSelectionData selection_data;
    
  •  selection_data.selection = selection;
    
  •  selection_data.target = target;
    
  •  selection_data.type = gdk_atom_intern(&quot;STRING&quot;, TRUE);
    
  •  selection_data.format = 8;
    
  •  selection_data.data = (unsigned char *)&quot;&quot;;
    
  •  selection_data.length = 0;
    
  •  selection_data.display = display;
    
  •  gtk_selection_retrieval_report(info, selection_data.type,
    
  •          selection_data.format, selection_data.data,
    
  •          selection_data.length, time_);
    
  •  return TRUE;
    
  • }
  • if (owner_window != NULL) { GtkWidget *owner_widget;

17

The only answer that worked for me was given on https://unix.stackexchange.com/a/277488/288916 Radivarig (All credits go to him). Note that I had to make one change though to make it work:

Install xbindkeys:

sudo apt-get install xbindkeys xsel xdotool

Create a configuration file for xbindkeys ~/.xbindkeysrc with the text:

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

Load the configuration file using

xbindkeys -p

Add this line to ~./bashrc so that xbindkeys always loads on startup.

This is what works for me but what Radivarig suggests is to instead use the line

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

This last one does not work for me but if one of the versions does not work I suggest to try the other.

After a long time looking this is the only solution I found to work for me that turns off the middle mouse paste button universally without having to disable the middle mouse button completely.


Note that for the existing up-voted answers either they don't answer the question, instead telling you how to disable the middle mouse button completely, or they give a solution that only works in a few programs (tweak-solution only in gedit and gnome terminal and few others) or they simply say it is impossible.


spawn's answer is of a similar spirit and might also work, I did not see it before I found this solution.

Kevin Bowen
  • 20,055
  • 57
  • 82
  • 84
Kvothe
  • 713
  • 6
  • 20
9

Solution for both Wayland and X11 users

This script will disable middle mouse paste, it supports both Wayland and X11, and you will still be able to use the middle mouse button normally:

#!/bin/sh
#Script to disable middle mouse paste; Dependencies: xsel, wl-clipboard

if [ "$XDG_SESSION_TYPE" == "wayland" ]; then wl-paste -p --watch wl-copy -p </dev/null # Usually works. #wl-paste -p --watch wl-copy -cp # 100% Effective, may cause issues selecting text in GTK applications. fi

while [ "$XDG_SESSION_TYPE" == "x11" ]; do xsel -fin </dev/null # 100% Effective, May cause issues selecting text in GTK applications. done

Old Answer (A way for X11 that shouldn't cause issues with text selection in GTK): https://askubuntu.com/revisions/1079832/4

Cestarian
  • 281
9

For Gnome applications you can use gnome-tweaks (new name of gnome-tweak-tool package) under the "Keyboard & Mouse" tab there's the "Middle Click Paste" option or editing directly the org.gnome.desktop.interface/gtk-enable-primary-paste Gnome option.

For KDE applications seems that there's an equivalent solution.

For the whole X (including non Gnome applications) you can install XMousePasteBlock which then has to be running (by the user is enough, no root required) in order to work. This disables completely the middle click paste without disabling the other middle click functions.

5

I suggest using one of these, which work mostly well for me:

using xbindkeys: whenever middle-button is pressed, clear the primary clipboard. At least on my system it is cleared, before the pasting happens. Details: create xbindkeys-config:

xbindkeys --defaults > $HOME/.xbindkeysrc

Paste the following new hotkey:

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

Reload xbindkeys (e.g. killall xbindkeys;xbindkeys). Done.

using xdotool: Clear the clipboard on window focus change (should work with most windowmanagers). Details: Execute the following command:

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

Note that with this command you can still use the primary clipboard within the same window, or pressing middlemouse onto another window BEFORE focusing it (if you don't have "focus follows mouse", or somthing, activated).

spawn
  • 251
4

For anyone experiencing this while using a JetBrains IDE like PyCharm/IntelliJ/Android Studio/etc - note that these IDEs actually have their OWN "paste on middle click" setting which you can disable in settings.

You may have disable middle-button BOTH in the IDE AND using whatever you find here to get it to work.

Peter
  • 191
3

The best way I've found so far is to use EasyStroke, which can globally intercept middle-button click and allow to behave as middle button only in certain apps.

You can add a "group" in EasyStroke to apply this interception in multiple applications at once. I've set to disable middle click in some of my text editors, IDE and MATLAB only and works as intended.

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

Complete EasyStroke How-To: http://sourceforge.net/apps/trac/easystroke/wiki/Documentation

dbdq
  • 137
3

the link below fixed the problem for me.

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

the page refered by the above link has a section for how to disable the middle mouse paste on scrollwheel, by executing few commands the user can fetch the mouse buttons mapping and can also change the mapping. as explained in the page i disabled the the middle button by executing the command:

$ xinput set-button-map 4 1 0 3
2

On Kubuntu an additional step may be required to solve the problem.

It seems that Klipper, the clipboard manager provided by KDE, breaks the scripts that fix the behavior by clearing the clipboard selection.

The following will globally disable paste on middle click while retaining all middle mouse button and ctrl+c/v functionality.

Follow the steps described in this answer, that is:

  1. Install xbindkeys xsel xdotool

  2. Place this in ~/.xbindkeysrc

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

In step 2. you may need to remove the + Release part as described in this post, depending on what works on your machine.

Set up xbindkeys to run on startup.

Then open Klipper, e.g. via the clipboard icon in the system tray > right click > Configure Clipboard. Uncheck the option 'Prevent empty clipboard'. Reboot and the problem should be solved.

The latter idea is thanks to milaq's XMousePasteBlock.

2

This middle mouse button paste behavior is a feature of the X server (and gpm on the text console) and as far as I know at least X.org can't be configured to disable it - all you can do is to change the mapping of the physical mouse buttons as others already suggested.

Chances are good that you can configure your touchpad to avoid unwanted middle clicks, see gpointing-device-settings (not installed by default) or the synaptics manpage if you prefer to use your editor for configuration.

1

In KDE Plasma 5.20 I had to disable both using this answer and klipper (System Tray Settings -> Disable klipper)

Now middle-click pasting is disabled but the but button still works for closing tabs etc.

Dionysius
  • 337
1

I had the same problem a few months ago and I solved it by changing the mouse! But, as you, I was frustrated that simple button mapping problem can't be solved elegantly by a software fix. Fortunately, I had the problem on my job computer, and my employer owns a variety of spare mouse controllers. It was a no cost fix!

I think a proper mouse hardware implementation should not send random middle clicks while scrolling. Recently I found this behaviour to get annoying even while using Windows!

Now that I've fixed the hardware bug with the proper hardware solution (change the mouse) I even started an addiction to "paste on middle-click" behaviour!!

Happy linuxing!

Sincerly,

1

SW: Ubuntu 14.04, with Gnome fall back. HW: I have a laptop and so the middle button is actually the mouse on/in the laptop. Solution: Go to Ubuntu SW center and download Unity Tweak Tool. Start Tweak Tool. Under the Mouse settings it has switch to turn on/off the middle click insert. Have a lovely day.

1

I may have a partial answer for you, if you are using a lenovo X... with touchpoint/touchpad. There is a "known" bug with the synaptics mouse buttons. If you try a USB mouse and have no problem, but with the touchpad/touchpoint mouse (build into the keyboard) you do have random responses that can delete swaths of text as you type, then this may be the bug I'm talking about.

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

If this fits your situation, then add your name to the list of people who have identified this bug, at that bug report. Maybe if there are many more of us reporting this, it would get fixed.

0

The only working solution I know is to disable copy on text selection instead:

Clone https://github.com/CyberShadow/hax11, read the docs (about NoPrimarySelection)

Build hax11, add preload of hax11.so using export LD_PRELOAD=<PATH_TO_HAX11.so> (see repo docs), add

Enable=1
NoPrimarySelection=1

to ~/.config/hax11/profiles/default

See original answer

d9k
  • 200
0

I tried the xinput-redirection trick, changing the center mouse "button" (actually a wheel) so it acts just like the left mouse button. It still works as a wheel, and has (apparently) stopped pasting things into random places in the middle of my source code as I scroll past.

In my case the command was

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

but YMMV by mouse model.

muru
  • 207,228
0

You might want to try emulating a two button mouse. With a two button mouse you paste by clicking both mouse buttons at the same time (rather then the scroll wheel).

Install gpointing-device-settings:

sudo aptitude install gpointing-device-settings

http://live.gnome.org/GPointingDeviceSettings

Alternately, if you do not wish to install gpointing-device-settings , and you are not bothered by command line options, see https://wiki.ubuntu.com/X/Config/Input On this wiki page there are several command line / configuration options, choose the one you prefer.

Panther
  • 104,528
-1

Contrary to the title, the 10-year old problem seems to be really

I have a sensitive mouse wheel and whenever I scroll texts, sometimes it pastes stuff randomly into the text. I lose quite a lot of credibility when I send a file to someone else that has random text snippets pasted all over it.

Also, you can't safely write programs.

Less destructive than "to disable the middle mouse button paste", I see 3 possible solutions, only the first one effective so far:

1-Exchange buttons 2 and 3

xinput set-button-map <id> 1 3 2

where <id> should be replaced by the mouse id as explained above by Wes Miller.

To make the change permanent, writte in .xprofile. (.bashrc won't work unless you use bash.)

Thus,

  • if you accidentally click button 2 while scrolling, this will only open the alternate action menu, that does nothing harmful by itself,

  • last but not least, you can can still click to paste X buffer with button 3 (right).

The inconvenience is that you need to reverse your clicking habits, which feels like driving on the other side of the road.

2-Find a mouse with a fourth button and remap button 2 to button 4

However, I am unable to certainly identify such a mouse on the market. If you know one for sure I am interested but not a costly wired gaming mouse.

I have tried another 3 button mouse: the wheel click is less sensitive but the problem persists.

3-Use middle button emulation

% xinput list-props <id>

This should return something (among others) like

libinput Middle Emulation Enabled (353):    0

Activate middle button emulation:

xinput set-prop 15 353 1

Now, you also need to deactivate button 2. Remapping to 0 or 25 won't work because it will also deactivate middle button emulation. This kills solution 3.

Tested on Ubuntu 20.04.

-1

To solve this issue, I went to the Mouse option by searching it in the menu bar, then I saw Enable middlemouse pate and I disabled it.


[NOTE]:

I'm using Ubuntu Mate 22.04


[UPDATE]:

enter image description here

Benyamin Jafari
  • 4,234
  • 4
  • 27
  • 37
-1

Using what I learned in the posts above, this bash one-liner works perfectly for me...

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

That's a good question, which i don't have an answer for (yet). A quick and dirty workaround is to remap it NOT to 0, but to 1. This way, it turns middle-"click" to left click, and does not affect your scroller... It is so far the best I can think of.

Note:This information came from Ubuntu Forums, not my own noggin! :)

Tiede
  • 169
-2

It's more than a gnome feature, i think it works almost everywhere, it works in the console too, and I think it worked even in my "Linux from Scratch".

So it's really a basic feature perhaps even somewhere in the kernel.

BTW: It's really useful, and it's not the regular paste like Ctrl + V, everything that is marked with the cursor goes in a second storage and with middleclick can paste, what you marked last.

phiphi
  • 17
-3

did you check out gpm ? More info at http://manpages.ubuntu.com/manpages/lucid/man8/gpm.8.html. Available via sudo aptitude install gpm on lucid. I don't see the disable-paste program in the ubuntu package however, the -A option may be worth giving a try.

koushik
  • 5,132