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