bt (3018B)
1 #!/bin/ash 2 3 # Configuração de ambiente 4 TERMINAL=${TERMINAL:-st} 5 6 clear 7 printf '%s\n' "--- Bluetooth Manager ---" 8 9 # 1. Gerenciamento de dependências (verifica e instala) 10 MISSING="" 11 apk info -e bluez >/dev/null 2>&1 || MISSING="$MISSING bluez" 12 apk info -e bluez-deprecated >/dev/null 2>&1 || MISSING="$MISSING bluez-deprecated" 13 14 if [ -n "$MISSING" ]; then 15 printf "📦 Instalando pacotes Bluetooth:%s\n" "$MISSING" 16 doas apk add $MISSING >/dev/null || { printf "ERRO ao instalar dependências.\n"; exit 1; } 17 fi 18 19 # 2. Gerenciamento idempotente do serviço 20 if ! rc-service bluetooth status >/dev/null 2>&1; then 21 printf "⚙️ Iniciando serviço bluetooth...\n" 22 doas rc-service bluetooth start >/dev/null 23 fi 24 doas rc-update add bluetooth default >/dev/null 2>&1 25 26 # Inicializa o adaptador silenciosamente 27 bluetoothctl power on >/dev/null 2>&1 28 29 printf '%s\n' "Escaneando dispositivos (5s)..." 30 bluetoothctl --timeout 5 scan on 31 32 # Obtenção da lista de dispositivos disponíveis 33 LIST=$(bluetoothctl devices | sed 's/^Device //') 34 35 if [ -z "$LIST" ]; then 36 printf '%s\n' "Nenhum dispositivo encontrado." 37 exit 0 38 fi 39 40 # Interface de seleção do dispositivo alvo 41 DEVICE=$(printf '%s\n' "$LIST" | dmenu -i -l 15 -p "Bluetooth:") 42 43 if [ -z "$DEVICE" ]; then 44 printf '%s\n' "Seleção cancelada." 45 exit 0 46 fi 47 48 # Extração isolada do MAC address 49 MAC=$(printf '%s\n' "$DEVICE" | awk '{print $1}') 50 51 printf 'Processando: %s\n' "$DEVICE" 52 53 # Verificação de pareamento prévio para otimização de fluxo 54 PAIRED=$(bluetoothctl devices Paired | awk '{print $2}') 55 56 if printf '%s\n' "$PAIRED" | grep -qx "$MAC"; then 57 printf '%s\n' "Dispositivo já pareado. Iniciando conexão..." 58 else 59 printf '%s\n' "Dispositivo não pareado. Abrindo console interativo..." 60 61 # Inicia processo de pareamento em terminal secundário para permitir confirmação manual (ex: PIN) 62 "$TERMINAL" -e sh -c " 63 printf '%s\n' '=========================================' 64 printf '%s\n' ' AUTENTICAÇÃO BLUETOOTH ' 65 printf '%s\n' '=========================================' 66 printf 'Dispositivo: %s\n\n' '$DEVICE' 67 printf '%s\n' '1. O código de pareamento será exibido abaixo.' 68 printf '%s\n' '2. Confirme a operação no dispositivo móvel.' 69 printf '%s\n' '3. Se solicitado [yes/no], digite: yes' 70 printf '%s\n' '4. Para encerrar, digite: exit' 71 printf '%s\n' '-----------------------------------------' 72 73 # Aciona o pareamento de forma assíncrona para não bloquear o carregamento do prompt 74 (sleep 1; bluetoothctl pair '$MAC') & 75 76 # Delega o controle ao console interativo 77 bluetoothctl 78 " 79 fi 80 81 # Pós-processamento: estabelecimento de confiança e conexão final 82 bluetoothctl trust "$MAC" >/dev/null 2>&1 83 84 if bluetoothctl connect "$MAC" >/dev/null 2>&1; then 85 printf 'Conectado com sucesso a %s\n' "$DEVICE" 86 else 87 printf 'Falha na conexão. Verifique o status do dispositivo.\n' 88 fi