You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							148 lines
						
					
					
						
							2.7 KiB
						
					
					
				
			
		
		
	
	
							148 lines
						
					
					
						
							2.7 KiB
						
					
					
				#!/bin/sh | 
						|
 | 
						|
# Control the input devices | 
						|
# Depends: xinput, setxkbmap | 
						|
 | 
						|
help() { | 
						|
	B=$(tput bold) | 
						|
	U=$(tput smul) | 
						|
	N=$(tput sgr0) | 
						|
 | 
						|
	cat << EOF | 
						|
${B}NAME${N} | 
						|
	inputctl - control the input devices | 
						|
 | 
						|
${B}SYNOPSIS${N} | 
						|
	${B}inputctl${N} ${U}OPTION${N} [${U}ARG${N}] | 
						|
 | 
						|
${B}OPTIONS${N} | 
						|
	${B}-h${N}	Display usage message and exit. | 
						|
 | 
						|
	${B}-d${N} ${U}STATE${N} | 
						|
		Set touchpad state, possible values: toggle, on/off, 1/0. | 
						|
 | 
						|
	${B}-k${N} ${U}STATE${N} | 
						|
		Set keyboard state, possible values: toggle, on/off, 1/0. | 
						|
 | 
						|
	${B}-s${N} ${U}STATE${N} | 
						|
		Set touchscreen state, possible values: toggle, on/off, 1/0. | 
						|
EOF | 
						|
} | 
						|
 | 
						|
setxkbmap -option caps:swapescape | 
						|
 | 
						|
# Exit if no option is provided | 
						|
[ "$#" -eq 0 ] && help && exit 1 | 
						|
 | 
						|
# Set required X variables | 
						|
export DISPLAY=:0 | 
						|
export XAUTHORITY="$XDG_DATA_HOME/xorg/Xauthority" | 
						|
 | 
						|
# Option handling | 
						|
SCRIPT="$(basename "$0")" | 
						|
while getopts ':h?d:k:s:' opt; do | 
						|
	case $opt in | 
						|
		h) | 
						|
			help | 
						|
			exit 0 | 
						|
			;; | 
						|
		d) | 
						|
			OPTION="d" | 
						|
			ARG="$OPTARG" | 
						|
			DEV="SYNA3602:00 0911:5288 Touchpad" | 
						|
			;; | 
						|
		k) | 
						|
			OPTION="k" | 
						|
			ARG="$OPTARG" | 
						|
			;; | 
						|
		s) | 
						|
			OPTION="s" | 
						|
			ARG="$OPTARG" | 
						|
			DEV="pointer:04F3200A:00 04F3:2373" | 
						|
			;; | 
						|
		:) | 
						|
			echo "$SCRIPT: option requires an argument '$OPTARG'" | 
						|
			echo "Try '$SCRIPT -h' for more information." | 
						|
			exit 1 | 
						|
			;; | 
						|
		\?) | 
						|
			echo "$SCRIPT: invalid option '$OPTARG'" | 
						|
			echo "Try '$SCRIPT -h' for more information." | 
						|
			exit 1 | 
						|
			;; | 
						|
	esac | 
						|
done | 
						|
 | 
						|
toggle_device() { | 
						|
	STATUS=$(xinput --list-props "$2" | awk '/Device Enabled/ { print $4 }') | 
						|
	[ "$STATUS" -eq 1 ] && xinput --disable "$2" || xinput --enable "$2" | 
						|
} | 
						|
 | 
						|
device() { | 
						|
	case "$1" in | 
						|
		1 | on) | 
						|
			xinput --enable "$2" | 
						|
			;; | 
						|
		0 | off) | 
						|
			xinput --disable "$2" | 
						|
			;; | 
						|
		t*) | 
						|
			toggle_device "$2" | 
						|
			;; | 
						|
		*) | 
						|
			echo "$SCRIPT: invalid argument '$1'" | 
						|
			echo "Try '$SCRIPT -h' for more information." | 
						|
			exit 1 | 
						|
			;; | 
						|
	esac | 
						|
} | 
						|
 | 
						|
keyboard() { | 
						|
	[ -z "$1" ] && return 1 | 
						|
 | 
						|
	if [ "$1" = "toggle" ]; then | 
						|
		if setxkbmap -query | grep -q options; then | 
						|
			keyboard "off" | 
						|
		else | 
						|
			keyboard "on" | 
						|
		fi | 
						|
 | 
						|
	elif [ "$1" = "on" ]; then | 
						|
		# Swap caps lock with escape | 
						|
		setxkbmap -option caps:swapescape | 
						|
 | 
						|
		# Swap left crtl with left alt | 
						|
		# setxkbmap -option ctrl:swap_lalt_lctl | 
						|
 | 
						|
		# Set touchpad toggle keyboard symbol | 
						|
		# xmodmap -e "keycode 93 = XF86iTouch" | 
						|
 | 
						|
	elif [ "$1" = "off" ]; then | 
						|
		# Clear all key mappings | 
						|
		setxkbmap -option '' | 
						|
	fi | 
						|
} | 
						|
 | 
						|
# Option execution | 
						|
# if [ "$DEV" = "Keyboard" ]; then | 
						|
# 	keyboard "$ARG" | 
						|
# else | 
						|
case "$OPTION" in | 
						|
	d | s) | 
						|
		device "$ARG" "$DEV" | 
						|
		;; | 
						|
	k) | 
						|
		keyboard "$ARG" | 
						|
		;; | 
						|
esac | 
						|
 | 
						|
# Useful input diagnostics packages: | 
						|
# - xinput | 
						|
# - xev | 
						|
# - evtest | 
						|
# | 
						|
# - setxkbmap -query | 
						|
# - xmodmap -pke | 
						|
 | 
						|
# https://superuser.com/questions/437053/firefox-doesnt-recognize-my-alt-keys-anymore | 
						|
# https://www.x.org/releases/X11R7.7/doc/xorg-docs/input/XKB-Config.html
 | 
						|
 |