linutil/core/tabs/utils/bluetooth-control.sh

144 lines
4.2 KiB
Bash
Raw Normal View History

2024-08-15 03:41:41 +01:00
#!/bin/sh -e
2024-08-21 08:18:34 +01:00
. ../common-script.sh
. ../common-service-script.sh
setupBluetooth() {
2024-09-12 21:14:50 +01:00
printf "%b\n" "${YELLOW}Installing Bluez...${RC}"
if ! command_exists bluetoothctl; then
2024-09-17 13:23:23 +01:00
case "$PACKAGER" in
pacman)
2024-11-20 06:10:24 +00:00
"$ESCALATION_TOOL" "$PACKAGER" -S --noconfirm bluez bluez-utils
;;
apk)
"$ESCALATION_TOOL" "$PACKAGER" add bluez
;;
*)
"$ESCALATION_TOOL" "$PACKAGER" install -y bluez
;;
esac
else
2024-09-12 21:14:50 +01:00
printf "%b\n" "${GREEN}Bluez is already installed.${RC}"
fi
startService bluetooth
}
main_menu() {
while true; do
clear
2024-09-12 21:14:50 +01:00
printf "%b\n" "${YELLOW}Bluetooth Manager${RC}"
printf "%b\n" "${YELLOW}=================${RC}"
printf "%b\n" "1. Scan for devices"
printf "%b\n" "2. Pair with a device"
printf "%b\n" "3. Connect to a device"
printf "%b\n" "4. Disconnect from a device"
printf "%b\n" "5. Remove a device"
printf "%b\n" "0. Exit"
printf "%b" "Choose an option: "
2024-09-19 20:08:41 +01:00
read -r choice
case $choice in
1) scan_devices ;;
2) pair_device ;;
3) connect_device ;;
4) disconnect_device ;;
5) remove_device ;;
0) exit 0 ;;
2024-09-12 21:14:50 +01:00
*) printf "%b\n" "${RED}Invalid option. Please try again.${RC}" ;;
esac
done
}
scan_devices() {
clear
2024-09-12 21:14:50 +01:00
printf "%b\n" "${YELLOW}Scanning for devices...${RC}"
bluetoothctl --timeout 10 scan on
devices=$(bluetoothctl devices)
if [ -z "$devices" ]; then
2024-09-12 21:14:50 +01:00
printf "%b\n" "${RED}No devices found.${RC}"
else
2024-09-12 21:14:50 +01:00
printf "%b\n" "${GREEN}Devices found:${RC}"
printf "%b\n" "$devices"
fi
printf "%b" "Press any key to return to the main menu..."
read -r _
}
prompt_for_mac() {
command=$1
prompt_msg=$2
success_msg=$3
failure_msg=$4
while true; do
clear
devices=$(bluetoothctl devices)
if [ -z "$devices" ]; then
2024-09-12 21:14:50 +01:00
printf "%b\n" "${RED}No devices available. Please scan for devices first.${RC}"
printf "%b" "Press any key to return to the main menu..."
read -r _
return
fi
# Display devices with numbers
device_list="$devices"
2024-09-12 21:14:50 +01:00
i=1
echo "$device_list" | while IFS= read -r device; do
printf "%d. %s\n" "$i" "$device"
2024-09-12 21:14:50 +01:00
i=$((i + 1))
done
printf "%b\n" "0. Exit to main menu"
printf "%b" "$prompt_msg"
read -r choice
count=$(printf "%b" "$device_list" | wc -l)
count=$((count + 1))
if echo "$choice" | grep -qE '^[0-9]+$' && [ -n "$choice" ] && [ "$choice" -le "$count" ] && [ "$choice" -gt 0 ]; then
2024-09-12 21:14:50 +01:00
device=$(echo "$device_list" | sed -n "${choice}p")
mac=$(echo "$device" | awk '{print $2}')
2024-11-20 06:10:24 +00:00
if bluetoothctl info "$mac" >/dev/null 2>&1; then
if bluetoothctl "$command" "$mac"; then
2024-09-12 21:14:50 +01:00
printf "%b\n" "${GREEN}$success_msg${RC}"
break
else
2024-09-12 21:14:50 +01:00
printf "%b\n" "${RED}$failure_msg${RC}"
read -r _
fi
else
2024-09-12 21:14:50 +01:00
printf "%b\n" "${RED}Invalid MAC address. Please try again.${RC}"
read -r _
fi
elif [ "$choice" -eq 0 ]; then
return
else
2024-09-12 21:14:50 +01:00
printf "%b\n" "${RED}Invalid choice. Please try again.${RC}"
read -r _
fi
done
}
pair_device() {
prompt_for_mac "pair" "Enter the number of the device to pair: " "Pairing with device completed." "Failed to pair with device."
}
connect_device() {
prompt_for_mac "connect" "Enter the number of the device to connect: " "Connecting to device completed." "Failed to connect to device."
}
disconnect_device() {
prompt_for_mac "disconnect" "Enter the number of the device to disconnect: " "Disconnecting from device completed." "Failed to disconnect from device."
}
remove_device() {
prompt_for_mac "remove" "Enter the number of the device to remove: " "Removing device completed." "Failed to remove device."
}
checkEnv
2024-09-17 13:23:23 +01:00
checkEscalationTool
setupBluetooth
2024-08-15 03:41:41 +01:00
main_menu