• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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