Skip to content

Instantly share code, notes, and snippets.

@diamondburned
Created November 3, 2024 21:58
Show Gist options
  • Save diamondburned/2153e12199782e809ded0b354677e371 to your computer and use it in GitHub Desktop.
Save diamondburned/2153e12199782e809ded0b354677e371 to your computer and use it in GitHub Desktop.
Script to observe for smartwatch's BT signal strength and autolock when it's weak
#!/usr/bin/env nix-shell
#!nix-shell -i bash -p bluez
BT_DEVICE="XX:XX:XX:XX:XX:XX"
BT_RSSI_THRESHOLD=-15
get_rssi() {
out=$(hcitool rssi $BT_DEVICE) || return 1
out=${out#*: }
echo $out
}
rssi_is_within_threshold() {
local rssi="$1"
(( rssi >= BT_RSSI_THRESHOLD ))
}
screen_is_locked() {
out=$(dbus-send \
--session --print-reply=literal \
--dest=org.gnome.ScreenSaver \
/org/gnome/ScreenSaver \
org.gnome.ScreenSaver.GetActive)
[[ $out == *true* ]]
}
lock_screen() {
dbus-send \
--type=method_call \
--dest=org.gnome.ScreenSaver \
/org/gnome/ScreenSaver \
org.gnome.ScreenSaver.Lock
}
main() {
while true; do
if screen_is_locked; then
echo "Screen is already locked, see you in a minute!"
sleep 1m
continue
fi
if ! rssi=$(get_rssi); then
echo "Device not connected, not doing anything..."
sleep 1s
continue
fi
if rssi_is_within_threshold $rssi; then
echo "Device is within range, continuing..."
sleep 1s
continue
fi
echo "Device is out of range, locking screen!"
lock_screen
sleep 5s
done
}
main
@diamondburned
Copy link
Author

Device will need to be paired with the computer first.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment