renamed bthandler to bt, added hardcoded paired_devices file since "bluetoothctl paired-devices" seems unreliable
This commit is contained in:
parent
57d4590b2b
commit
4e36aba9cb
27
Makefile
27
Makefile
@ -4,19 +4,28 @@
|
|||||||
VERSION = 1.1
|
VERSION = 1.1
|
||||||
|
|
||||||
# paths
|
# paths
|
||||||
PREFIX = ~/.local/bin/tools
|
PREFIX = ~/.local/bin
|
||||||
|
DATA_DIR = ~/.local/share/bt#if changed, needs adjustment in bt as well (defined in the beginning)
|
||||||
|
SRC = bt
|
||||||
|
|
||||||
SRC = bthandler
|
|
||||||
OBJ = $(SRC:.c=.o)
|
|
||||||
|
|
||||||
install:
|
install:
|
||||||
mkdir -p $(DESTDIR)$(PREFIX)
|
mkdir -p $(DESTDIR)$(PREFIX)
|
||||||
cp -f bthandler $(DESTDIR)$(PREFIX)
|
mkdir -p $(DATA_DIR)
|
||||||
chmod 755 $(DESTDIR)$(PREFIX)/bthandler
|
cp -f bt $(DESTDIR)$(PREFIX)
|
||||||
touch $(DESTDIR)$(PREFIX)/bt_blacklist
|
chmod 755 $(DESTDIR)$(PREFIX)/bt
|
||||||
|
touch $(DATA_DIR)/blacklist
|
||||||
|
touch $(DATA_DIR)/paired
|
||||||
|
|
||||||
uninstall:
|
uninstall:
|
||||||
rm -f $(DESTDIR)$(PREFIX)/bthandler
|
rm -f $(DESTDIR)$(PREFIX)/bt
|
||||||
rm -f $(DESTDIR)$(PREFIX)/bt_blacklist
|
rm -rf $(DATA_DIR)
|
||||||
|
|
||||||
.PHONY: install uninstall
|
#clears manual paired devices list and blacklist
|
||||||
|
clear:
|
||||||
|
rm -rf $(DATA_DIR)
|
||||||
|
mkdir -p $(DATA_DIR)
|
||||||
|
touch $(DATA_DIR)/paired
|
||||||
|
touch $(DATA_DIR)/blacklist
|
||||||
|
|
||||||
|
.PHONY: install uninstall clear
|
||||||
|
103
bt
Executable file
103
bt
Executable file
@ -0,0 +1,103 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#wait time to discover new devices in seconds
|
||||||
|
SCAN_PERIOD=5
|
||||||
|
BLACKLIST=${XDG_DATA_HOME:-$HOME/.local/share}/bt/blacklist
|
||||||
|
PAIRLIST=${XDG_DATA_HOME:-$HOME/.local/share}/bt/paired
|
||||||
|
actions="turn off\nturn on\npair\nunpair"
|
||||||
|
|
||||||
|
#Checks for necessary programs to be present. Very unlikely not to be present but let's just err on the safer side.
|
||||||
|
for prog in dmenu bluetoothctl awk cat; do
|
||||||
|
if ! hash "$prog" 2>/dev/null; then
|
||||||
|
printf 'bthandler: %s: command not found\n' "$prog" >&2
|
||||||
|
exit 127
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
#Compile list of all Bluetooth IDS of paired devices (from bluetoothctl and from hardcoded list)
|
||||||
|
bluetoothctl paired-devices | awk '{print $2}' > /tmp/bt_IDS
|
||||||
|
cat "$PAIRLIST" | awk '{print $2}' >> /tmp/bt_IDS
|
||||||
|
echo bt_IDS:
|
||||||
|
cat /tmp/bt_IDS
|
||||||
|
bt_IDS="$( cat /tmp/bt_IDS | sort -u )"
|
||||||
|
[ -n "$bt_IDS" ] && echo "$bt_IDS" > /tmp/bt_IDS
|
||||||
|
echo bt_IDS sorted:
|
||||||
|
cat /tmp/bt_IDS
|
||||||
|
|
||||||
|
#Compile list of all device Names of paired devices (from bluetoothctl and from hardcoded list)
|
||||||
|
bluetoothctl paired-devices | awk '{for (i=3; i<NF; i++) printf $i " "; print $NF}' > /tmp/paired_devices
|
||||||
|
echo paired_devices:
|
||||||
|
cat /tmp/paired_devices
|
||||||
|
cat "$PAIRLIST" | awk '{for (i=3; i<NF; i++) printf $i " "; print $NF}' >> /tmp/paired_devices
|
||||||
|
paired_devices="$( cat /tmp/paired_devices | sort -u )"
|
||||||
|
[ -n "$paired_devices" ] && echo "$paired_devices" > /tmp/paired_devices
|
||||||
|
echo paired_devices sorted:
|
||||||
|
cat /tmp/paired_devices
|
||||||
|
|
||||||
|
|
||||||
|
grep -vf "$BLACKLIST" /tmp/paired_devices > /tmp/disp_devices
|
||||||
|
|
||||||
|
#Don't print empty device list, removes unnecessary empty choice in dmenu
|
||||||
|
len=$(cat /tmp/disp_devices | wc -l)
|
||||||
|
echo len: $len
|
||||||
|
[ $len -eq 0 ] && choice=$( printf "$actions" | dmenu -i -p 'What BT action would you like to perform:' )
|
||||||
|
[ $len -gt 0 ] && choice=$( printf "$(< /tmp/disp_devices)\n$actions" | dmenu -i -p 'What BT action would you like to perform:' )
|
||||||
|
|
||||||
|
cleanup(){
|
||||||
|
rm -f /tmp/bt_devices
|
||||||
|
rm -f /tmp/bt_IDS
|
||||||
|
rm -f /tmp/paired_devices
|
||||||
|
rm -f /tmp/new_devices
|
||||||
|
rm -f /tmp/disp_devices
|
||||||
|
bluetoothctl scan off > /dev/null
|
||||||
|
exit 0
|
||||||
|
}
|
||||||
|
|
||||||
|
case $choice in
|
||||||
|
"turn on") bluetoothctl power on
|
||||||
|
cleanup;;
|
||||||
|
"turn off") bluetoothctl power off
|
||||||
|
cleanup;;
|
||||||
|
"scan on") bluetoothctl power on && echo power on && sleep 2
|
||||||
|
[ -n $TERMINAL ] && ($TERMINAL -e bluetoothctl scan on ) || st bluetoothctl scan on
|
||||||
|
cleanup;;
|
||||||
|
"pair") bluetoothctl power on
|
||||||
|
bluetoothctl scan on & disown
|
||||||
|
notify-send "Bluetooth" "Searching for devices, please wait a bit"
|
||||||
|
sleep $SCAN_PERIOD
|
||||||
|
bluetoothctl devices | awk '{for (i=3; i<NF; i++) printf $i " "; print $NF}' > /tmp/bt_devices
|
||||||
|
grep -vf /tmp/paired_devices /tmp/bt_devices > /tmp/new_devices
|
||||||
|
choice=$( cat /tmp/new_devices | dmenu -l 10 -i -p 'pair with which device?' )
|
||||||
|
if [ -n "$choice" ]; then
|
||||||
|
bluetoothctl devices | awk '{print $2}' > /tmp/bt_IDS
|
||||||
|
dev_no=$(cat -n /tmp/bt_devices | grep "$choice" | awk '{print $1}')
|
||||||
|
dev_id=$(cat -n /tmp/bt_IDS | grep -E $dev_no"[[:space:]]" | awk '{print $2}' )
|
||||||
|
|
||||||
|
bluetoothctl pair $dev_id && sleep 2
|
||||||
|
bluetoothctl connect $dev_id
|
||||||
|
#if device is not already hard coded as paired, add to paired devices list
|
||||||
|
echo grep: $( grep $dev_id "$PAIRLIST" )
|
||||||
|
if [ -z $( grep $dev_id "$PAIRLIST" ) ]; then
|
||||||
|
echo "Device $dev_id $choice" >> "$PAIRLIST"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
cleanup;;
|
||||||
|
"unpair") choice=$( cat /tmp/paired_devices | dmenu -l 10 -i -p 'remove which paired device?')
|
||||||
|
if [ -n "choice" ]; then
|
||||||
|
dev_no=$(cat -n /tmp/paired_devices | grep "$choice" | awk '{print $1}')
|
||||||
|
dev_id=$(cat -n /tmp/bt_IDS | grep -E $dev_no"[[:space:]]" | awk '{print $2}' )
|
||||||
|
bluetoothctl remove $dev_id
|
||||||
|
#remove device to unpair from hard coded paired devices list
|
||||||
|
new_paired_list="$( grep -v "$dev_id" "$PAIRLIST" )"
|
||||||
|
echo "$new_paired_list" > "$PAIRLIST"
|
||||||
|
fi
|
||||||
|
cleanup;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ -n "$choice" ]; then
|
||||||
|
dev_no=$(cat -n /tmp/paired_devices | grep "$choice" | awk '{print $1}')
|
||||||
|
dev_id=$(cat -n /tmp/bt_IDS | grep $dev_no | awk '{print $2}')
|
||||||
|
bluetoothctl power on
|
||||||
|
bluetoothctl connect $dev_id
|
||||||
|
fi
|
||||||
|
|
||||||
|
cleanup
|
Loading…
Reference in New Issue
Block a user