#!/usr/bin/env bash # modules/bluetooth.sh # Requires: modules/utils.sh (globals + helpers), modules/firmware.sh (PCI_BT_DEVS, USB_BT_DEVS, USB_WIFI_DEVS) _install_bluetooth_stack() { local has_bt=false [ ${#PCI_BT_DEVS[@]} -gt 0 ] && has_bt=true [ ${#USB_BT_DEVS[@]} -gt 0 ] && has_bt=true if ! $has_bt; then for dev in "${USB_WIFI_DEVS[@]}"; do if echo "$dev" | grep -qi 'bluetooth'; then has_bt=true; break fi done fi if ! $has_bt; then echo " → No Bluetooth hardware detected, skipping." return fi local stack_failed=false if is_installed bluez; then echo " → Bluetooth stack already installed." service_enable_only=true fi if [ ! ${service_enable_only:-false} = true ]; then local bt_pkgs=() ! is_installed bluez && bt_pkgs+=(bluez) ! is_installed bluez-tools && bt_pkgs+=(bluez-tools) ! is_installed bluez-obexd && bt_pkgs+=(bluez-obexd) if [ ${#bt_pkgs[@]} -gt 0 ]; then if ! _run_cmd "Bluetooth" "sudo DEBIAN_FRONTEND=noninteractive apt install -y ${bt_pkgs[*]}" "Installing Bluetooth stack..."; then _msg_red "Bluetooth" "Failed to install the Bluetooth stack." stack_failed=true fi fi fi if command -v rfkill &>/dev/null; then if rfkill list bluetooth 2>/dev/null | grep -q "Soft blocked: yes"; then echo " → Unblocking Bluetooth (rfkill)..." sudo rfkill unblock bluetooth fi fi case "${DESKTOP_ENV:-other}" in kde) if ! is_installed bluedevil; then if ! _run_cmd "Bluetooth" "sudo DEBIAN_FRONTEND=noninteractive apt install -y bluedevil" "Installing bluedevil..."; then _msg_red "Bluetooth" "Failed to install bluedevil." fi fi if [ "${AUDIO_SERVER:-}" = "pipewire" ]; then if ! is_installed pipewire-pulse; then if ! _run_cmd "Bluetooth" "sudo DEBIAN_FRONTEND=noninteractive apt install -y pipewire-pulse" "Installing pipewire-pulse..."; then _msg_red "Bluetooth" "Failed to install pipewire-pulse." fi fi if ! is_installed wireplumber; then if ! _run_cmd "Bluetooth" "sudo DEBIAN_FRONTEND=noninteractive apt install -y wireplumber" "Installing wireplumber..."; then _msg_red "Bluetooth" "Failed to install wireplumber." fi fi fi ;; gnome) echo " → GNOME Bluetooth support already in gnome-control-center." ;; xfce|other) if ! is_installed blueman; then if ! _run_cmd "Bluetooth" "sudo DEBIAN_FRONTEND=noninteractive apt install -y blueman" "Installing blueman..."; then _msg_red "Bluetooth" "Failed to install blueman." fi fi ;; esac if ! systemctl is-enabled bluetooth &>/dev/null 2>&1; then sudo systemctl enable bluetooth 2>/dev/null || true fi if ! systemctl is-active bluetooth &>/dev/null 2>&1; then sudo systemctl start bluetooth 2>/dev/null || true fi if $stack_failed; then _msg_red "Bluetooth Setup" "Bluetooth setup finished with errors.\n\nThe stack may be incomplete.\nA session restart or reboot is\nrecommended to load the desktop\napplets and tray icons." 10 60 else _msg "Bluetooth Setup" "Bluetooth stack installed.\n\nA session restart or reboot is\nrecommended to load the desktop\napplets and tray icons." 10 60 fi }