Logitech Performance MX on Linux

Everyone, I have a confession to make.

I have been sudo’ing lately. And I think I like it.

I’m not doing anything extreme, but the progression from my interest in PowerShell within Windows lately has grown from a slight fetish for auto-syntax highlighting, to nearly preferring to perform as much systems administration as I can from a command line. The Elementary OS (while not very hardcore, I know) has been an awesome segway for me from Windows to a lightweight, familiar, and fairly immersive (by someone with a MS background) into the Unix operating system. Going into this, I knew that I would have some hurdles with drivers and other extensive levels of support that I have become used to with a superbly popularized OS like Windows 10, but the challenge was something that I looked forward to. So after I figured out how to get my Dropbox, OneDrive, and a few other things that were fairly simple within Windows setup in Elementary, I realized through browsing the how-to articles that there was one major thing I was missing.

Support for the Logitech SetPoint software to customize the single thumb button on my Performance MX mouse. I have customized this button to a single keystroke – CTRL + W – to be able to quickly close tabs while browsing.

I quickly realized that there isn’t a direct port for SetPoint for Linux, but as usual, there sure were a million workarounds. The following is a short walk-through for what a fairly illiterate Windows user went through in order to recreate this functionality. I’m really documenting this for my own reference if I need to remember how to do this in the future, but am gladly sharing it out with anyone else that is trying to do this.


In order to get this to work, I relied on the following:

  • xbindkeys
  • xev
  • xautomation
  • xinput

I know there there are options to use a GUI alternative with the xbindkeys_config-gtk2 package or xbindkeys-config, but I preferred doing this via command line tools editing the config file directly.

Xbindkeys is a program that enables us to bind commands to certain keys or key combinations on the keyboard. Xbindkeys works with multimedia keys and is window manager / DE independent, so if you switch much, xbindkeys is very handy.

Xev is a program while allowed me to figure out what the exact button on my Performance MX mapped to. For those out there landing here from Google looking for some quick references, its b:10.

Also, if you’re looking to simply recreate the default functionality of using this button as window selector, I’d advise you to reference this walkthrough found HERE.

First, get everything installed with the following:

Once finished, start up xev to find out what the button you are looking to configure maps to on the back end. Starting the application will create a little white window which you can place your mouse in and execute whatever button click you’d like. In real-time, you will get a whole slew of information around what the OS is capturing, including cursor moves, so limit what you’re doing to a minimum. Alternatively, start xev with the following parameters to only capture button clicks:

Review the output in your terminal window for a few line items referring to a buttonrelease. Mine looked like the below:

The above shows that the click maps to “button 9”. This will be our reference for the configuration file.

We now need to create the configuration file that will be used as the reference for xbindkeys

This is where we will add our keystroke mapping. Open file with gedit, nano, or whatever your favorite editor is.

We will use xte here to map the stroke out in the configuration file. Depending on what your mapping is (obviously), this is where you will list out the action. Formatting is as follows:

begin the line with xte, and append the series of keystrokes for the mapping when you click the mouse button. The example above will simulate clicking the CTRL key, clicking the left mouse key, and then releasing the ctrl key upon release of the mapped mouse button click.

My final code block added to my xbindkeysrc file was as follows:

These commands can be further customized to perform in-app actions, functions, and other processes rather than just executing keystrokes. I won’t go into details around this here, but there are plenty of references online for how to do this.

To apply these changes, save the file and restart the service.

After this was all complete, I added the xbindkeys to my autostart group to ensure that this worked upon reboot.

Application Launcher > System Settings > Applications > Startup tab > add “xbindkeys” as a custom command

I would also recommend installing a great package called Solaar for monitoring battery life, adjusting DPI, pairing and unpairing to a unify receiver, and enabling other features like smooth and side scrolling.

HERE is a great walkthrough that helped me get this all done as well.