#!/bin/sh # Touch gesture daemon for the socktop display. Pass -v to log each detection. # # Single source of truth for the lisgd arguments -- referenced by the i3 autostart, # the systemd unit and tools/test-foreground.sh, so they cannot drift apart. # # IMPORTANT: run exactly ONE instance. lisgd does not grab the input device # exclusively, so two running copies make every swipe fire twice. set -eu for c in /usr/local/etc/socktop-swipe.env "$(dirname "$0")/config.env"; do [ -r "$c" ] && . "$c" && break done : "${TOUCH_DEV:?no TOUCH_DEV -- is the config installed?}" : "${SCREEN_W:=1024}" : "${SCREEN_H:=600}" : "${SWIPE_THRESHOLD:=80}" : "${SWIPE_LENIENCY:=30}" : "${FINGER_COUNTS:=1 2 3}" : "${GESTURE_IN:=RL}" : "${GESTURE_OUT:=LR}" SWIPE_CMD=${SWIPE_CMD:-$(dirname "$0")/socktop-swipe} [ -x /usr/local/bin/socktop-swipe ] && SWIPE_CMD=/usr/local/bin/socktop-swipe verbose= [ "${1:-}" = "-v" ] && verbose=-v if [ ! -e "$TOUCH_DEV" ]; then echo "socktop-gestures: $TOUCH_DEV not present" >&2 exit 1 fi if [ ! -r "$TOUCH_DEV" ]; then echo "socktop-gestures: cannot read $TOUCH_DEV -- are you in the 'input' group?" >&2 echo " sudo usermod -aG input $(id -un) then log out and back in" >&2 exit 1 fi # Bind every configured contact count to the same action; see config.env for why. set -- for f in $FINGER_COUNTS; do set -- "$@" -g "$f,$GESTURE_IN,*,*,R,$SWIPE_CMD next" set -- "$@" -g "$f,$GESTURE_OUT,*,*,R,$SWIPE_CMD prev" done exec lisgd $verbose \ -d "$TOUCH_DEV" \ -w "$SCREEN_W" -h "$SCREEN_H" \ -t "$SWIPE_THRESHOLD" -r "$SWIPE_LENIENCY" \ "$@"