#!/bin/bash # Copyright 2018 Collabora, Ltd. # Copyright 2018 General Electric Company # # Permission is hereby granted, free of charge, to any person obtaining # a copy of this software and associated documentation files (the # "Software"), to deal in the Software without restriction, including # without limitation the rights to use, copy, modify, merge, publish, # distribute, sublicense, and/or sell copies of the Software, and to # permit persons to whom the Software is furnished to do so, subject to # the following conditions: # # The above copyright notice and this permission notice (including the # next paragraph) shall be included in all copies or substantial # portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS # BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN # ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. # This is an example script working as Weston's calibration helper. # Its purpose is to permanently store the calibration matrix for the given # touchscreen input device into a udev property. Since this script naturally # runs as the user that runs Weston, it presumably cannot write directly into # /etc. It is left for the administrator to set up appropriate files and # permissions. # To use this script, one needs to edit weston.ini, in section [libinput], add: # calibration_helper=/path/to/bin/calibration-helper.bash # exit immediately if any command fails set -e # The arguments Weston gives us: SYSPATH="$1" MATRIX="$2 $3 $4 $5 $6 $7" # Pick something to recognize the right touch device with. # Usually one would use something like a serial. SERIAL=$(udevadm info "$SYSPATH" --query=property | \ awk -- 'BEGIN { FS="=" } { if ($1 == "ID_SERIAL") { print $2; exit } }') # If cannot find a serial, tell the server to not use the new calibration. [ -z "$SERIAL" ] && exit 1 # You'd have this write a file instead. echo "ACTION==\"add|change\",SUBSYSTEM==\"input\",ENV{ID_SERIAL}==\"$SERIAL\",ENV{LIBINPUT_CALIBRATION_MATRIX}=\"$MATRIX\"" # Then you'd tell udev to reload the rules: #udevadm control --reload # This lets Weston get the new calibration if you unplug and replug the input # device. Instead of writing a udev rule directly, you could have a udev rule # with IMPORT{file}="/path/to/calibration", write # "LIBINPUT_CALIBRATION_MATRIX=\"$MATRIX\"" into /path/to/calibration instead, # and skip this reload step. # Make udev process the new rule by triggering a "change" event: #udevadm trigger "$SYSPATH" # If you were to restart Weston without rebooting, this lets it pick up the new # calibration.