2024-08-15 03:41:41 +01:00
#!/bin/sh -e
2024-08-05 20:24:05 +01:00
2024-08-21 08:18:34 +01:00
. ../common-script.sh
2024-08-15 06:15:12 +01:00
2024-09-12 21:14:50 +01:00
# Function to check Bluez is installed
2024-08-15 06:15:12 +01:00
setupBluetooth( ) {
2024-09-12 21:14:50 +01:00
printf "%b\n" " ${ YELLOW } Installing Bluez... ${ RC } "
2024-08-15 06:15:12 +01:00
if ! command_exists bluetoothctl; then
2024-09-17 13:23:23 +01:00
case " $PACKAGER " in
2024-08-15 06:15:12 +01:00
pacman)
2024-09-19 01:03:32 +01:00
" $ESCALATION_TOOL " " $PACKAGER " -S --noconfirm bluez-utils
2024-08-15 06:15:12 +01:00
; ;
*)
2024-09-19 01:03:32 +01:00
" $ESCALATION_TOOL " " $PACKAGER " install -y bluez
2024-08-15 06:15:12 +01:00
; ;
esac
else
2024-09-12 21:14:50 +01:00
printf "%b\n" " ${ GREEN } Bluez is already installed. ${ RC } "
2024-08-15 06:15:12 +01:00
fi
# Check if bluetooth service is running
if ! systemctl is-active --quiet bluetooth; then
2024-09-12 21:14:50 +01:00
printf "%b\n" " ${ YELLOW } Bluetooth service is not running. Starting it now... ${ RC } "
2024-09-19 01:03:32 +01:00
" $ESCALATION_TOOL " systemctl start bluetooth
2024-08-15 06:15:12 +01:00
if systemctl is-active --quiet bluetooth; then
2024-09-12 21:14:50 +01:00
printf "%b\n" " ${ GREEN } Bluetooth service started successfully. ${ RC } "
2024-08-15 06:15:12 +01:00
fi
fi
}
2024-08-05 20:24:05 +01:00
# Function to display the main menu
main_menu( ) {
while true; do
2024-10-22 06:27:52 +01:00
2024-09-12 21:14:50 +01:00
printf "%b\n" " ${ YELLOW } Bluetooth Manager ${ RC } "
printf "%b\n" " ${ YELLOW } ================= ${ RC } "
2024-09-22 17:01:10 +01:00
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
2024-08-05 20:24:05 +01:00
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 } " ; ;
2024-08-05 20:24:05 +01:00
esac
done
}
# Function to scan for devices
scan_devices( ) {
2024-10-22 06:27:52 +01:00
2024-09-12 21:14:50 +01:00
printf "%b\n" " ${ YELLOW } Scanning for devices... ${ RC } "
2024-08-05 20:24:05 +01:00
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 } "
2024-08-05 20:24:05 +01:00
else
2024-09-12 21:14:50 +01:00
printf "%b\n" " ${ GREEN } Devices found: ${ RC } "
2024-09-22 17:01:10 +01:00
printf "%b\n" " $devices "
2024-08-05 20:24:05 +01:00
fi
2024-09-22 17:01:10 +01:00
printf "%b" "Press any key to return to the main menu..."
2024-09-18 19:30:27 +01:00
read -r dummy
2024-08-05 20:24:05 +01:00
}
# Function to prompt for MAC address using numbers
prompt_for_mac( ) {
2024-09-12 21:14:50 +01:00
action = $1
command = $2
prompt_msg = $3
success_msg = $4
failure_msg = $5
2024-08-05 20:24:05 +01:00
while true; do
2024-10-22 06:27:52 +01:00
2024-08-05 20:24:05 +01:00
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 } "
2024-09-22 17:01:10 +01:00
printf "%b" "Press any key to return to the main menu..."
2024-09-18 19:30:27 +01:00
read -r dummy
2024-08-05 20:24:05 +01:00
return
fi
# Display devices with numbers
2024-09-12 21:14:50 +01:00
device_list = $( echo " $devices " | tr '\n' '\n' )
i = 1
echo " $device_list " | while IFS = read -r device; do
2024-09-19 01:13:35 +01:00
printf "%d. %s\n" " $i " " $device "
2024-09-12 21:14:50 +01:00
i = $(( i + 1 ))
2024-08-05 20:24:05 +01:00
done
2024-09-22 17:01:10 +01:00
printf "%b\n" "0. Exit to main menu"
printf "%b\n" " $prompt_msg "
2024-09-19 22:47:08 +01:00
read -r choice
2024-08-05 20:24:05 +01:00
# Validate the choice
2024-09-12 21:14:50 +01:00
if echo " $choice " | grep -qE '^[0-9]+$' && [ " $choice " -le " $(( i - 1 )) " ] && [ " $choice " -gt 0 ] ; then
device = $( echo " $device_list " | sed -n " ${ choice } p " )
2024-08-05 20:24:05 +01:00
mac = $( echo " $device " | awk '{print $2}' )
if bluetoothctl info " $mac " > /dev/null 2>& 1; then
2024-09-22 17:01:10 +01:00
bluetoothctl " $command " " $mac " && {
2024-09-12 21:14:50 +01:00
printf "%b\n" " ${ GREEN } $success_msg ${ RC } "
2024-08-05 20:24:05 +01:00
break
} || {
2024-09-12 21:14:50 +01:00
printf "%b\n" " ${ RED } $failure_msg ${ RC } "
2024-08-05 20:24:05 +01:00
}
else
2024-09-12 21:14:50 +01:00
printf "%b\n" " ${ RED } Invalid MAC address. Please try again. ${ RC } "
2024-08-05 20:24:05 +01:00
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 } "
2024-08-05 20:24:05 +01:00
fi
done
2024-09-22 17:01:10 +01:00
printf "%b" "Press any key to return to the main menu..."
2024-09-18 19:30:27 +01:00
read -r dummy
2024-08-05 20:24:05 +01:00
}
# Function to pair with a device
pair_device( ) {
prompt_for_mac "pair" "pair" "Enter the number of the device to pair: " "Pairing with device completed." "Failed to pair with device."
}
# Function to connect to a device
connect_device( ) {
prompt_for_mac "connect" "connect" "Enter the number of the device to connect: " "Connecting to device completed." "Failed to connect to device."
}
# Function to disconnect from a device
disconnect_device( ) {
prompt_for_mac "disconnect" "disconnect" "Enter the number of the device to disconnect: " "Disconnecting from device completed." "Failed to disconnect from device."
}
# Function to remove a device
remove_device( ) {
prompt_for_mac "remove" "remove" "Enter the number of the device to remove: " "Removing device completed." "Failed to remove device."
}
# Initialize
2024-08-15 06:15:12 +01:00
checkEnv
2024-09-17 13:23:23 +01:00
checkEscalationTool
2024-08-15 06:15:12 +01:00
setupBluetooth
2024-08-15 03:41:41 +01:00
main_menu