Showing posts with label wacom. Show all posts
Showing posts with label wacom. Show all posts

Saturday, February 7, 2015

How to configure Wacom Intuos Express Keys on Linux

I have a Wacom Intuos Pro Medium Pen Tablet (or digitizer) PTH-651 and had some trouble assigning the buttons (or "express keys") on Ubuntu Linux 14.04 LTS.

Finally I got it working so here is my solution, using xsetwacom. It's in the official Ubuntu repositories so you can install it from there.

Getting to know your device names, parameters you can set and modifiers you can set them to.

First off, you'll need to know how Ubuntu calls your Intuos. You can do this with the following command (in a terminal window):
xsetwacom --list devices
In my case the result is:
Wacom Intuos Pro M Pen stylus   id: 14 type: STYLUS  
Wacom Intuos Pro M Pen eraser   id: 15 type: ERASER  
Wacom Intuos Pro M Pen cursor   id: 16 type: CURSOR  
Wacom Intuos Pro M Pen pad       id: 17 type: PAD    
Wacom Intuos Pro M Finger touch id: 18 type: TOUCH
Then you'll need to know what kind of buttons and other stuff you can configure using xsetwacom. The following command:
xsetwacom --list parameters
gives you a long list of parameters you can use, with a brief explanation of what they mean. The parameter "Button" for instance will be used to assign a key to a button (or "express key" as Wacom calls it).

Lastly, you kneed to know what you can set these parameters to. The following command:
xsetwacom  --list modifiers
gives you the list of modifiers (keys really) you can set the parameters to. The modifier "PgDn" for instance will be used to set a button ("express key") to act as if you press the "PageDown" button on your keyboard.

Configuring your buttons ("express keys")

The "general" command for assigning a key to a button on my Wacom Intuos Pro is the following:
xsetwacom set "Wacom Intuos Pro M Pen pad" Button 2 key "b"
The above command would set "button 2" of my Intuos to the key "b".

Seems simple enough, and it is really, except for the fact that the numbers of the buttons aren't really logical. To make a long story short, after a lot of trial and error I found that my buttons are numbered, from top to bottom:
2
3
8
9

1 (the big button in the middle of the Touch Ring)

10
11
12
13

In case they don't correspond for you, here's how I found them:

  • open a terminal window
  • type or copy/paste the following command:
xsetwacom set "Wacom Intuos Pro M Pen pad" Button 2 key "b"
  • open a simple text editor like mousepad or gedit
  • instead of typing, push the buttons on your Wacom Intuos and see what happens in the text editor. The button that types "b" is button number 2.
  • Now continue doing the same for the other buttons. Just change the button number in the above command (from 2 to 3 for instance) and push again all the buttons (except for the ones you found already of course).
Finally, as an example, I configure my buttons ("express keys") as follows:
xsetwacom set "Wacom Intuos Pro M Pen pad" Button 2 key "shift"
xsetwacom set "Wacom Intuos Pro M Pen pad" Button 3 key "ctrl"
xsetwacom set "Wacom Intuos Pro M Pen pad" Button 8 key "alt"
xsetwacom set "Wacom Intuos Pro M Pen pad" Button 9 key "esc"
xsetwacom set "Wacom Intuos Pro M Pen pad" Button 10 key "pgup"
xsetwacom set "Wacom Intuos Pro M Pen pad" Button 11 key "pgdn"
xsetwacom set "Wacom Intuos Pro M Pen pad" Button 12 key F1
xsetwacom set "Wacom Intuos Pro M Pen pad" Button 13 key F2

Configuring the Touch Ring

Now you got the hang of it, the Touch Ring is a piece of cake. Just replace "Button 2" with "AbsWheelUp" and "AbsWheelDown" (one for each direction) and you're good.
In my case, I use:
xsetwacom set "Wacom Intuos Pro M Pen pad" AbsWheelUp key "="
xsetwacom set "Wacom Intuos Pro M Pen pad" AbsWheelDown button 7
Now if you pay attention, the modifiers I chose seem a bit weird, right? Why would I use "7" to zoom out and "=" to zoom in? Here's where it gets goofy. I have an AZERTY keyboard (be-fr) and xsetwacom doesn't seem to like that a lot. It actually treats it as if it were a QWERTY keyboard, but not completely either. So I had a lot of trial-and-error fun, again, trying to figure out how xsetwacom interprets the keys on my keyboard. I didn't actually work it out, I stumbled by chance on the right keys for the zoom and left it at that.

Turning off touch

To turn off the "touch" reactivity of my tablet, I use the following command:
xsetwacom --set "Wacom Intuos Pro M Finger touch" touch "off"

A note on Inkscape and pressure sensitivity

I couldn't get pressure sensitivity working on Inkscape. Seems to be a bug in overlay-scrollbar finally. Apparently you can get around it by starting inkscape as follows from command line:
LIBOVERLAY_SCROLLBAR=0 inkscape
but that didn't (always) seem to work for me.
Finally I just removed the package "oevrlay-scrollbar" from Ubuntu. Pressure sensitivity works fine now.

Using your newly configured buttons

To use your buttons with the xsetwacom configurations, you need to first plug in your Intuos (otherwise the device name will be unrecognized by xsetwacom) and then, in a terminal, type your xsetwacom commands. The settings are lost at reboot.

If you don't like hassle, like me, you can just make a small text file where you keep the commands. If you put them all in a single line, separated by "&&" (see axample below), you can issue it as one long command.

I my case, the final command is:

xsetwacom set "Wacom Intuos Pro M Pen pad" AbsWheelUp key "=" && xsetwacom set "Wacom Intuos Pro M Pen pad" AbsWheelDown button 7 && xsetwacom set "Wacom Intuos Pro M Pen pad" Button 2 key "shift" && xsetwacom set "Wacom Intuos Pro M Pen pad" Button 3 key "ctrl" && xsetwacom set "Wacom Intuos Pro M Pen pad" Button 8 key "alt" && xsetwacom set "Wacom Intuos Pro M Pen pad" Button 9 key "esc" &&
xsetwacom set "Wacom Intuos Pro M Pen pad" Button 10 key "pgup" &&
xsetwacom set "Wacom Intuos Pro M Pen pad" Button 11 key "pgdn" &&
xsetwacom set "Wacom Intuos Pro M Pen pad" Button 12 key F1 &&
xsetwacom set "Wacom Intuos Pro M Pen pad" Button 13 key F2

Or you can make a shell script, of course. You can find all about that in the linuxwacom Tablet configuratio Wiki.

Good luck and have a nice day!



If you appreciated this article for some reason or another, please share it (see the buttons below), and, of course, don't forget to Flattr! (Why?)


Thursday, May 16, 2013

Remapping a graphic tablet in Linux (using xinput)

This is how I set up my second hand Wacom Intuos 1 graphic tablet (old but very satisfying hardware) under Ubuntu 12.04.


4:3 to 16:9 conversion

The Xinput command

In fact it worked all "plug'n'play", except for the fact that my screen is 16:9 and my old Wacom Intuos 1 tablet is 4:3. This meant that when I drew a circle on my tablet, it was an ellips on screen.

In Linux this can be remedied by the "xinput" command. Without going into too much detail, what you should do is the following. (I found the basic info I needed on the "Calibrating Touchscreen" page on the Archlinux wiki).

First, with your tablet connected (it has to be connected before boot), type in a terminal (no need to be root or use sudo):
xinput list
The output in my case is, concerning the tablet,
  • Wacom Intuos 9x12 stylus
  • Wacom Intuos 9x12 eraser
  • Wacom Intuos 9x12 cursor
These are the devices you should remap, all three (or more or less in your case) of them.


The command for remapping for instance the "stylus" device is the following:
xinput set-prop "Wacom Intuos 9x12 stylus" --type=float "Coordinate Transformation Matrix" 1 0 0 0 1.33333 0 0 0 1
where
  • "Wacom Intuos 9x12 stylus" is the device in question
  • 1.33333 is the factor by which the tablet is horizontally "diminished". Underlying math, for those interested:
    • 4:3 = 16:12 (multiply numerator and denominator by 4)
    • conversion 16:12 -> 16:9 : the x conversion factor is 12/9 = 1.33333
This "deactivates" a horizontal border at the bottom of your graphic tablet (near you); the remaining active field has the desired widescreen 16:9 ratio.


If you prefer, as I do, to rather deactivate the top border so that your active drawing field is as close as possible to you, you should use an offset factor. The command then becomes (note the -0.33333 value):
xinput set-prop "Wacom Intuos 9x12 stylus" --type=float "Coordinate Transformation Matrix" 1 0 0 0 1.33333 -0.33333 0 0 1
You have to execute this command not only for the "stylus", but for every of your tablet "sub-devices", in my case:
xinput set-prop "Wacom Intuos 9x12 stylus" --type=float "Coordinate Transformation Matrix" 1 0 0 0 1.33333 -0.33333 0 0 1
xinput set-prop "Wacom Intuos 9x12 eraser" --type=float "Coordinate Transformation Matrix" 1 0 0 0 1.33333 -0.33333 0 0 1
xinput set-prop "Wacom Intuos 9x12 cursor" --type=float "Coordinate Transformation Matrix" 1 0 0 0 1.33333 -0.33333 0 0 1

Making changes persistent throughout reboots

Now the problem is that these changes are not persistent throughout reboots, so you have to re-enter the commands every time you restart your computer. There is of course a simple solution for this: making a simple shell-script and getting your linux to run it at boot.

1. Making the script

For the shell script open a text-editor (i.e. GEdit or Mousepad or other), and type:
#!/bin/sh
xinput set-prop "Wacom Intuos 9x12 stylus" --type=float "Coordinate Transformation Matrix" 1 0 0 0 1.33333 -0.33333 0 0 1
xinput set-prop "Wacom Intuos 9x12 eraser" --type=float "Coordinate Transformation Matrix" 1 0 0 0 1.33333 -0.33333 0 0 1
xinput set-prop "Wacom Intuos 9x12 cursor" --type=float "Coordinate Transformation Matrix" 1 0 0 0 1.33333 -0.33333 0 0 1
Save it as (for instance) wacom.sh in your home-directory or any other place where you can find it afterwards.

2. Make the script executable

Now you need to make it executable. One way is to use Nautilus, the file browser, right click on the file, choose "Properties" (at the bottom) and in the "Permissions" tab, check the checkbox at the bottom that says "allow execution".
Or, in a terminal, navigate towards the directory where you saved wacom.sh and type:
chmod +x ./wacom.sh
At this stage your script is ready. You can test it out by typing in a terminal, while you're still in the right directory:
./wacom.sh
You should see the changes directly when you use your tablet.

3. Auto-execute the script on boot

Now the only thing left is to make linux run the script at every boot.

For this, launch the program "Startup Applications" (should be installed by default). Click on "Add" and fill in the form. The name and optional commentary you can choose freely, the most important is the command:
/path/wacom.sh
where "path" is of course your particular path, the directory where the script is saved, i.e.
/home/jeff/wacom.sh

That's it. Reboot and test... Good luck!


Making the active field smaller

I bought a big graphic tablet and found that actually a smaller one is more useful for my type of work. So instead of buying a smaller one, I used again the xinput command to "make" it smaller (that way, if I need it bigger, I just change the xinput values and I have a big one again). How to do this:

If we represent the Coordinate Transformation Matrix used in the above commands (i.e. 1 0 0 0 1.33333 -0.33333 0 0 1) as a1 a2 a3 b1 b2 b3 c1 c2 c3, and the conversion factor for widescreen correction as Cf then:
  • always b2=a1*Cf, this way the widescreen conversion is correct at all times. (If you don't need to do this conversion, then for you Cf = 1).
  • the bigger a1 is, the smaller your active field becomes on your tablet. 
    • If a1=1, then your active field is at it's biggest, full size
    • If a1=2, then it becomes half this size
    • If a1=3, then it becomes one third this size
    • and so on
  • a3 and b3 are resp. the horizontal and vertical offset.
    • If these values are 0, then your active field is placed at the top left of your tablet
    • to move your active field towards the bottom right, these values need to be negative. You should experiment a bit with values. To put a small active field in the bottom left corner of my tablet (taking into account the widescreen conversion, see above), I had to use the matrix: 2 0 0 0 2.666666667 -1.666667 0 0 1.
So finally I made two scripts, wacom_A4.sh and wacom_A5.sh. According to the desired configuration, I execute one or the other.


If you appreciated this article for some reason or another, please share it (see the buttons below), and, of course, don't forget to Flattr! (Why?)