


Negli ultimi giorni ho avuto problemi intermittenti con un mouse Bluetooth Trust (modello 24059-02) connesso al mio HP con Ubuntu. Il mouse ha funzionato regolarmente per un paio di giorni, poi improvvisamente ha smesso di connettersi, pur comparendo tra i dispositivi già accoppiati.
Questo è il resoconto del problema e della soluzione adottata, nella speranza che possa essere utile anche ad altri.
Il contesto hardware e software
- Sistema operativo: Ubuntu 24.04 LTS
- Scheda wireless integrata: Realtek RTL8821CE (Wi-Fi + Bluetooth combo)
- Mouse: Trust Puck Bluetooth Mouse (codice 24059-02)
- Stack Bluetooth:
bluez,bluetoothd, modulortw_8821ce
Il dispositivo viene riconosciuto da lsusb come:
Bus 001 Device 003: ID 0bda:b00e Realtek Semiconductor Corp. Bluetooth Radio
e da lspci come:
01:00.0 Network controller: Realtek Semiconductor Co., Ltd. RTL8821CE 802.11ac PCIe Wireless Network Adapter
Il problema
Dopo qualche tempo di funzionamento corretto, il mouse ha smesso di connettersi. L’indagine non è banale. A volte premere il pulsantino rosso sul retro – fino a che si vede una sequenza di led blu che scorre – è sufficiente per riattivare il mouse ma a volte non c’è nulla da fare: neppure spegnedo e riaccendendo il mouse, né staccando e ricollegando l’antennina.
Inizialmente mi sono chiesto se l’antenna fosse solo Wi-Fi o anche Bluetooth. Il chip Realtek RTL8821CE integra entrambi i protocolli e utilizza una sola antenna condivisa. Questo è tipico dei moduli combo wireless presenti nei portatili moderni: lo stesso circuito RF gestisce sia la trasmissione dati Wi-Fi che il canale BLE del mouse Bluetooth.
In questi moduli combo, l’alternanza tra Wi-Fi e Bluetooth avviene tramite una tecnica chiamata Time Division Multiplexing (TDM) per condividere il front-end RF, in modo da evitare interferenze interne.
Qui ho chiesto all’oracolo di San Gpt per ottenere lumi sulla questione. In breve la soluzione è il controller del Blutooth, bluetoothctl
Bluetoothctl
bluetoothctl è un tool da riga di comando per gestire dispositivi Bluetooth in ambiente Linux. Permette di accoppiare, connettere, scollegare e monitorare dispositivi direttamente dal terminale. È un client testuale che interagisce con il demone bluetoothd tramite il sistema D-Bus. Fa parte del pacchetto bluez, lo stack ufficiale per la gestione del Bluetooth su Linux.
In pratica, è il comando testuale che consente di “parlare” direttamente con il sistema Bluetooth. Anche se spartano, è spesso più affidabile delle interfacce grafiche, specialmente quando i dispositivi fanno i capricci.
Un altro problema è stato reperire l’indirizzo MAC del device, ma ci si può arrivare facilemnte utilizzando i comandi sopra (lscpi o lsusb).
Al comando bluetoothctl connect <MAC> ricevevo messaggi come:
Failed to connect: org.bluez.Error.Failed Operation already in progress Failed to connect: org.bluez.Error.Failed le-connection-abort-by-local
Nei log del kernel:
Bluetooth: hci0: unexpected cc 0x0c7c length: 1 < 3 bluetoothd[1152]: profiles/battery/battery.c:parse_battery_level() Trying to update an unregistered battery
Questi errori sono noti nel contesto dei dispositivi Bluetooth LE con chip Realtek. Il modulo rtw_8821ce presenta instabilità nella gestione della modalità a basso consumo (LPS) e problemi nel completare la connessione GATT con alcuni dispositivi.
La causa
Il mouse si accoppia correttamente ma, per motivi legati al driver o al timing del demone bluetoothd, la connessione BLE può venire interrotta dal sistema locale (errore le-connection-abort-by-local) oppure avviata quando i servizi del dispositivo non sono ancora completamente esposti. Ne consegue il mancato completamento della fase ServicesResolved.
La scheda Realtek è notoriamente sensibile a questi problemi, specialmente dopo resume da sospensione o dopo un pairing precedente lasciato in stato incoerente.
Soluzione adottata
Per ristabilire una connessione pulita al mouse, ho scritto uno script mouse_connect.sh da lanciare ogni volta che il mouse “si pianta”.
Il contenuto dello script
#!/bin/bash
# MAC del mouse Trust
MOUSE_MAC="CB:4C:45:8F:97:4C"
echo "Tentativo di riconnessione al mouse Trust ($MOUSE_MAC)..."
if ! systemctl is-active --quiet bluetooth.service; then
echo "Il servizio bluetooth non è attivo. Lo riavvio..."
sudo systemctl restart bluetooth.service
sleep 2
fi
bluetoothctl <<EOF
power on
agent on
default-agent
trust $MOUSE_MAC
connect $MOUSE_MAC
EOF
echo "Comando inviato. Verifica se il mouse si è riconnesso."
Lo script va salvato nella home directory e reso eseguibile con:
chmod +x ~/mouse_connect.sh
Può poi essere lanciato con:
./mouse_connect.sh
oppure si può creare un alias nel .bashrc:
alias reconn-mouse="~/mouse_connect.sh"
Considerazioni finali
Questo approccio ha permesso di aggirare il problema senza dover reinstallare driver o riavviare il sistema. Tuttavia, se il problema si ripresentasse con regolarità dopo ogni riavvio o sospensione, prenderò in considerazione:
- L’installazione di un driver migliorato da https://github.com/tomaspinho/rtl8821ce
- L’aggiunta di uno script automatico al resume (
/lib/systemd/system-sleep) - La disattivazione del plugin
batterynel filemain.confdibluetoothd, per evitare log ripetitivi
Per ora, lo script manuale è una soluzione efficace e veloce.






Commenti recenti