dotfiles

Repositório dotfiles
git clone git://git.sivaldodavi.com/dotfiles.git
Log | Files | Refs | README

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