158 lines
3.3 KiB
Bash
Executable File
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
|