Linux: How to Swap Mouse Buttons
Here's how to swap mouse buttons on Linux, by command line.
In terminal, type xinput --list
to list devices.

xinput
output.
Each device has a name and id. For example, i have “Logitech USB Trackball” with id 10. You need the name or id to set its properties.
To swap mouse buttons, type this in terminal:
# swap the middle and right button for device 13 xinput --set-button-map 13 1 3 2
# swap the middle and right button for device named Logitech USB Trackball xinput --set-button-map "Logitech USB Trackball" 3 2 1
Normally, the button numbers in the command line are in order, like this: 1 2 3 ...
--set-button-map 2 1 3
means you set button 1 to do 2, and button 2 to do 1.--set-button-map 1 1 1
means set buttons 1 and 2 and 3 all to do button 1.
How to Find X11 Mouse Button Number?
Linux: X11 Mouse Button Numbering
Create Startup Script
The id for the input device may change when the machine starts, or if you plug/unplug your USB devices.
Better to use the device name. However, for some devices, the device name is listed twice.
~/ $ xinput --list ⎡ Virtual core pointer id=2 [master pointer (3)] ⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)] ⎜ ↳ Logitech Gaming Mouse G600 id=8 [slave pointer (2)] ⎜ ↳ Logitech Gaming Mouse G600 id=9 [slave pointer (2)] ⎜ ↳ LVT Recon gaming mouse id=10 [slave pointer (2)] ⎜ ↳ LVT Recon gaming mouse id=11 [slave pointer (2)] ⎜ ↳ Logitech USB Trackball id=12 [slave pointer (2)] ⎜ ↳ Logitech G700 Laser Mouse id=15 [slave pointer (2)] ⎜ ↳ Logitech G700 Laser Mouse id=16 [slave pointer (2)] ⎣ Virtual core keyboard id=3 [master keyboard (2)] ↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)] ↳ Power Button id=6 [slave keyboard (3)] ↳ Power Button id=7 [slave keyboard (3)] ↳ TrulyErgonomic.com Truly Ergonomic Computer Keyboard id=13 [slave keyboard (3)] ↳ TrulyErgonomic.com Truly Ergonomic Computer Keyboard id=14 [slave keyboard (3)]
You can have a shell script to get the device name and get the id.
Here's sample scripts for my mouses.
#!/bin/sh # swap middle and right button CM_STORM_RECON_ID=$(xinput list | grep "Recon" | head -n 1 | sed -r 's/.*id=([0-9]+).*/\1/') xinput --set-button-map ${CM_STORM_RECON_ID} 1 3 2
[see CM Storm Recon Mouse Review]
#!/bin/sh # logitech g600 # swap middle and right buttons G600_ID=$(xinput list | grep "G600" | head -n 1 | sed -r 's/.*id=([0-9]+).*/\1/') # xinput --set-button-map ${G600_ID} 1 2 3 xinput --set-button-map ${G600_ID} 1 3 2
[see Logitech G600 Gaming Mouse]
Save any of the above in a file as ~/.xprofile
.
The ~/.xprofile
will run when X11 starts.
Customize Mouse
- Windows: Swap Mouse Right-Click Middle-Click
- Windows: Single-click Open File
- Windows: Mouse Hover to Activate Window