Contour jog-wheel f...

[Solved] Contour jog-wheel for CinGG?  



I never used a jog-wheel but it seems that it is what professionals use for video editing. I saw some wheels for over $1k....which for me, and I am sure many others, is out of reach. However the Company Contour makes two small jog wheels, one for roughly $100,



and one for about $60 the Contour ShuttleXpress


I was hoping to get one ShuttleXpress to play with CinGG but a) I am not sure if said wheel is compatible with Cin, b) No idea if it works on Linux. On github I found: but I don't have the skills to understand it is useful.

Any idea? Do you use such wheel to edit? Or any other model? Are they really that better than a regular mouse?


Edit: I also found

This topic was modified 4 months ago by WPfilmmaker2

Wanted to point out the pros and cons of the Shuttles after having used both of them with Cinelerra-GG.  I would have to say that at least 90% of what you would like to use either of the shuttles for is playing forward and reverse in normal, fast, or slow speed and forward/reverse single frame. For this you use the inner and outer center wheels. These WHEELS ARE THE BIG PLUS and work the same on each model.

Now for the BIG NEGATIVE. Despite the fact that each has 3 buttons that work exactly the same as your regular mouse, the problem is that you have NO WAY TO MOVE THE CURSOR like you do with a mouse to change windows, drag effects, or move the insertion pointer. So you still need to use the mouse for that.  I guess that the solution may be to leave the mouse on the right hand side and put the Shuttle to use with your left hand.

Also, in deciding between the Pro and the Xpress, I found it difficult to use all of the buttons on the Pro and thought that the Xpress had the buttons I would use.  However, I am pretty sure you could train your fingers if you used it a lot to use more buttons.  Information from real users would be a lot more relevant.

Thanks for the feedback Phyllis! It is interesting especially what you said about the use of regular mouse. I thought (while remaining in the software not doing other tasks) wheels were supposed to replace mouse. Do you think other software just use more shortcuts than Cinelerra or people who use programs like avid they also use mouse?

4 Answers

Hi WPfilmmaker2,

I have had a "ShuttleXpress" for several years, I bought it in the hope of being able to use it with Cinelerra... I never made it.

Despite all the research I've been able to do by Google, I've never found a simple way to install it. I'm not a developer and the only leads I found always involved modifying Cinelerra with code.... it's not at all within my reach.

Here is a text that I found a long time ago, I don't remember where, maybe it will help you

(It's in French, you'll have to translate it...):



J'avais déjà envoyé ce post sur la liste linux.debian.user.french, mais je pense qu'il a plus sa place ici.

J'ai depuis un moment un jog/shuttle Contour ShuttleXpress, celui avec 5 boutons.

J'ai trouvé un programme en C écrit par Arendt David pour le gérer, mais pour les [ et ],ça ne fonctionnait pas ( à cause du clavier français ).

J'ai modifié cette fonction et maintenant, de gauche à droite, les cinq boutons sont: undo , [ , cut , ] , redo .

J'en ai profité pour mettre 3 vitesses avant et arrière sur le shuttle à la place des deux initialement programmées.

Pour utiliser ce soft avec cinelerra ( avec kino il n'est pas utile ) il suffit de déterminer l'event utilisé par ce shuttle, et de le rendre "readable" par tous ( /dev/input/eventX , ou X est 1,2,3... )

Ensuite, lancer cshuttle par: ./cshuttle /dev/input/eventX &
Puis lancer cinelerra.

Voici le source, à compiler par:

gcc -Wall cshuttle.c -o cshuttle -L/usr/X11R6/lib -lX11 -lXtst

Il y a quelques warnings sans conséquences.


#define DELAY 10

#define KEY 1
#define KEY1 256
#define KEY2 257
#define KEY3 258
#define KEY4 259
#define KEY5 260
#define KEY6 261
#define KEY7 262
#define KEY8 263
#define KEY9 264
#define KEY10 265
#define KEY11 266
#define KEY12 267
#define KEY13 268

#define JOGSHUTTLE 2
#define JOG 7
#define SHUTTLE 8

#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
#include <linux/input.h>
#include <X11/Xlib.h>
#include <X11/extensions/XTest.h>
#include <X11/keysym.h>

typedef struct input_event EV;

unsigned short jogvalue = 0xffff;
int shuttlevalue = 0xffff;

Display *display;

void initdisplay()
int event, error, major, minor;
display = XOpenDisplay(0);
if (!display)
fprintf(stderr, "unable to open X display\n");
if (!XTestQueryExtension(display, &event, &error, &major, &minor))
fprintf(stderr, "Xtest extensions not supported\n");


void sendkey(KeySym modifier, KeySym key)
KeyCode modifiercode;
KeyCode keycode;
if (modifier != 0)
modifiercode = XKeysymToKeycode(display, modifier);
XTestFakeKeyEvent(display, modifiercode, True, DELAY);
keycode = XKeysymToKeycode(display, key);
XTestFakeKeyEvent(display, keycode, True, DELAY);
XTestFakeKeyEvent(display, keycode, False, DELAY);
if (modifier != 0)
XTestFakeKeyEvent(display, modifiercode, False, DELAY);


void key(unsigned short code, unsigned int value)
if (value == 0)
switch (code)
case KEY5 : sendkey(0, 'z'); break; //undo
case KEY6 : sendkey(0xfe03, '['); break; //point d'entree
case KEY7 : sendkey(0, 'x'); break; //coupe
case KEY8 : sendkey(0xfe03, ']'); break; //point de sortie
case KEY9 : sendkey(0xffe1, 'z'); break; //redo


void jog(unsigned int value)
if (jogvalue != 0xffff)
if (value < jogvalue)
sendkey(0, XK_KP_4);
else if (value > jogvalue)
sendkey(0, XK_KP_1);
jogvalue = value;


void shuttle(int value)
int i = value/2;
if (i == shuttlevalue)
case -3 : sendkey(0, XK_KP_Add); break; // recul double vitesse
case -2 : sendkey(0, XK_KP_6); break; // recul vitesse normale
case -1 : sendkey(0, XK_KP_5); break; // recul demi vitesse
case 0 : sendkey(0, XK_KP_0); break; // stop
case 1 : sendkey(0, XK_KP_2); break; // avance demi vitesse
case 2 : sendkey(0, XK_KP_3); break; // avance vitesse normale
case 3 : sendkey(0, XK_KP_Enter); break; // avance double vitesse
shuttlevalue = i;


void jogshuttle(unsigned short code, unsigned int value)
switch (code)
case JOG : jog(value); break;
case SHUTTLE : shuttle(value); break;


void handle_event(EV ev)
switch (ev.type)
case KEY : key(ev.code, ev.value);
case JOGSHUTTLE : jogshuttle(ev.code, ev.value);


int main(int argc, char **argv)
int fd;
char name[256] = "unknown";
EV ev;
if (argc < 2)
fprintf(stderr, "syntax: cshuttle <device>\n");
return 1;
printf("cshuttle 0.1beta written by Arendt David admin-/LHdS3kC8BfYtjvyW6yDsg@xxxxxxxxxxxxxxxx)v1.1 \n");
fd = open(argv[1], O_RDONLY);
if (fd < 0)
fprintf(stderr, "unable to open %s\n", argv[1]);
return 1;
if (ioctl(fd, EVIOCGNAME(sizeof(name)), name) < 0)
perror("evdev ioctl");
printf("device name: %s\n", name);
while (1)
read(fd, &ev, sizeof(ev));
return 0;



Il fout parfois le bronx lorsque l'on manipule le shuttle dans d'autres

En espérant avoir interessé quelqu'un.



Re bonjour,

Attention :
printf("cshuttle 0.1beta written by Arendt David admin-/LHdS3kC8BfYtjvyW6yDsg@xxxxxxxxxxxxxxxx)v1.1 \n");

doit être sur une seule ligne!



Thanks for the detailed answer Pierre! Have you been able to try such controller with another software? Afaik they should be compatible with many softwares.


If pierre still has his controller, maybe with the help of GG, he could make it work? It would be great for him and for the whole community if others want to use it.  FLOSS video editor + affordable tools is a great combo for all independent/low-budget editors!


Sounds very interesting. I would be very curious myself if the cutting work could be done faster. The price seems reasonable to me. Thanks for sharing the info.

Lightworks also offers this controller. There is nothing about Linux in the description, although Lightworks is also available for Linux.

From what I could read online these tools are really supposed to be good but as I said I never tried anything other than mouse and keyboard so..

You are right Sam, I discovered such controllers because of Lightworks, in fact I think most (all?) the code available to make them run on linux comes from users of Lightworks...


Yes I still have the ShuttleXpress, it's even plugged in... but it doesn't work (normal, I haven't found any driver for linux or any easy way to configure it) and I've never seen any software reacting to a manipulation of its jog or its buttons. In fact, I don't even know if Linux sees it.

I only bought it for Cinelerra and since I can't get it to work... it collects dust.

I opened a ticket in the bug tracker: if GG can help and you can test on your jog, maybe we can get it to work?

Phyllis and GG nodded that the shuttles should work. That's great news.


Please Login or Register