Skip to content

The 3 Macro Systems

Brett Smith edited this page Feb 8, 2021 · 2 revisions

The Macros / Key mapping situation in Snake is a little complex, as there are 3 competing systems in use. They all have their pros and cons, so until one of these 3 is fully featured enough to become the only one available, take your pick!

OpenRazer default macro/key binding system

Pro

  • Official solution of the openrazer drivers so easily available
  • Works without a layout
  • Requires X11 and external tools, will not be wayland compatible

Con

  • Only works with keyboards
  • Very limited actions
  • Unlikely to be developed further

Chabad360's OpenRazer macro/key binding improvements

This fork of openrazer is where some work is taking place to improve the macro support in open razer. You will need to use this branch of openrazer until it is it merged. https://github.com/chabad360/openrazer/tree/keybinding

Pro

  • Likely to be used by openrazer as official system
  • Works at kernel input subsystem level
  • Works without a snake layout
  • Multiple profile / bank support

Con

  • Only currently works with keyboards although broader support is expected later
  • Requires uinput read/write permissions (see below)
  • Harder to install at moment, requires special branch to be built and installed

macrolib

Macrolib is a sister project of Snake, and is basically a Java port of the macro functionality of a previous (python) project of mine, Gnome15.

Pro

  • Works at kernel input subsystem level
  • Multiple profile / bank support
  • Integrated with Snake layouts
  • Requires no other software
  • Works with all device types

Con

  • Requires uinput read and write permission (see below)
  • Requires a Snake layout (you can create your own)

Adding Permissions For UInput based macro systems

Two of the above systems require both read and write access to /dev/uinput. For now, you will need to add permission yourself before Snake is started.

sudo chmod a+rw /dev/uinput

To make this permanent, add this to a system start up script such as /etc/rc.local (or your distributions version of this). Be aware there are security implications for this, it makes it possible to any local process to access your input devices.

Clone this wiki locally