Files
AndroidController/android-lock
2026-08-25 12:18:46 -06:00

158 lines
3.3 KiB
Bash
Executable File

#!/bin/bash
lookup_password_gnome() {
pwd="$(secret-tool lookup "$1" Passwords)"
if [ $? = 0 ]
then
echo "$pwd"
return 0
else
echo "Could not find password \"$1\" in Gnome keyring." >&2
echo ""
return 1
fi
}
lookup_password_kde() {
pwd="$(kwallet-query -r "$1" kdewallet)"
if [ $? = 0 ]
then
echo "$pwd"
return 0
else
echo "Could not find password \"$1\" in KDE wallet." >&2
echo ""
return 1
fi
}
lookup_password() {
password="$1"
which kwallet-query >/dev/null
has_kde=$?
which secret-tool >/dev/null
has_gnome=$?
if [ $has_kde = 0 ]
then
pwd="$(lookup_password_kde "$password")"
elif [ $has_gnome = 0 ]
then
pwd="$(lookup_password_gnome "$password")"
else
echo "System does not use either KDE wallet or Gnome keyring" >&2
return 2;
fi
if [ $? = 0 ]
then
echo "$pwd";
return 0;
else
echo ""
return 1;
fi
}
is_screen_on() {
[ "$(adb shell dumpsys power | grep mHoldingDisplaySuspendBlocker= | grep -oE '(true|false)')" == true ] && return
false
}
is_unlocked() {
[ "$(adb shell dumpsys window| awk '/mDreamingLockscreen=/{print $2; exit}' | grep -oE '(true|false)')" == false ] && return
false
}
unlock() {
if ! is_screen_on
then
adb shell input keyevent 26 # wakeup
fi
adb shell input keyevent 82 # get the keyboard ready
adb shell input keyevent 66;
adb shell input keyevent 66;
password_name="android-${ANDROID_SERIAL}"
sleep 1; # wait a bit to ensure all the inputs have fully processes.
password="$(lookup_password "$password_name")"
if [ -z "$password" ]
then
echo "No password found. Please submit one under the \"${password_name}\" entry in the OS keyring." >&2
exit 1
else
adb shell input keyboard text "$password"
adb shell input keyboard keyevent 66;
echo "OK, should be on now." >&2
fi
}
lock() {
adb shell input keyevent 26;
}
list_devices() {
adb devices | awk '/(^[[:alnum:]]+[[:blank:]]+device$)/ {print $1}'
}
first_device() {
devices="$(adb devices | awk '/(^[[:alnum:]]+[[:blank:]]+device$)/ {print $1}')"
if [ -z "$devices" ]
then
echo ""
return
else
set -- "$devices"
echo $1
fi
}
has_devices() {
[ ! -z "$(list_devices)" ] && return
false
}
while getopts 'uls:' flag
do
case "${flag}" in
u) set_unlock=true ;;
l) set_lock=true ;;
s) export ANDROID_SERIAL="${OPTARG}" ;;
*) print_usage; exit 1 ;;
esac
done
which adb >/dev/null 2>/dev/null
if [ $? != 0 ]
then
echo "ADB not installed or not located in $PATH" >&2
exit 4
fi
if ! has_devices
then
echo "No Android devices found" >&2
exit 3
fi
if [ -z "$ANDROID_SERIAL" ]
then
export ANDROID_SERIAL="$(first_device)"
fi
if is_unlocked
then
if [ "$set_unlock" != true ]
then
echo "Locking screen." >&2
lock
else
echo "Screen is already unlocked." >&2
fi
else
if [ "$set_lock" != true ]
then
echo "Screen is off. Turning on." >&2
unlock
else
echo "Screen is already locked." >&2
fi
fi