Seguridad Wireless - Wifi

Equipos y materiales => Puntos de acceso, routers, switchs y bridges => Openwrt & LEDE => Mensaje iniciado por: raphik en 14-06-2020, 12:08 (Domingo)

Título: Transformar el router en altavoz bluetooth
Publicado por: raphik en 14-06-2020, 12:08 (Domingo)
Es posible utilizar un router OpenWRT como altavoz Bluetooth gracias al proyecto BlueZ-ALSA, que permite recibir audio desde dispositivos bluetooth externos, sin necesidad de instalar PulseAudio. Voy a explicar como hacerlo sin entrar en demasiados detalles.

Como punto de partida necesitamos:
NOTA: El paquete que he compilado soporta únicamente routers mips32, que son estos: https://openwrt.org/docs/techref/instructionset/mips_mips32#devices_with_this_instructionset (https://openwrt.org/docs/techref/instructionset/mips_mips32#devices_with_this_instructionset).
(https://i.imgur.com/rAHejWI.png)

Puedes hacer tu propia compilación (los detalles están aquí (https://foro.seguridadwireless.net/openwrt/der-router-als-bluetooth-lautsprecher/msg369631/#msg369631)) o descargarte alguna de estas:
Altavoz Bluetooth con el HG553 (http://www.mediafire.com/file/f3jbpy7gutz1tyc/openwrt-bcm63xx-generic-huawei_echolife-hg553-squashfs-cfe.bin/file)
Altavoz Bluetooth con el HG556a (https://foro.seguridadwireless.net/openwrt/der-router-als-bluetooth-lautsprecher/msg369640/#msg369640)

Las compilaciones incluyen ALSA, BlueZ y Bluez-Alsa. No se utiliza PulseAudio.
ALSA es un componente del núcleo de Linux diseñado para manejar dispositivos de sonido.
BlueZ es la pila oficial de protocolos Bluetooth para Linux. A partir de la versión 5 dejó de ser compatible con ALSA, en favor de PulseAudio. PulseAudio parece no funcionar en OpenWrt. Afortunadamente existe Bluez-Alsa.
Bluez-Alsa (https://github.com/Arkq/bluez-alsa) permite la integración entre BlueZ y ALSA, actuando como intermediador entre perfiles BT de audio y dispositivos BT de audio. Bluez-Alsa no está incorporado en OpenWrt, pero se puede incorporar haciendo una "compilación a medida".


Cargar la imagen en el router, insertar los pinchos USB de audio y BT y arrancar el router.


EMPAREJAR EL TELÉFONO MÓVIL CON EL ROUTER Y ENVIARLE AUDIO

En el PC, abrir una sesión SSH e invocar la utilidad para configurar conexiones BT "bluetoothctl"
Código: [Seleccionar]
root@OpenWrt:~# bluetoothctl
Agent registered

Desde la utilidad "bluetoothctl", activar el pincho BT del router
Código: [Seleccionar]
power on
discoverable on
pairable on
default-agent

(https://i.imgur.com/LdZrqh6.png)


En el teléfono móvil, activar BT. El dispositivo OpenSpk (el router) aparecerá disponible. Pulsarlo para vincular

(https://i.imgur.com/sA7O6BL.png)


El teléfono móvil pide un PIN. Poner cualquiera, por ejemplo 0000

(https://i.imgur.com/8vfwgjY.png)


La utilidad "bluetoothctl" detecta la solicitud de conexión de un nuevo dispositivo. Confirmar PIN. Poner el mismo que al teléfono móvil
Si pide confirmación para algún servicio determinado, contestar que sí. La conexión queda establecida

(https://i.imgur.com/XTCFbTf.png)


En el teléfono, el dispositivo OpenSpk aparece sincronizado y conectado

(https://i.imgur.com/zdvgCD6.png)


Cerrar la utilidad "bluetoothctl"
Código: [Seleccionar]
quit
En la sesión SSH, teclear
Código: [Seleccionar]
alsamixer -D bluealsa -V capture
Bajar el volumen de captura hasta un discreto 28% aproximadamente, para evitar saturación

(https://i.imgur.com/MZI8cfU.png)


Salir pulsanto la tecla Esc

En la sesión SSH, teclear
Código: [Seleccionar]
bluealsa-aplay -vv 00:00:00:00:00:00
La utilidad bluealsa-aplay recoge el audio del dispositivo BT y lo redirecciona a la tarjeta de sonido

(https://i.imgur.com/laHnlUk.png)


Volver al teléfono móvil y reproducir un audio o un vídeo. ¡El sonido se oirá en los altavoces o auriculares del router!

El volumen del pincho de audio se puede controlar con alsamixer
Código: [Seleccionar]
alsamixer
(https://i.imgur.com/iU8Q3JQ.png)


FICHEROS DE CONFIGURACIÓN
(Incluidos en la compilación)

/etc/bluetooth/audio.conf (Configura el pincho BT para recibir audio)
Código: [Seleccionar]
[General]
Enable=Source
(Parece que lo razonable sería Enable=Sink, pero no. BlueZ es así.)

/etc/bluetooth/main.conf (Se le puede poner un nombre al altavoz BT. No es necesario, pero mola)
Código: [Seleccionar]
[General]
Name=OpenSpk

/etc/init.d/bluealsa (Habilita el servicio bluealsa audio-sink)
Código: [Seleccionar]
#!/bin/sh /etc/rc.common

START=70
USE_PROCD=1
PROG=/usr/bin/bluealsa
start_service() {
procd_open_instance
procd_set_param command "$PROG" -i hci0 -p a2dp-sink
procd_close_instance
}
stop() {
service_stop /usr/bin/bluealsa
}

/etc/dbus-1/system.d/bluealsa.conf (Políticas de seguridad)
Código: [Seleccionar]
<!-- This configuration file specifies the required security policies
     for BlueALSA core daemon to work. -->

<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
 "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
<busconfig>

  <!-- ../system.conf have denied everything, so we just punch some holes -->

  <policy user="root">
    <allow own_prefix="org.bluealsa"/>
    <allow send_destination="org.bluealsa"/>
  </policy>

  <policy group="audio">
    <allow send_destination="org.bluealsa"/>
  </policy>

</busconfig>

/etc/asound (Genera el dispositivo PCM virtual bluealsa)
Código: [Seleccionar]
defaults.bluealsa.service "org.bluealsa"
defaults.bluealsa.interface "hci0"
defaults.bluealsa.profile "a2dp"
defaults.bluealsa.delay 10000

Es necesario reiniciar los servicios para activar los cambios
Código: [Seleccionar]
service dbus restart
service bluetoothd restart
service bluealsa restart

O, si se prefiere, hacer un reboot.
Título: Re:Transformar el router en altavoz bluetooth
Publicado por: Tki2000 en 15-06-2020, 11:05 (Lunes)
[...] Asegurarse de que se compilará la versión 19.07.3, actualizar e instalar fuentes [...]

Según la página de openwrt, esa versión da problemas en el arranque del hg556. ¿No será mejor probar con la 19.07.4 que dice que ese asunto ya está arreglado?

Está en los warnings en la página:
https://openwrt.org/toh/huawei/hg556a (https://openwrt.org/toh/huawei/hg556a)
Título: Re:Transformar el router en altavoz bluetooth
Publicado por: raphik en 15-06-2020, 12:31 (Lunes)
Según la página de openwrt, esa versión da problemas en el arranque del hg556. ¿No será mejor probar con la 19.07.4 que dice que ese asunto ya está arreglado?

Está en los warnings en la página:
https://openwrt.org/toh/huawei/hg556a (https://openwrt.org/toh/huawei/hg556a)

Gracias por avisar.

He quitado los enlaces para el HG556a. Los volveré a poner cuando genere nuevas imágenes 19.07.4.
Título: Receta para una compilación a medida que incluya BlueZ, ALSA y Bluez-Alsa.
Publicado por: raphik en 15-06-2020, 12:41 (Lunes)
Bluez-Alsa no viene "de serie" con OpenWrt. Para incluirlo hay que hacer una compilación a medida.

Descargar la versión SNAPSHOT (19.07.4). BlueZ y Dbus no interactúan bien en versiones anteriores
Código: [Seleccionar]
git clone https://github.com/openwrt/openwrt.git/
Descargar fuentes
Código: [Seleccionar]
cd openwrt
./scripts/feeds update -a
./scripts/feeds install -a

Descargar fuentes blue-alsa
Código: [Seleccionar]
mkdir -p ./feeds/packages/sound/bluez-alsa
mkdir -p ./feeds/packages/sound/bluez-alsa/files
wget -O  ./feeds/packages/sound/bluez-alsa/Makefile https://raw.githubusercontent.com/diizzyy/packages/sound-bluez-alsa/sound/bluez-alsa/Makefile
wget -O ./feeds/packages/sound/bluez-alsa/files/bluealsa.init https://raw.githubusercontent.com/diizzyy/packages/sound-bluez-alsa/sound/bluez-alsa/files/bluealsa.init

Editar el fichero openwrt/feeds/packages/sound/bluez-alsa/Makefile y eliminar la dependencia @LINUX_4_14 (línea 29).

Instalar fuentes blue-alsa
Código: [Seleccionar]
./scripts/feeds update -a
./scripts/feeds install bluez-alsa

Configurar opciones de firmware
Código: [Seleccionar]
make menuconfig
Seleccionar router
Target System ---> (X) Broadcom BCM63xx
Target Profile ---> (X) Huawei EchoLife HG553


Habilitar LuCI y comprobar la wifi (que a veces no está correctamente configurada)
LuCI ---> Collections ---> <*> luci
Kernel modules ---> Wireless Drivers ---> <*> kmod-b43
Network ---> WirelessAPD ---> <*> wpad-basic


Habilitar soporte de AUDIO
Kernel modules ---> Sound Support ---> <*> kmod-sound-core
Kernel modules ---> Sound Support ---> <*> kmod-usb-audio
Sound ---> <*> alsa-utils
Sound ---> <*> mpg123


Habilitar soporte BLUETOOTH
Utilities  ---> <*> bluez-daemon
Utilities  ---> <*> dbus-utils (para inspeccionar dbus)
Kernel modules ---> Input modules ---> <*> kmod-input-uinput (por si acaso hiciera falta)


Habilitar BLUEALSA
Global build settings  ---> (*) Compile with support for patented functionality
# Si no se marca lo que pone en la línea anterior, no se podrá elegir la siguiente
Sound ---> <*> bluez-alsa
# Si no se optimizar el driver fdk-aac para velocidad, dará error al compilar
Sound  ---> -*- fdk-aac
  Configuration ---> (*) Optimize for speed


Compilar (Mi PC sólo tiene dos núcleos)
Código: [Seleccionar]
make -j3 V=cs
Título: Compilación BlueAlsa para el HG556a
Publicado por: raphik en 16-06-2020, 07:58 (Martes)
Según la página de openwrt, esa versión da problemas en el arranque del hg556. ¿No será mejor probar con la 19.07.4 que dice que ese asunto ya está arreglado?

Está en los warnings en la página:
https://openwrt.org/toh/huawei/hg556a (https://openwrt.org/toh/huawei/hg556a)

He compilado la versión SNAPSHOT (la 19.07.04, actualmente) y las he colgado aquí:
Huawei EchoLife HG556a (version A) (http://www.mediafire.com/file/8qdkw0jnhwlvukt/openwrt-bcm63xx-generic-huawei_echolife-hg556a-a-squashfs-cfe.bin/file)
Huawei EchoLife HG556a (version B) (http://www.mediafire.com/file/0jzcnu62vy0dvok/openwrt-bcm63xx-generic-huawei_echolife-hg556a-b-squashfs-cfe.bin/file)
Huawei EchoLife HG556a (version C) (http://www.mediafire.com/file/242cg25mpykb794/openwrt-bcm63xx-generic-huawei_echolife-hg556a-c-squashfs-cfe.bin/file)

Para compilar hay que modificar el fichero openwrt/feeds/packages/sound/bluez-alsa/Makefile.
https://github.com/diizzyy/packages/blob/sound-bluez-alsa/sound/bluez-alsa/Makefile (https://github.com/diizzyy/packages/blob/sound-bluez-alsa/sound/bluez-alsa/Makefile)
Hay que eliminar la dependencia @LINUX_4_14 de la línea 29 o sustituirla por @LINUX_5_4.

He hecho pruebas con dos HG556a, versiones B y C, y funcionan bien. No tengo ninguno de la versión A.