R

ratslap

Linux configuration tool for Logitech mice (currently only G300S)

Name Last Update
.gitignore Loading commit data...
G300s_Default_Configuration.txt Loading commit data...
G300s_USB_sniffing.txt Loading commit data...
LICENSE Loading commit data...
Makefile Loading commit data...
README.creole Loading commit data...
app.h Loading commit data...
git.h.TEMPLATE Loading commit data...
lang.h Loading commit data...
log.c Loading commit data...
log.h.TEMPLATE Loading commit data...
main.c Loading commit data...
make.options.conf.DEFAULT Loading commit data...
manpage.1.TEMPLATE Loading commit data...
     ##### /##                          #######  ###
  ######  / ##                        /       ### ###
 /#   /  /  ##                 #     /         ##  ##
/    /  /   ##                ##     ##        #   ##
    /  /    /                 ##      ###          ##
   ## ##   /       /###     ######## ## ###        ##      /###       /###
   ## ##  /       / ###  / ########   ### ###      ##     / ###  /   / ###  /
   ## ###/       /   ###/     ##        ### ###    ##    /   ###/   /   ###/
   ## ##  ###   ##    ##      ##          ### /##  ##   ##    ##   ##    ##
   ## ##    ##  ##    ##      ##            #/ /## ##   ##    ##   ##    ##
   #  ##    ##  ##    ##      ##             #/ ## ##   ##    ##   ##    ##
      /     ##  ##    ##      ##              # /  ##   ##    ##   ##    ##
  /##/      ### ##    /#      ##    /##        /   ##   ##    /#   ##    ##
 /  ####    ##   ####/ ##     ##   /  ########/    ### / ####/ ##  #######
/    ##     #     ###   ##     ## /     #####       ##/   ###   ## ######
#                                 |                                ##
 ##                                \)                              ##
                                                                   ##
                                                                    ##

RatSlap

Linux configuration tool for Logitech mice //(currently only G300/G300S)//

Introduction

RatSlap aims to provide a way to configure configurable Logitech mice from within Linux.

Availability

RatSlap source is available on GitLab, GitHub and BitBucket with the primary (public) repository being GitLab.

RatSlap binary and archive should be signed with my GPG key ( 231A 94F4 81EC F212 ).

Bug Tracker

Bugs are tracked on the Quadronyx Bug Tracker.

Usage

NOTE: The Logitech G300 and G300s differ only by name and physical appearance, otherwise they are functionally (and USB VID:PID) identical.

The Logitech G300/G300s has 3 button modes, affectionately known as F3, F4 and F5. For each of these modes, you can assign an LED colour, report rate (speed at which the mouse communicates with the computer), DPI setting(s) and button/key combinations.

NOTE: You cannot remap the scrollwheel. These generate button 4 (up) and 5 (down) and cannot be changed.

The default mapping for F3 on the G300/G300s, for example, is currently:

$ ratslap -pf3
Printing Mode: F3
  Colour:              cyan
  Report Rate:          500
  DPI #1:               500
  DPI #2:        (DEF) 1000
  DPI #3:              1500
  DPI #4:              2500
  DPI Shift:           NOT SET
  Left Click (But1):   Button1
  Right Click (But2):  Button2
  Middle Click (But3): Button3
  G4:                  Button6
  G5:                  Button7
  G6:                  LeftCtrl +
  G7:                  LeftAlt +
  G8:                  ModeSwitch
  G9:                  DPICycle

Remapping to just mouse buttons

One usage for RatSlap may be to remap the buttons to generate standard mouse buttons higher than the 1-3 + scrollwheel (4 and 5).

Above, we see a typical button 1/2/3 configuration for left, right and middle respectively. We can also see the G4 button generates mouse button 6 and G5 generates mouse button 7. Unfortunately, G6-G9 do not generate the desired extra

We can rectify this easily, using RatSlap:

$ ratslap --modify F3 --colour Magenta --G6 Button8 --G7 Button9 --G8 Button10 --G9 Button11
Modifying Mode: F3
    Setting colour: magenta
    Setting button 6: Button8
    Setting button 7: Button9
    Setting button 8: Button10
    Setting button 9: Button11
Saving Mode: F3

Now, we have all mouse buttons functioning as mouse buttons! Go figure! And as an added bonus, we have a nice Magenta glow.

$ ./ratslap --print F3
Printing Mode: F3
  Colour:              magenta
  Report Rate:          500
  DPI #1:               500
  DPI #2:        (DEF) 1000
  DPI #3:              1500
  DPI #4:              2500
  DPI Shift:           NOT SET
  Left Click (But1):   Button1
  Right Click (But2):  Button2
  Middle Click (But3): Button3
  G4:                  Button6
  G5:                  Button7
  G6:                  Button8
  G7:                  Button9
  G8:                  Button10
  G9:                  Button11

Finally, we can select the F3 mode (if we're not already using it):

$ ./ratslap --select F3
Selecting Mode: F3

Firefox tab switching buttons

Another option might be using the buttons behind the wheel (G8 and G9) to switch forward and backward (respectively) between tabs in your favourite browser ... or Firefox.

So, let's set the buttons to Control-TAB and Control-Shift-TAB, print out our config, then switch to that mode:

$ ratslap --modify F3 --G8 LeftCtrl+TAB --G9 LeftCtrl+LeftShift+TAB --print F3 --select F3
Modifying Mode: F3
    Setting button 8: LeftCtrl+TAB
    Setting button 9: LeftCtrl+LeftShift+TAB
Saving Mode: F3

Printing Mode: F3
  Colour:              magenta
  Report Rate:          250
  DPI #1:               500
  DPI #2:        (DEF) 1000
  DPI #3:              1500
  DPI #4:              2500
  DPI Shift:           NOT SET
  Left Click (But1):   Button1
  Right Click (But2):  Button2
  Middle Click (But3): Button3
  G4:                  Button6
  G5:                  Button7
  G6:                  Button8
  G7:                  Button9
  G8:                  LeftCtrl + Tab
  G9:                  LeftCtrl + LeftShift + Tab

Selecting Mode: F3

ERROR: libusbx: error [_get_usbfs_fd] libusbx...

When you try to run RatSlap, you may receive an error similar to the following:

libusbx: error [_get_usbfs_fd] libusbx couldn't open USB device /dev/bus/usb/002/090: Permission denied
libusbx: error [_get_usbfs_fd] libusbx requires write access to USB device nodes.
20161115T002046+1100 [E]           main.c:00581:mouse_init      Failed to find Logitech G300s (046d:c246)

This is caused, as the error suggests, by the fact that you do not have write access to the mouse (/dev/bus/usb/002/090 in the example above).

There are two possible ways around this issue:

  1. (NOT RECOMMENDED) Run ratslap as root;
  2. Grant permissions to the device for your user account.

The later is the preferred option here. To do this, simply ensure you have write permissions to the device. One such way is to make it group-writable, change the group ownership and place yourself in the newly owning group, eg:

$ ls -lah /dev/bus/usb/002/090
crw-r--r-- 1 root root 189, 217 2016-11-14 19:22 /dev/bus/usb/002/090

$ groups
adm dialout cdrom sudo audio dip video plugdev netdev fuse lpadmin scanner
sambashare vboxsf vboxusers nonet

$ sudo chgrp adm /dev/bus/usb/002/090
[sudo] password for krayon:

$ sudo chmod g+w /dev/bus/usb/002/090

History

I recently (October 2016) purchased a Logitech G300S due mainly to the many extra buttons. I didn't care that the software didn't support Linux as I only wanted the extra buttons to generate extra mouse buttons, not keys or anything fancy.

Unfortunately, when I plugged it in, I discovered that none of the default 3 modes generated the extra mouse buttons I desired, instead generating useless and annoying keypress events such as CTRL-C, CTRL-X and CTRL-V.

Worse still, I also discovered that the Windows software only allows you to assign mouse buttons 1 through 7, skipping 4 and 5 (scroll-wheel). These are Left-Click (1), Middle-Click (2), Right-Click (3), Browser Back (6) and Browser Forward (7) respectively! Therefore, Logitech provides no way of generating higher mouse button events, button 8 for example. --Hopefully this is a limitation in the Logitech software and not in the mouse itself-- (see Notes).

Features

  • Configure the mouse options, same as the Logitech Windows only software.
  • Bind all buttons, except the scroll wheel up and down, a total of 9 (Logitech tool only allows 5).
  • Assign mouse clicks or keys to the Left and Right buttons (which the Logitech tool cannot do).
  • Freely assign 'Mode Switch' to a mouse button in only one mode/profile.
  • Assign mouse clicks with key modifiers (which Logitech doesn't offer).

Version History

TODO

Notes

Technique to sniff USB traffic

https://julien.danjou.info/blog/2012/logitech-k750-linux-support shows a technique for sniffing USB traffic using the usbmon kernel module.

Unfortunately it looks like I'll need to create a Windows VM to run the Logitech software on :(

Logitech Software's Artificial Restrictions

After considerable testing, I have found some operations the hardware supports that Logitech's management software does not.

Firstly, I can confirm that we can actually set 9 mouse buttons (1, 2, 3, 6, 7, 8, 9, 10 and 11). This is good news as it was what I originally expected from the Logitech G300s in the first place :D

We can also re-assign left and right buttons to different keys/buttons. Logitech's software did not allow this, presumably to avoid accidentally removing your ability to actually "left-click" anything :P

Once you assigned the 'Mode Switch' to a button in one profile/mode, it was also set in the other profiles/modes. This is presumably so you can always change to another mode. We shall impose no such limitation.

Lastly, and perhaps rather attractively, we can assign mouse buttons to perform mouse clicks WITH modifiers! You can therefore bind Ctrl+Shift+Right-Click to the left mouse button if you so desire.

<<< vim:set ts=4 sw=4 tw=80 et cindent ai si syn=creole: >>>