67 lines
2.8 KiB
Bash
67 lines
2.8 KiB
Bash
|
#!/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.
|