/shuttle-go

Contour Design Shuttle Pro V2 drivers for Linux, in Go, with modifiers and just more slick.

Primary LanguageGoMIT LicenseMIT

Linux driver for Contour Design Shuttle Pro V2

The goal of this project is to use the Shuttle Pro V2 with the Lightworks Non-Linear Video Editor, but shuttle-go allows you to control anything. It has support for:

  • Sending keyboard events (with the default xdotool driver)
  • Sending Open Source Control messages (with the ocs:// driver)
  • Executing any command through bash -c (with the exec driver)

This program supports having modifiers for your Shuttle Pro V2 buttons. So you can multiple the functionality of your buttons. For example, you can have different bindings for B1+F1 and F1.

Layout

Buttons layout on the Contour Design Shuttle Pro v2:


           F1   F2   F3   F4

        F5   F6   F7   F8   F9


                (Shuttle)
        S-7 .. S-1  S0  S1 .. S7

     M1        JogL    JogR        M2



              B2        B3
            B1            B4

N.B. Contour Design Shuttle Pro v1 has the same buttons layout

Slow Jog

In addition to JogL and JogR, you can define bindings for SlowJogL and SlowJogR. For example, you can use a slow jog use to nudge by one frame at a time.

If you wish to not use slow jog, set the slow_jog key to 0 in the configuration for this app. Otherwise, slow_jog represents the minimum number of milliseconds between two events to be considered slow. It defaults to 200 ms.

Lightworks

Avoid Lightworks key bindings with modifiers however. Capital letters are great as they cannot be combined, and are more direct and they are less likely to conflict with your other bindings and Lightworks recognizes them.

Drivers

See sample_config.json for example configuration of each driver.

xdotool (default)

The key names to use in the X11 bindings are found here: https://www.cl.cam.ac.uk/~mgk25/ucs/keysymdef.h or you can view them locally in /usr/include/X11/keysymdef.h (stripped of the XK_ prefix).

You need to install the xdotool package before using this driver (default).

exec

Any bindings triggered will execute the corresponding command through /bin/bash -c "your command"

osc://host:port

In the configuration, use "driver": "osc://host:port", then all your bindings can be of the format: /osc/address/path param1 param2 param3.

You can send multiple messages with one key by separating those bindings by + (that's a space, a plus sign, and another space).

A special /sleep 0.123 message can be added, and it interpreted by shuttle-go as a sleep between two OSC messages. Use that if your program goes berzerk when messages are too close.

Run

With:

sudo shuttle-go /dev/input/by-id/usb-Contour_Design_ShuttlePRO_v2-event-if00

For ShuttlePRO_v1

shuttle-go /dev/input/by-id/usb-Contour_Design_ShuttlePRO-event-if00

N.B. Running shuttle-go as sudo will cause shuttle-go to look for a valid config file in

/root/.shuttle-go.json

Without sudo, shuttle-go will look for a valid config file in the current user's home dir

~/.shuttle-go.json 

Install in udev with:

As root, write file /etc/udev/rules.d/01-shuttle-go.rules with contents:

ACTION=="add", ATTRS{name}=="Contour Design ShuttlePRO v2", MODE="0644"
ACTION=="remove", ATTRS{name}=="Contour Design ShuttlePRO v2", RUN+="/usr/bin/pkill shuttle-go"

For ShuttlePRO_v1

ACTION=="add", ATTRS{name}=="Contour Design ShuttlePRO", MODE="0644"
ACTION=="remove", ATTRS{name}=="Contour Design ShuttlePRO", RUN+="/usr/bin/pkill shuttle-go"

Then run, as root:

udevadm control --reload-rules && udevadm trigger

From that point on, plug in the device, and run shuttle-go in any terminal (provided shuttle-go is in your $PATH).

License

MIT

TODO

  • Don't require xdotool

    • Use xgb's xtest package and send the FakeInput directly there..
  • Watch the configuration file, and reload on change.

  • Have a default SlowJog configuration.

  • Make it auto-run on plug, with udev rules like:

    ACTION=="add", ATTRS{name}=="Contour Design ShuttlePRO v2", ENV{MINOR}=="79", RUN+="/home/abourget/go/src/github.com/abourget/shuttle-go/udev-start.sh"
    ACTION=="remove", ATTRS{name}=="Contour Design ShuttlePRO v2", RUN+="/usr/bin/pkill shuttle-go"