Skip to content

Instantly share code, notes, and snippets.

@auroracramer
Last active September 6, 2022 13:32
Show Gist options
  • Save auroracramer/fc35c237cdec7fdac3527f790e93b875 to your computer and use it in GitHub Desktop.
Save auroracramer/fc35c237cdec7fdac3527f790e93b875 to your computer and use it in GitHub Desktop.
Script for temporarily disabling keyboard from command line on Ubuntu 22.04
#!/usr/bin/env bash
if [[ -n "$1" ]]; then
TKB_TIMEOUT=$1
else
TKB_TIMEOUT=600 # 10 minutes
fi
# Prevent sudo from timing out
# https://serverfault.com/a/266463
SUDO_STATUS=/tmp/disable-keyboard-sudo-status.txt
echo $$ >> $SUDO_STATUS
trap 'rm -f $SUDO_STATUS >/dev/null 2>&1' 0
sudo_refresh() {
while [[ -f $SUDO_STATUS ]]; do
sudo -v
sleep 5
done &
}
sudo -v
sudo_refresh
# Get device events for keyboard and extra keys
# https://stackoverflow.com/a/7451456
KEYBOARD_EVENT=$(sudo libinput list-devices | awk '/Device: ThinkPad Extra Buttons/{getline; print}' | sed -e 's|Kernel: *||g')
EXTRAKEY_EVENT=$(sudo libinput list-devices | awk '/Device: AT Translated Set 2 keyboard/{getline; print}' | sed -e 's|Kernel: *||g')
# Launch event "grabbers" and capture PIDs
sudo evtest --grab $KEYBOARD_EVENT 2>&1>/dev/null &
keyboard_pid=$!
sudo evtest --grab $EXTRAKEY_EVENT 2>&1>/dev/null &
extrakey_pid=$!
# Set up exit trap to kill "grabbers" and remove sudo status file
# https://stackoverflow.com/a/2173421
trap "trap - SIGINT SIGTERM EXIT && sudo kill --signal=SIGKILL $keyboard_pid $extrakey_pid && rm -f $SUDO_STATUS >/dev/null 2>&1
" SIGINT SIGTERM EXIT
# Pop up window allowing user to re-enable keyboard early
zenity --warning --width=200 --height=50 --timeout=$TKB_TIMEOUT --text="Click OK to reenable keyboard"
# Sometimes text gets all garbled
reset
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment