Inicio » Sin categoría » Rotando la pantalla y el digitalizador del tabletPC en Linux

Rotando la pantalla y el digitalizador del tabletPC en Linux

Una pega del tabletPC en Linux es que la rotación de la pantalla X no suele llevar asociada la rotación del digitalizador tipo Wacon.
Buscando información, parece factible hacerlo modificando la configuración de las X; pero como no le veo mucho futuro a ese tipo de configuraciones, prefiero intentar hacer algo desde la línea de órdenes.
Por tanto, el objetivo va a ser lograr un script para la línea de órdenes que se encargue de rotar la pantalla en cualquiera de las 4 posibilidades y ajustar el digitalizador de acuerdo a esta rotación. La siguiente imagen muestra el resultado deseado.

Para la rotación de pantalla, lo más adecuado parece ser utilizar la orden xrandr, por ejemplo, para rotar la pantalla a izquierdas se haría:

$ xrandr --orientation left

Para reajustar el digitalizador. parece que la opción es emplear el comando xsetwacom sobre el dipositivo deseado. Para conocer el dispositivo, se puede hacer desde la línea de órdenes:

$ xsetwacom --list devices
Serial Wacom Tablet stylus              id: 13  type: STYLUS
Serial Wacom Tablet eraser              id: 15  type: ERASER

Y para rotar el stylus, se puede hacer:

$ xsetwacom set ”Serial Wacom Tablet stylus” Rotate ccw

Con todo esto, ya se puede preparar un script sencillo para hacer las rotaciones. Ahí va el que me he preparado en python.

#!/usr/bin/env python

# tabletPC rotation of screen and wacom enabled digitizer
# for X enabled devices 
# Syntax: tablet_rotation {normal,left,right,inverted}

import sys
import os

#identifier of the wacom
#obtained using command xsetwacom --list devices
wacom_id = 'Serial Wacom Tablet stylus'

# function for setting the rotation mode
# values can be "normal", "left", "right", "inverted"
def orientation(value):

  screen_cmd_prefix = "xrandr --orientation "
  wacom_cmd_prefix = "xsetwacom set  "" + wacom_id + "" Rotate "

  if value == "normal":
    os.system(screen_cmd_prefix + "normal")
    os.system(wacom_cmd_prefix + "none")
  elif value == "left":
    os.system(screen_cmd_prefix + "left")
    os.system(wacom_cmd_prefix + "ccw")
  elif value == "right":
    os.system(screen_cmd_prefix + "right")
    os.system(wacom_cmd_prefix + "cw")
  elif value == "inverted":
    os.system(screen_cmd_prefix + "inverted")
    os.system(wacom_cmd_prefix + "half")
  else:
    print "Invalid orientation specified!"

if len(sys.argv) == 2:    
  orientation(sys.argv[1])
else:
    print "Syntax %s {normal,left,right,inverted}" %(sys.argv[0])

No me gusta que el que el ajuste del digitalizador dependa de una orden propia del dispositivo. Supongo que habrá alguna manera más elegante de hacerlo (¿quizá xinput?). Otro día será.