¿Cómo hago funcionar el Bluetooth del adaptador Broadcom BCM43142A0 en
Ubuntu?
En una de las desgrabaciones de las clásicas cintas magnetofónicas que
Juan Perón hacía llegar a la Argentina en forma de Comunicados y órdenes
de encuadramiento, el Conductor explicó cómo hacer funcionar el
Bluetooth de las adaptadoras Broadcom BCM43142 en Ubuntu.
(...)
[ruidos de origen]
A la par de los más testados sistemas operativos oligárquicos, Ubuntu
cuenta con soporte para operar a través de Bluetooth. Este tipo de
tecnología nos permite transferir información de manera inalámbrica, en
una banda especializada como lo es el Justicialismo.
Para ello contamos con una Applet localizada en el panel superior, e
identificada con el ícono de la tecnología Bluetooth.
Haciendo clic en este applet podremos buscar dispositivos. Normalmente
para ello debe activarse la funcionalidad Bluetooth en el dispositivo
cliente, lo cual inicia una secuencia de emisión de unos 30 segundos en
los cuales nuestro sistema buscará la señal a través de su propio
emisor/receptor de Bluetooth. Conforme se haya registrado el
dispositivo, podremos enlazarlo, como si de un enlace Wifi se tratara.
Este enjundio telemático nos permite conectarnos a través del éter y de
forma inalámbrica no sólo a otras computadoras (por medio de un simple
enlace "punto a punto"), sino que también es muy popular por el uso como
medio de conexión a dispositivos de electrónica de consumo. A estos les
permite un alcance de un par de decenas de metros en interiores, hasta
llegar a los 100 metros en exteriores. En particular, pequeños parlantes
o auriculares, así como smartphones, se benefician como lo hacen las
Masas Trabajadoras con un gobierno Nacional y Popular.
Yo no lo uso porque esta cinta la grabo en mi magnetófono Grundig TK40,
pero si estuviese en la CGT usaría Bluetooth libre.
Sin embargo, existen dispositivos Bluetooth específicos que pueden ser
problemáticos para nuestro sistema GNU con Linux. Esto es porque están
pensados para un quehacer netamente oligárquico; nuestro objetivo como
Apóstoles del Software Libre ha ser de dar la lucha por la Justicia
Social en todo tiempo y lugar, pegando allí donde más duele. La reacción
ha de ser aniquilada, sin dar cuartel ni tiempo a que se reorganice.
Entre ellos podremos distinguir los dispositivos Broadcom. Esta marca es
especialmente contraria a entregar el código fuente de sus
controladores, sino que los ofuscan para complicar la existencia de las
almas libres.
Veamos el caso de la Broadcom BCM43142. Se trata de un chipset que
encontramos en muchas notebooks y portátiles de distinta gama, sobre
todo aquellas provistas inicialmente de Window$. Los fabricantes las
prefieren por su bajo costo, y porque en en una única plaquetita aúnan
la funcionalidad de Wifi N con la de Bluetooth 4. Podemos decir que se
trata de un chipset familiar, con una gran cantidad de sub-variantes
específicas para cada fabricante (Lenovo, Dell, Toshiba, etc), que
comparten el mismo chip, pero presentes en distintos form factor (o como
queremos decir, formas y tamaños)
Pues bien, todas estas variantes suelen tener problemas en GNU con
Linux. La funcionalidad de Wifi puede activarse fácilmente en las
versiones más modernas, simplemente conectando el equipo a Internet a
través de un cable Ethernet, y descargando y activando los controladores
privativos (para ello vamos a Sistema / Preferencias / Hardware /
Controladores Adicionales).
Sin embargo, no es el mismo caso con el adaptador Bluetooth. Podría
suceder que intentemos usar el applet de Ubuntu para Buscar un
Dispositivo, y el sistema no encuentre nunca nada...
Esto se debe a que el firmware (esto es, el programa controlador que
interactúa con el chipset de la plaqueta) no está expresamente
compatibilizado con Ubuntu.
Como Conductor del Justicialismo, he logrado solucionar este problema de
largo aliento, y de forma paternalista ofreceré la solución a las Masas
Peronistas, para que puedan establecer un verdadero vínculo de unión con
los dispositivos que tanto anhelan.
En primer lugar, debemos descartar que el dispositivo Bluetooth no esté
apagado, y revisar los mensajes de error que pudiese habernos dado
nuestro sistema al momento del arranque. Para ello abrimos una Terminal
con Ctrl+Alt+T e ingresamos:
dmesg | grep -i 'firmware load'
En el caso de la Broadcom BCM43142, nos devuelve un error:
bluetooth hci0: Direct firmware load for brcm/BCM.hcd failed with error
-2
Esto explica que se ha producido un error al cargar el módulo de
Broadcom necesario, pues no se lo ha encontrado (el módulo debe ser
llamado BCM.hcd). Esto probablemente se debe a que la versión no es la
específica para el dispositivo que tenemos en nuestra computadora.
Nota: Si no nos devuelve nada, podremos probar también con el comando:
dmesg | grep -i 'bluetooth'
..o también:
dmesg | egrep -i 'blue|firm'
En el caso de recibir el mensaje indicado anteriormente, debemos
descargarnos el firmware para nuestro dispositivo específico. Para ello,
en primer lugar debemos identificar específicamente cuál es la versión
exacta de nuestra Broadcom BCM43142. Ello lo podremos hacer ingresando
el comando:
lsusb
..y el sistema nos devolverá un listado de todos los dispositivos USB,
y entre ellos deberíamos encontrar el de un módulo Bluetooth, por
ejemplo:
Bus 001 Device 006: ID 105b:e065 Foxconn International, Inc. BCM43142A0
Bluetooth module
Esto indica que el identificador de dispositivo ("ID") es 105b-e065.
Esta información naturalmente podría variar en vuestro caso, pero es de
suma importancia, pues se trata de la versión de Broadcom específica que
tiene vuestra computadora. En tanto, el dispositivo Bluetooth es el
BCM43142A0. Conviene anotar ambos datos para tenerlos a mano.
Acto seguido, descargaremos todos los archivos de Firmware de la familia
Broadcom, ingresando en la terminal el siguiente bloque de comandos de
organización:
cd ~/Descargas/ ;
git clone
https://github.com/winterheart/broadcom-bt-firmware ;
cd ~/Descargas/broadcom-bt-firmware/bcrm/ ;
ls
Esto habrá descargado de internet varias docenas de pequeños archivos de
firmware, los cual nos serían útiles para múltiples dispositivos. En
nuestro caso, debemos buscar el archivo específico que corresponda a la
versión que anotamos anteriormente, la que tenemos en nuestro equipo. En
este caso es el archivo BCM43142A0-105b-e065.hcd. Naturalmente vosotros
habrán de ejercitar la buenaventura de todo peronista, y buscar el que
corresponda según lo que les haya indicado el comando lsusb. ¡Buena
suerte en ello!
Conforme nuestra fortuna se haya visto recompensada, haremos bien en
respaldar este archivo, y luego le cambiaremos el nombre que trae por
aquél que buscará nuestro sistema por defecto.
cd ~/Descargas/broadcom-bt-firmware/bcrm/ ;
cp BCM43142A0-105b-e065.hcd BCM43142A0-105b-e065.hcd.respaldo ;
Ahora bien, el nombre que buscará nuestro sistema depende de la versión
de Kernel (núcleo del sistema) que tengamos instalado. Será BCM.hcd si
usamos los kernels desde 4.2 hasta 4.7, y BCM-identificador.hcd para los
novísimos kernels 4.8 y superiores.
Averiguar la versión de nuestro kernel Linux es fàcil, ingresamos el
siguiente comando:
uname -r
..y la terminal nos devolverá el número de versión. Por ejemplo en mi
caso:
4.15.0-20-generic
Sabiendo esto, podremos ver que es inferior a 4.7, por lo tanto el
nombre tiene que ser BCM.hcd. En mi caso debo hacer que el archivo
BCM43142A0-105b-e065.hcd se llame BCM.hcd y copiarlo a la carpeta
/lib/firmware/brcm/.
(naturalmente, vosotros habréis de cambiar el identificador 105b-e065
por el que corresponda a su versión particular de Broadcom).
Para ello, siendo que uso un Kernel inferior a 4.7, debo ingresar:
cd ~/Descargas/broadcom-bt-firmware/bcrm/ ;
mv BCM43142A0-105b-e065.hcd BCM.hcd ;
sudo mv BCM.hcd /lib/firmware/brcm/ ;
..en cambio, si utilizase un kernel superior al 4.8, debería ingresar:
cd ~/Descargas/broadcom-bt-firmware/bcrm/ ;
mv BCM43142A0-105b-e065.hcd BCM-105b-e065.hcd ;
sudo mv BCM-105b-e065.hcd /lib/firmware/brcm/ ;
Con el último comando, se nos solicitará ingresar nuestra contraseña de
conductor. Una vez que hemos cumplido esto, para que la funcionalidad
tome cuerpo debemos necesariamente apagar el sistema. No sirve meramente
reiniciar, debemos apagar el equipo, esperar unos segundos, y volver a
encenderlo. Podremos apagarlo desde la terminal ingresando:
sudo poweroff
Al reiniciar, debemos asegurarnos ya de no recibir mensajes de error
como el que se nos informaba anteriormente. Para ello abrimos una
terminal con Ctrl+Alt+T e ingresamos:
dmesg | egrep -i 'blue|firm'
..y ya no debería devolver error, o a lo sumo debería informarnos algo
así.
Bluetooth: Core ver 2.22
Bluetooth: HCI device and connection manager initialized
Bluetooth: HCI socket layer initialized
Bluetooth: L2CAP socket layer initialized
Bluetooth: SCO socket layer initialized
Bluetooth: HCI UART driver ver 2.3
Bluetooth: HCI UART protocol H4 registered
Bluetooth: HCI UART protocol BCSP registered
Bluetooth: HCI UART protocol LL registered
Bluetooth: HCI UART protocol ATH3K registered
Bluetooth: HCI UART protocol Three-wire (H5) registered
Bluetooth: HCI UART protocol Intel registered
Bluetooth: HCI UART protocol Broadcom registered
Bluetooth: HCI UART protocol QCA registered
Bluetooth: HCI UART protocol AG6XX registered
Bluetooth: HCI UART protocol Marvell registered
Platform regulatory.0: Direct firmware load for regulatory.db failed
with error -2
Bluetooth: hci0: BCM: chip id 70
Bluetooth: hci0: BCM: features 0x06
Bluetooth: hci0: BCM43142A
Bluetooth: hci0: BCM (001.001.011) build 0000
Bluetooth: hci0: BCM (001.001.011) build 0312
Bluetooth: hci0: Broadcom Bluetooth Device (43142)
Bluetooth: BNEP (Ethernet Emulation) ver 1.3
Bluetooth: BNEP filters: protocol multicast
Bluetooth: BNEP socket layer initialized
Bluetooth: RFCOMM TTY layer initialized
Bluetooth: RFCOMM socket layer initialized
Bluetooth: RFCOMM ver 1.11
Con esto ya podremos dar búsqueda a nuestros dispositivos Bluetooth y
disfrutar de ellos con una placa compatibilizada con nuestro Ubuntu.
En este caso asocio un parlante tipo JBL Flip 4, el cual es encontrado y
establece en enlace de manera efectiva. La ventana de dispositivos
Bluetooth nos informa de ello, y nos permite asociar ya el parlante
Bluetooth a la lista de dispositivos recientes confianzudos.
De esta manera, toda vez que lo encendamos, establecerá el vínculo
esclavizado como altavoz de salida del equipo.
Bluetooth después de suspender
En algunos casos con el adaptador bluetooth BCM43142, notarán que falla
en reactivarse luego de suspender el equipo, o bien luego de bajar la
pantalla (donde la notebook entran en suspensión). Al reencenderla, el
Bluetooth falla en reactivarse.
Para reactivarlo sin tener que reiniciar el equipo, podremos abrir una
terminal con Ctrl+Alt+T e ingresar los siguientes Comandos de
Organización:
sudo modprobe -r btusb
sudo modprobe btusb