Primero, necesitas hacerlo apt install bluez-tools obexpushd
.
Para enviar y recibir archivos, primero debe configurar y emparejar los dispositivos.
PREPARAR
de Arch Wiki - bluetooth :
Bluetoothctl
Inicia el bluetoothctl
comando interactivo. Allí se puede ingresar help
para obtener una lista de comandos disponibles.
- Encienda el controlador al ingresar
power on
. Está apagado por defecto.
- Ingrese
devices
para obtener la dirección MAC del dispositivo con el que emparejar.
- Ingrese al modo de descubrimiento de dispositivos con el
scan on
comando si el dispositivo aún no está en la lista.
- Encienda el agente con
agent on
.
- Ingrese
pair MAC Address
para hacer el emparejamiento (la finalización de la pestaña funciona).
- Si utiliza un dispositivo sin PIN, es posible que deba confiar manualmente en el dispositivo antes de que pueda volver a conectarse correctamente. Ingrese
trust MAC Address
para hacerlo.
- Finalmente, use
connect MAC_address
para establecer una conexión.
Los dos últimos puntos no son necesarios para la parte de envío de una transferencia de archivos, pero necesita la connect
última para la parte de recepción.
Una sesión de ejemplo puede verse así:
# bluetoothctl
[NEW] Controller 00:10:20:30:40:50 pi [default]
[bluetooth]# agent KeyboardOnly
Agent registered
[bluetooth]# default-agent
Default agent request successful
[bluetooth]# scan on
Discovery started
[CHG] Controller 00:10:20:30:40:50 Discovering: yes
[NEW] Device 00:12:34:56:78:90 myLino
[CHG] Device 00:12:34:56:78:90 LegacyPairing: yes
[bluetooth]# pair 00:12:34:56:78:90
Attempting to pair with 00:12:34:56:78:90
[CHG] Device 00:12:34:56:78:90 Connected: yes
[CHG] Device 00:12:34:56:78:90 Connected: no
[CHG] Device 00:12:34:56:78:90 Connected: yes
Request PIN code
[agent] Enter PIN code: 1234
[CHG] Device 00:12:34:56:78:90 Paired: yes
Pairing successful
[CHG] Device 00:12:34:56:78:90 Connected: no
[bluetooth]# connect 00:12:34:56:78:90
Attempting to connect to 00:12:34:56:78:90
[CHG] Device 00:12:34:56:78:90 Connected: yes
Connection successful
Para realizar cambios permanentes y para que el dispositivo udev
esté activo después de un reinicio, se necesita una regla:
/etc/udev/rules.d/10-local.rules
# Set bluetooth power up
ACTION=="add", KERNEL=="hci0", RUN+="/usr/bin/hciconfig %k up"
Consejo : Reemplace KERNEL=="hci0"
con KERNEL=="hci[0-9]*"
para que coincida con todas las interfaces BT.
Después de un ciclo de suspensión / reanudación, el dispositivo se puede encender automáticamente usando un servicio systemd personalizado:
/etc/systemd/system/[email protected]
[Unit]
Description=Bluetooth auto power on
After=bluetooth.service sys-subsystem-bluetooth-devices-%i.device suspend.target
[Service]
Type=oneshot
ExecStart=/usr/bin/hciconfig %i up
[Install]
WantedBy=suspend.target
Habilite una instancia de la unidad usando el nombre de su dispositivo bluetooth, por ejemplo [email protected]
.
Ahora sus dispositivos están emparejados. Comprueba que puedas ver al otro con bt-device -l
.
ENVIAR
A continuación, debe enviar su systemd
infraestructura para el envío al trabajo; de lo contrario, obtendrá el siguiente error:
Acquiring proxy failed: Error calling StartServiceByName for org.bluez.obex: GDBus.Error:org.freedesktop.systemd1.LoadFailed: Unit dbus-org.bluez.obex.service failed to load: No such file or directory.
Realice los systemd
cambios necesarios con
systemctl --user start obex
sudo systemctl --global enable obex
Esto asegura que pueda enviar archivos. ¡A sudo
también en la primera línea fallará !
Puede enviar archivos ahora por bluetooth-sendto --device=12:34:56:78:9A:BC filename filename2
. Si una transferencia se bloquea al 100%, la ctrlcfinaliza (o cancela antes).
Para conocer el nombre de su dispositivo (12: 34: 56: 78: 9A: BC), puede emitir bt-device -l
.
RECIBIR
del foro Raspberry Pi :
Queremos configurar un servidor push OBEX, por eso obexpushd
era necesario.
Se necesita el indicador de compatibilidad en el demonio Bluetooth, debe editarlo /etc/systemd/system/dbus-org.bluez.service
con el editor que elija agregando el -C
indicador al final de la ExecStart=
línea. Debe tener un aspecto como este:
ExecStart=/usr/lib/bluetooth/bluetoothd -C
Reinicie o reinicie el servicio sudo systemctl daemon-reload
después de editarlo. Elija un directorio específico donde se colocan los archivos recibidos, por ejemplo, por sudo mkdir /bluetooth
.
Inicie el servidor con sudo obexpushd -B -o /bluetooth -n
, debe responder con:
obexpushd 0.11.2 Copyright (C) 2006-2010 Hendrik Sattler
This software comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions.
Listening on bluetooth/[00:00:00:00:00:00]:9
Si eso no funciona y obtienes:
obexpushd 0.11.2 Copyright (C) 2006-2010 Hendrik Sattler
This software comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions.
BtOBEX_ServerRegister: Address already in use
net_init() failed
podría deberse a que tiene otro demonio o programa en ejecución que ocupa el canal 9 de rfcomm que obexpushd
usa de manera predeterminada. En este caso, cambie el canal a 23 así:
sudo obexpushd -B23 -o /bluetooth -n
para usar el canal 23.
Una vez que empiece a obexpushd
correr, abra una segunda ventana de terminal. Puede verificar que el servicio OBEX esté registrado en
sudo sdptool browse local
Debería enumerar (en el canal 23 en este caso), entre otros, esto:
Service Name: OBEX Object Push
Service Description: a free OBEX server
Service Provider: obexpushd
Service RecHandle: 0x10005
Service Class ID List:
"OBEX Object Push" (0x1105)
Protocol Descriptor List:
"L2CAP" (0x0100)
"RFCOMM" (0x0003)
Channel: 23
"OBEX" (0x0008)
Profile Descriptor List:
"OBEX Object Push" (0x1105)
Version: 0x0100
En esa ventana, mientras obexpushd
aún se está ejecutando, use bluetoothctl
para configurar discoverable on
. Ahora empareje desde su otro dispositivo. El emparejamiento DEBE hacerse mientras se obexpushd
está ejecutando, o el otro dispositivo no reconocerá que el servicio está disponible. Si el teléfono ya está emparejado, quítelo de su otro dispositivo, úselo bluetoothctl
para eliminarlo de la computadora Ubuntu y vuelva a emparejarlo.
Después de conectarse (el último punto de la lista anterior), debería poder recibir archivos. Aparecerán en el /bluetooth
directorio. Tenga en cuenta que serán propiedad de root, por lo que necesitará sudo para acceder a ellos. O puede hacer un chmod 0777 /bluetooth
directorio de intercambio público, ya que la autenticación de bluetooth se basa en el dispositivo y no en el usuario de todos modos.
Para automatizar el comando obexpushd, cree el archivo /etc/systemd/system/obexpush.service
[Unit]
Description=OBEX Push service
After=bluetooth.service
Requires=bluetooth.service
[Service]
ExecStart=/usr/bin/obexpushd -B23 -o /bluetooth -n
[Install]
WantedBy=multi-user.target
Luego, configúrelo para que se inicie automáticamente con
sudo systemctl enable obexpush
Después de reiniciar o reiniciar el servicio con sudo systemctl daemon-reload
, ahora debería poder enviar y recibir archivos en ambas direcciones.
No olvide conectar los dispositivos cuando intente recibir archivos.
/etc/systemd/system/dbus-org.bluez.service
es muy probable que sea un enlace simbólico/lib/systemd/...
, y no desea modificar este. Debería usar una anulación: cree el/etc/systemd/system/dbus-org.bluez.service.d
directorio y coloque un archivo que termine en.conf
(comoadd-compat-flag.conf
), que contenga solo:[Service] ExecStart= ExecStart=/usr/lib/bluetooth/bluetoothd -C
(con los