luffah

Outils pour utilisateurs

Outils du site


xsetwacom

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 <id> aera

# On pourra changer cette zone, mais ce n'est pas très utile dans notre cas
xsetwacom set <id> aera <x> <y> <x2> <y2>
xsetwacom set <id> ResetAera

# On peut voir le mode de pointage
xsetwacom get <id> mode
# le mode qui nous interesse est le mode absolu (le mode relative donne le comportement d'une souris)
xsetwacom set <id> mode absolute

# On peut changer la zone de dessin sur l'écran mais pas la voir, par exemple
xsetwacom set <id> 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).

wacomcfg
#!/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] [<key>=<val> ..]"
      echo " current                  skip window selection (useful for keybinding)"
      echo " reset                    reset zone to draw to fullscreen"
      echo " <key>=<val>              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
xsetwacom.txt · Dernière modification: 2023/06/25 15:57 de luffah