=== Avant-propos ===
Ce tuto est prévu pour le cas où l'on n'a qu'une seule tablette de dessin branchée sur l'ordi.
Le but est d'utiliser la tablette dans sa fonction essentielle : controler le pointeur dans une zone de l'écran attribuée au dessin.
Pour évoquer les coordonnées on utilisera les standard de cours de math x et y,
et pour les tailles on utilisera w (largeur en anglais) et h (hauteur).
===== Vous aurez besoin de... =====
Les tablettes de dessin Wacom sont très bien supportées sur Linux.
Cependant, rares sont les outils qui permettent de les configurer de manière pratique.
* Installer xserver-xorg-input-wacom (nom du paquet Debian) suffit généralement à activer le controle du pointeur avec la tablette après redémarrage de la session. Le paquet susnommé fourni la boite à outils `xsetwacom` qui nous servira.
* Aussi, pour sélectionner une zone de l'écran on utilisera `slop`.
===== Découverte des outils =====
En ligne de commande, vous pouvez découvrir les outils avec les commandes suivantes :
=== xsetwacom ===
xsetwacom -h
man xsetwacom # pour les plus motivé.e.s
xsetwacom --list
# Noter l'id du périphérique pour voir la taille de la tablette
xsetwacom get aera
# On pourra changer cette zone, mais ce n'est pas très utile dans notre cas
xsetwacom set aera
xsetwacom set ResetAera
# On peut voir le mode de pointage
xsetwacom get mode
# le mode qui nous interesse est le mode absolu (le mode relative donne le comportement d'une souris)
xsetwacom set mode absolute
# On peut changer la zone de dessin sur l'écran mais pas la voir, par exemple
xsetwacom set MapToOutput 800x600+0+0
=== xwininfo ===
Fourni avec X, il permet de connaitre les propriétés des fenetres et aussi de l'écran.
xwininfo
# avoir les coordonnées pour remettre tout l'écran en zone dessinable/pointable
xwininfo -root | sed -n 's/.*geometry//p'
=== slop ===
slop
# constater aussi qu'après avoir changer de fenetre slop se ferme
slop -h
===== Script =====
Le script se déroule en 3 étapes:
* on remet par défault les paramètres
* on s'assure que les zones de dessin sur l'écran et la tablette sont à leurs valeurs totales
* pour les cas particulier on permet d'appliquer des parametres libres (key=val qui se suivent)
* on sélectionne la fenetre pour avoir un visuel au moment de la sélection
* pour cela on va tricher en utilisant xwininfo qui permet de changer de fenetre et disparait apres avoir cliqué sur un fenêtre
* on sélectionne et active la zone de dessin
* pour des raisons pratiques on va forcer une zone proportionnelle à la taille de la tablette
Ci dessous le script téléchargeable (qui pourra être améliorer ultérieurement).
#!/bin/sh
# License : GPLv3
# Variables that change behaviour
SLOP_CURRENT_WINDOW=false
EXIT_ON_RESET=false
# Arg parsing
while [ "$1" ]; do
case "$1" in
-h|--help)
echo "Usage: $0 [current|reset] [= ..]"
echo " current skip window selection (useful for keybinding)"
echo " reset reset zone to draw to fullscreen"
echo " = add settings applyable to xsetwacom (val can be empty)"
echo "Examples :"
echo " $0 current # select the rectangle zone to draw"
echo " $0 reset mode=relative # reset the zone to draw and apply mode relative"
exit 0
;;
debug)
set -x
;;
current)
SLOP_CURRENT_WINDOW=true
;;
reset)
EXIT_ON_RESET=true
;;
*=*)
OTHER_SETTINGS="${OTHER_SETTINGS} $1"
;;
esac
shift
done
PENTABLET_LIST="$(xsetwacom --list | sed 's/^.*\sid:\s*//;s/\s*type:.*//')"
PENTABLET_ID=$(echo $PENTABLET_LIST | cut -d' ' -f1)
_xsetwacom(){
for dev in $PENTABLET_LIST; do
xsetwacom set $dev $*
done
}
#reset and apply other settings
_xsetwacom MapToOutput $(xwininfo -root | sed -n 's/.*geometry//p')
for i in $OTHER_SETTINGS; do
_xsetwacom $(echo "$i" | tr '=' ' ')
done
if $EXIT_ON_RESET; then
exit 0
fi
#get tablet size
_setup_tablet_area_vars() {
DEFAULT_W=$3
DEFAULT_H=$4
}
_setup_tablet_area_vars $(xsetwacom get ${PENTABLET_ID} area)
# select the window
if ! $SLOP_CURRENT_WINDOW; then
xmessage -timeout 2 -default "Setting Screen Area" -buttons "" "Select window with Alt-Tab and click on it" &
xwininfo 2> /dev/null 1>&2 # only to select the right window
fi
# select the area
xmessage -timeout 2 -default "Setting Screen Area" -buttons "" "Select region" &
_ret=$(slop -f '%w %x %y')
if [ -n "${_ret}" ] ; then
# setup the draw rect
_xsetwacom mode absolute
_set_draw_rect(){
_w=$1
_x=$2
_y=$3
_h=$(( _w * DEFAULT_H / DEFAULT_W ))
_xsetwacom MapToOutput "${_w}x${_h}+${_x}+${_y}"
}
_set_draw_rect $_ret
fi