Preparação do Ambiente e Dependências
Para compilar a pilha de protocolo Bluetooth BlueZ no Ubuntu 22.04, é necessário garantir que o sistema possua as ferramentas de compilação básicas e as bibliotecas de desenvolvimento. Atualize os repositórios e instale o conjunto de ferramentas de build:
sudo apt update && sudo apt upgrade -y
sudo apt install -y build-essential autoconf automake libtool pkg-config git
Em seguida, instale as bibliotecas essenciais para o BlueZ. Vale ressaltar que no Ubuntu 22.04, o pacote python-docutils foi totalmente substituído por sua versão para Python 3:
sudo apt install -y libglib2.0-dev libdbus-1-dev libical-dev libreadline-dev python3-docutils
sudo apt install -y libudev-dev libusb-dev libncurses5-dev
Obtenção e Extração do Código-Fonte
O download do código-fonte pode ser feito diretamente dos repositórios oficiais do kernel. Após o download, extraia os arquivos e acesse o diretório criado:
wget https://www.kernel.org/pub/linux/bluetooth/bluez-5.66.tar.xz
tar -xf bluez-5.66.tar.xz
cd bluez-5.66
Configuração e Compilação
Para padronizar o processo de configuração, podemos criar um script shell que define os parâmetros de build. Neste exemplo, utilizaremos o prefixo /opt/bluez para isolar a instalação e habilitaremos ferramentas e recursos experimentais:
cat << 'EOF' > setup_build.sh
#!/bin/bash
# Script de configuração customizado para BlueZ
./configure \
--prefix=/opt/bluez \
--sysconfdir=/etc \
--localstatedir=/var \
--enable-experimental \
--enable-library \
--enable-tools \
--enable-testing
EOF
chmod +x setup_build.sh
./setup_build.sh
Caso a configuração seja concluída sem erros, inicie a compilação utilizando múltiplos núcleos de processamento para otimizar o tempo:
make -j$(nproc)
Após o término da compilação, instale os binários no sistema e atualize o cache de bibliotecas dinâmicas:
sudo make install
sudo ldconfig
Para garantir que os comandos compilados sejam acessíveis globalmente, crie links simbólicos no diretório padrão de executáveis:
sudo ln -s /opt/bluez/bin/bluetoothctl /usr/local/bin/bluetoothctl
sudo ln -s /opt/bluez/bin/btmon /usr/local/bin/btmon
Integração com o Systemd e D-Bus
Para gerenciar o daemon do Bluetooth como um serviço nativo do sistema, crie um arquivo de unidade do systemd:
sudo tee /etc/systemd/system/bluetooth.service > /dev/null << 'EOF'
[Unit]
Description=Daemon do Serviço Bluetooth
Requires=dbus-org.bluez.service
After=dbus-org.bluez.service
[Service]
Type=dbus
BusName=org.bluez
ExecStart=/opt/bluez/libexec/bluetooth/bluetoothd --experimental
NotifyAccess=main
LimitNPROC=1
ProtectHome=true
ProtectSystem=full
[Install]
WantedBy=bluetooth.target
Alias=dbus-org.bluez.service
EOF
Copie o arquivo de serviço D-Bus para o diretório de configuração do sistema, recarregue o daemon do systemd e ative o serviço:
sudo cp /opt/bluez/share/dbus-1/system-services/org.bluez.service /usr/share/dbus-1/system-services/
sudo systemctl daemon-reload
sudo systemctl enable --now bluetooth
Solução de Problemas Comuns
Durante a etapa de configuração e compilação, falhas relacionadas a dependências ausentes são frequentes. Abaixo estão as soluções para os erros mais comuns:
- Configuração falha por falta de glib, dbus ou libical: Resolvido ao instalar os pacotes
libglib2.0-dev,libdbus-1-develibical-dev. - Ferramenta rst2man não encontrada: O pacote
python3-docutilsresolve esta dependência de documentação. - Adaptador Bluetooth invisível ou sem energia: Verifique o estado do serviço com
systemctl status bluetoothe confirme se o módulo do kernel está carregado utilizandolsmod | grep bluetooth. Caso negativo, carregue manualmente comsudo modprobe btusb.
Para diagnóstico avançado, o daemon pode ser executado em modo de depuração detalhada diretamente no terminal:
sudo systemctl stop bluetooth
sudo /opt/bluez/libexec/bluetooth/bluetoothd -n -ddd