106

Can anyone tell me how to configure all the buttons on a Logitech MX 620 mouse under Ubuntu 12.04?

Specifically, I like to make one of them just the Ctrl key (for control clicking webpages) and another one Ctrl+W to close tabs. I also normally make the scroll wheel page down for each click (otherwise it hurts my arms to be scrolling so much). I make pushing the wheel to the left = pageback and pushing to the right = page forward.

I've searched for other answers to this and found something related here

But when I posted a followup post to solve the issue, no one responded --perhaps I made the mistake of posting to a question that had been "solved." I'm not sure how I'm supposed to reopen a question that is pertinent to my question but doesn't quite solve mine.

2

17 Answers 17

107

You're going to need several applications for this, to install them run

# Ubuntu 14.04 and newer
sudo apt-get install xbindkeys xautomation x11-utils

or

# Before Ubuntu 14.04
sudo apt-get install xbindkeys xautomation xev

(xev was merged into x11utils, as of Ubuntu 14.04 or greater)

Step 1

You need to find the button numbers for the buttons on your mouse. Run xev. You will see a litle white windows appear, put your mouse in it and press your mouse buttons (it's best to do this one button at a time). You should get output like this for each button:

ButtonRelease event, serial 41, synthetic NO, window 0x4c00001,
root 0x2e9, subw 0x4c00002, time 25804905, (31,28), root:(821,80),
state 0x110, button 1, same_screen YES

(note: xev also capture mouse movement so you might need to sift through mouse movement events to find your button events; e.g.: xev -event mouse | grep Button --before-context=1 --after-context=2)

This is what is important from that output: button 1. That tells us that particular button is button one. I would store this in a .txt file for now.

Step 2

Create the xbindkeys config file using:

xbindkeys --defaults > $HOME/.xbindkeysrc  

Next we need to add the key/button bindings to the config file. You can open this file with gedit $HOME/.xbindkeysrc. This is where the fun begins. We are going to use xte to set bindings to our buttons.

To make a button act as Ctrl we would add:

"xte 'key Control_L'"
b:1  

This would bind Ctrl to mouse button one.

If you will tell me the button numbers of your buttons and what you want each to do, I will write the script for you.

14
  • 17
    The easiest way to reduce the insanity of the xev output is by running the output through grep: xev | grep -A2 ButtonPress ; this will leave all the mouse motion events, focus events, etc. and just show the ButtonPress events.
    – Lambart
    Sep 19, 2014 at 18:46
  • 2
    My mouse is also a G300 and I can't get this to work. The buttons are incorrectly mapped and two buttons are mapped to the same Control_L button and I have no idea how to map them since when pressed they don't identify themselves.
    – SNH
    Sep 7, 2015 at 17:17
  • 15
    "xbindkeys -p" to apply the changes Nov 28, 2016 at 10:46
  • 3
    I have managed to make this working for my logitech mx518. Had to use b:9 + Release and b:8 + Release with, for example ctrl+w: "xte 'usleep 1000' 'keydown Control_L' 'key W' 'keyup Control_L'"
    – IgorZ
    Nov 22, 2019 at 19:45
  • 2
    For those who don't want to install unnecessary packages: Each entry in .xbindkeyrc is generally of the form "<shell command>"\n<key spec>. Thus, you don't necessarily have to use xte; you can use any command you like. And note xbindkeys --defaults > $HOME/.xbindkeysrc sets some default shortcuts (e.g. Ctrl+f to run xterm) which you may want to comment out. As usual, ArchWiki is extremely helpful.
    – ynn
    Jun 2, 2020 at 3:52
29

The best answer in 2021 is Input Remapper (formerly Key Mapper):
https://github.com/sezanzeb/input-remapper

No more hacking required.

2023 update:

One potential problem with this tool is that it installs a background service that registers a dummy game controller to achieve the key mapping functionality.

Unfortunately, this can trick some games to use that controller instead of mouse & keyboard. This can (rarely) cause some games that don't have internal controller settings to become unplayable until this service is shut off.

You can temporarily disable the remapper service using:

sudo systemctl stop input-remapper.service

Re-enable with:

sudo systemctl start input-remapper.service

screenshot

4
  • 1
    It's not compatible with Ubuntu 20.04
    – biendltb
    Aug 20, 2021 at 4:06
  • 3
    That screenshot is from Ubuntu 20.04.
    – panta82
    Aug 20, 2021 at 8:13
  • 2
    Thanks. I had some errors when trying to build it from source but installing from the released deb package is fine. Amazing GUI tool.
    – biendltb
    Aug 22, 2021 at 16:44
  • 1
    input-remapper also works as designed on Ubuntu 22.04. v1.4 is in default apt repositories and works without issue with Logitch M510. The project releases page currently has 5 updates since v1.4, but v1.4 works fine out-of-the-box for my needs. Thanks for this tip. github.com/sezanzeb/input-remapper/releases
    – smcnally
    Feb 13 at 22:52
23

I followed the @Seth's instructions, but the binding I wanted was to for the thumb button an the M705 to do CTRL + Left-click (for opening links in a new tab in chrome browser). The binding I needed to add was this:

"xte 'keydown Control_L' 'mouseclick 1' 'keyup Control_L'"
    b:10 + Release

It waits for the thumb button to be released, and then presses control key, performs the mouse click, then releases the control key.

2
  • This solution, not the above, worked like a charm on Ubuntu Mate 16.04 with Logitech M705 mouse. I've used it to assign copy and paste to side buttons so my settings looked like this: "xte 'keydown Control_L' 'key c' 'keyup Control_L'" b:9 "xte 'keydown Control_L' 'key v' 'keyup Control_L'" b:8
    – Draco
    Dec 9, 2016 at 11:36
  • 4
    "xbindkeys -p" to apply the changes. Jan 17, 2018 at 11:11
14

For anyone who wants to bind copy and paste actions to mouse buttons:

  1. Follow Seth answer (the one with Step 1, Step 2 and sudo apt-get install xbindkeys xautomation xev)
  2. Put following lines in your .xbindkeysrc file:

This is for copying:

"xte 'keydown Control_L' 'key c' 'keyup Control_L'"
b:9

This is for pasting:

"xte 'keydown Control_L' 'key v' 'keyup Control_L'"
b:8

*b:9 means button 9 on the mouse (check button numbers with xev)

  1. It won't work right away, you must reload .xbindkeysrc first or restart your machine.
7
  • oh wow this worked for me perfectly. trying to set up those keys for the past 4 years and only now able to do this. thank you! btw it is super important to know what buttons those are, for me they were 16 and 17 on my mouse..
    – Tio TROM
    May 6, 2017 at 14:56
  • NOTE: the b:9 etc HAVE TO be on a new line in the config file. I put them on the same line and couldn't work out why it wasn't working. Jan 17, 2018 at 11:12
  • This worked for me for the GUI, but it doesn't work for the Bash terminal. Is there any way to make copy/paste work for BOTH the GUI and the shell with the same buttons?
    – JoeMjr2
    Nov 27, 2018 at 3:58
  • @JoeMjr2 In Bash terminal you most probably would paste using Ctrl+Shift+V and copy by pressing Ctrl+Shift+C. So you would need some way to use application-specific mapping. I am not sure how though. Maybe you could use some terminal emulator and set up hotkeys to copy paste the standard way - then your copy paste mouse buttons should work.
    – zwolin
    Nov 27, 2018 at 7:12
  • one can get example of xbindkeys configuration by running: $ xbindkeys --defaults Feb 19, 2020 at 17:14
4

You should install Solaar, a Linux tool that allows you to manage Logitech Unifying Receiver mice and keyboards, that comes with both a GUI and command line interface. To do that add the following repository and install by executing the following commands:

sudo add-apt-repository ppa:daniel.pavel/solaar

sudo apt-get update

sudo apt-get install solaar

This will allow you to increase and maximize you mouse's DPI, monitor battery, enable smooth scrolling and side scrolling. To get the multi window and zoom button working you can visit this site which walks you through the easy steps to get the functionality you are looking for:

http://www.ralf-oechsner.de/opensource/page/logitech_performance_mx

4
  • I did this on my C720/crouton. When I ran solaar, it crashed back to the start screen. I had to restart (and figure out the command was sudo startxfce4) and removed solaar. May 15, 2014 at 22:44
  • Solaar was very buggy for me on 14.04 and eventually just wouldn't run at all. I realize the original question was about 12.04, but thought it was worth mentioning. Maybe save someone some time.
    – hal
    Jan 24, 2015 at 0:49
  • 17
    -1. This answer does not answer the question. solaar does not do any mapping of the mouse buttons.
    – Twifty
    Apr 19, 2015 at 4:43
  • didnt work for me either.
    – Sadegh
    Feb 12, 2016 at 7:24
4

You should already have these as they should come with Ubuntu, but run this just in case.

sudo apt-get install libdaemon-dev libglade2-dev libgtk2.0-dev 

Now, download & install

  1. btnx-config
  2. btnx In this order.

To install:

Unzip, and cd into each of these folders.

In each of them run:

./configure
make
sudo make install

Once both of them are installed, run

sudo btnx-config

In Configurations tab, click Detect Mouse & Buttons

enter image description here

In Buttons tab, assign your mouse button a key or functionality. Make sure you ☑ check mark enabled.

enter image description here

Lastly, in Configurations tab, click on Restart btx button so your changes take effect.

enter image description here

5
  • Worked well on ubuntu disco. One correction: It should be just ./configure, not ./configure make. Also you don't need sudo with make.
    – panta82
    Jun 15, 2019 at 21:27
  • @panta82 I took those directly from the README.md file
    – No Sssweat
    Jun 20, 2019 at 8:03
  • I know. There is a mistake in the README file :)
    – panta82
    Jun 20, 2019 at 9:10
  • So this didn't quite work for me as it didn't override the defaults so each mouse button press resulted in two inputs, ie 1p, 2l, 3, (where the numbers are the defaults and letters are new binds)
    – Garglesoap
    Jul 4, 2020 at 4:48
  • Still can't use DPI change buttons. Jan 12, 2021 at 7:21
3

I too have the g700s gaming mouse. The good news is that it was expensive (for a mouse) and the manufacture actually built it to a high standard. The functions for the mouse are stored in the mouse. The bad news is to configure it correctly you need to use the logitech software that only runs in windows.

So...basically you need to plug the mouse into a windows box, and configure it exactly how you want it. I'd recommend utilizing the switch profiles function so you can set it up good for normal usage, ie: running your linux desktop, compiz functions (switching apps, switching workspaces, toggling maximize, etc), and then make another profile for gaming (possibly with a different refresh rate) and the gaming buttons. As for compiz consider setting the 4 side thumbs buttons to alt, ctl, shift, superkey, as this will make using switching easier with the scroll wheel. alt + scroll wheel up becomes thumb button 1 + scroll wheel up.

My scheme:

thumb button 1 (forward lower) = alt

thumb button 2 (forward upper) = shift

thumb button 3 (rear lower) = ctrl

thumb button 4 (rear upper) = superkey (windows key)

index finger middle button = ctrl + alt + numpad 5

index finger closer to you = tab

index finger farther away from you = alt-f4 (compiz/linux/winX close app)

compiz defaults:

switch workspace = alt + ctl + mouse drag = lower 2 thumb buttons together + mouse click and drag; sounds complicated when typed it out but it's very efficient to use.

switch apps = alt + tab = lower thumb forward button + index finger closer button (remember for this to work well you need to keep holding down thumb button, so you can switch past 1 app)

fading a window (transparency) = alt + scroll wheel = thumb lower forward button + scroll wheel

Then go haul it back over to your linux box and it works perfectly.

The key bindings described above works great, but consider battlefield 4 also has a terrible time recognizing the mouse as a mouse with 10 buttons so for that I had to map my 4 thumb buttons to = , \ and ;. But obviously in linux this is silly, and to re-bind the = key to "next app" is a lesson in futility, especially when coding hahahaha.

MUCH NEEDED LINKS IF USING VIRTUALBOX TO RUN WINDOWS 7:

https://stackoverflow.com/questions/20021300/usb-devices-are-not-recognized-in-virtualbox-linux-host

https://www.youtube.com/watch?v=-0OyrvbZNwo

1

I've been trying to do something similar, and I've come across this page: http://ubuntuforums.org/showthread.php?t=65471

Hopefully it works for mx 620 as well.

1

I have a Logitech MX 500 and wanted to map the lateral keys with Copy and Paste actions (it is very useful).

I used this guide to understand how to configure the xbindkeysrc file and be able to map the keys.

2
  • 2
    You know that moving the mouse pointer to the start/end of the text you want to copy and then press down the left button and keep holding it till you get to the end/start of what you want to copy and it's copied. When you want to paste you press the middle button (if you just have a two button mouse, press both left and right button at the same time) and you paste the text. No need to configure anything, this is out of the box on all Unix and Linux machines with a XWindows System. Please keep in mind we ain't using a featureless microsoft product but GNU/Linux
    – user350566
    Nov 20, 2014 at 14:29
  • @user350566 This kind of copy+paste has some limitations. Sometimes you want the other clipboard aka Ctrl+C / +V. Just saying.
    – donquixote
    Jan 27, 2016 at 20:09
1

I made a solution that works with Wayland.

Its here https://github.com/mathportillo/wayland-mouse-mapper

It uses evemu to send a device event notice to the kernel, so it's not restricted by Wayland

A summarized bash script that show how it works is below (most of the commands require root privileges)

find your device:

libinput list-devices

to directly find your pointer device name use:

libinput list-devices | grep pointer -B3 | grep -o '/dev/input/event[1-9]*'

to list your device events use (change event5 to your pointer device name):

libinput debug-events --device /dev/input/event5

to bind commands to your device events use:

while read line; do
    echo ${line} # line represents a command
    # your code goes here
done < <(stdbuf -oL libinput debug-events --device /dev/input/event5 & )

to trigger a mouse event use:

evemu-event /dev/input/event5 --sync --type EV_KEY --code KEY_PAGEUP --value 1

type can be other than keystroke, and code can be other than PageUp, value is 1 for pressed and 0 for released yes, your mouse can trigger keystrokes, the system will interpret it the same as keyboards, its all just events from event devices.

A script that merge all the above concepts on a working mapper, that works on Wayland and can be configured as a service to start on system startup, can be found in the git repo above.

1

Scroll up and down with mouse forward and back buttons

First, install the required packages:

$ sudo apt install x11-utils xbindkeys xautomation

Next, use xev provided by x11-utils to detect the exact button numbers of the back and forward buttons of the mouse.

$ xev |grep -A2 ButtonPress

For my wired vertical Anker mouse, back and forward are respectively buttons 8 and 9.

ButtonPress event, serial 37, synthetic NO, window 0x3600001,
    root 0x1da, subw 0x0, time 1708382, (68,54), root:(939,498),
    state 0x10, button 8, same_screen YES
--
ButtonPress event, serial 37, synthetic NO, window 0x3600001,
    root 0x1da, subw 0x0, time 1711030, (69,48), root:(940,492),
    state 0x10, button 9, same_screen YES

wired vertical Anker mouse

Continue by creating a hidden file named .xbindkeysrc in your home directory with the following contents:

"xte 'keydown Down'"
b:8

"xte 'keyup Down'"
b:8 + Release

"xte 'keydown Up'"
b:9

"xte 'keyup Up'"
b:9 + Release

The xte command is provided by the xautomation package.

Finally, log out and in again from the desktop for these changes to take effect. You can now scroll up and down in browsers and other programs by pressing and holding the mouse back and forward buttons.

1

I think https://github.com/sezanzeb/key-mapper will most likely be able to do it in that case.

2
  • Finally a GUI that "just works". Thanks very much for your tool!
    – L_W
    Jul 15, 2021 at 8:27
  • Its name has changed to "Input Remapper" but it is also available in Ubuntu Software from universe repo.
    – w-sky
    Apr 1, 2023 at 20:43
0

in Debian you have a xbindkeys-config package which will help you configure your key/button bindings. So do:

sudo apt-get install xbindkeys-config
2
  • 2
    That program just crashes whenever I try to do anything with my G300.
    – SNH
    Sep 7, 2015 at 17:02
  • I think xbindkeys-config works reasonably well. But all my mouse buttons arent captured by it, it only works with keyboard key strokes.
    – phil294
    Feb 18, 2021 at 17:03
0

Lomoco is included in Ubuntu Software Center and specifically is designed to deal with Logitech Mouse vendor-specific customizations. It can possibly accomplish some of the things you are trying to do.

http://manpages.ubuntu.com/manpages/trusty/man1/lomoco.1.html

1
  • doesn't work for the G700
    – m4l490n
    Nov 18, 2016 at 7:04
0

So I have been using my performance MX on my ubuntu machine for about 6 months. I left most buttons default, but I did go ahead and make the thumb button the Super key which is handier than going to the top left corner of the screen in gnome. And I made the zoom button a control button. But it is set to turn on CTRL and turn off CTRL with separate clicks. This really helps since I have one 4K display and one 1080, so I can click the zoom button once, scroll the wheel to zoom in and out fo web pages, and when I have the web page scaled how I want, I click the zoom again. Here is my xbindkeysrc settings:

"/usr/bin/xte 'keydown Control_L' &"
b:13
"/usr/bin/xte 'keyup Control_L' &"
Control + b:13
"/usr/bin/xte 'key Super_L'"
b:10 + release
1
  • 1
    This doesn't seem to answer the question asked. Nov 12, 2015 at 2:27
0

btnx might be a simple solution for button remapping with Logitech mouses as it should be working with all brands. It has an easy graphical interface and can learn about available buttons. btnx was part of the standard repositories years ago, but has been removed. It is currently available here: https://launchpad.net/~oliverstar/+archive/ubuntu/ppa

0

If you want to add CTRL+Home and CTRL+End you add following lines:

#CTRL + Home (Go to top of the page)
"xte 'keydown Control_R' 'key Home' 'keyup Control_R'"
  b:6

#CTRL + End (Go to down of the page)
"xte 'keydown Control_R' 'key End' 'keyup Control_R'"
  b:7  

PS:

to find your mouse key code:

 xev | grep button 

to test your shortcut:

killall  xbindkeys && xbindkeys -n -v

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .