--- title: OBEX File Transfer description: Send files, browse phone storage, and download data using OBEX profiles --- import { Aside, Tabs, TabItem } from '@astrojs/starlight/components'; OBEX (Object Exchange) enables file transfer over Bluetooth. mcbluetooth supports four OBEX profiles: | Profile | Code | Purpose | |---------|------|---------| | **OPP** | Object Push | Simple file sending | | **FTP** | File Transfer | Full file browsing | | **PBAP** | Phonebook Access | Read contacts (see [Phonebook guide](/guides/phonebook-messages/)) | | **MAP** | Message Access | Read SMS/MMS (see [Phonebook guide](/guides/phonebook-messages/)) | ## Prerequisites OBEX requires the `obexd` daemon: ```bash sudo pacman -S bluez-obex ``` ```bash sudo apt install bluez-obex ``` Verify installation: ``` bt_obex_status ``` If obexd isn't running: ``` bt_obex_start_daemon ``` ## Quick File Send (OPP) The simplest way to send a file: ``` bt_obex_send_file address="AA:BB:CC:DD:EE:FF" file_path="~/Documents/report.pdf" ``` - Creates a temporary OPP session - Sends the file (recipient sees accept prompt) - Waits for completion - Closes the session ### Non-blocking Send For large files, start transfer without waiting: ``` bt_obex_send_file address="..." file_path="large_video.mp4" wait=false ``` Returns a `transfer_path` to monitor progress: ``` bt_obex_transfer_status transfer_path="/org/bluez/obex/client/session0/transfer0" ``` ## Pull Business Card (OPP) Get the device's default vCard: ``` bt_obex_get_vcard address="AA:BB:CC:DD:EE:FF" save_path="~/contact.vcf" ``` ## File Browsing (FTP) For full file system access, create an FTP session: ### Create Session ``` bt_obex_connect address="AA:BB:CC:DD:EE:FF" target="ftp" ``` Returns: ```json { "success": true, "session_id": "ftp_AABBCCDDEEFF", "address": "AA:BB:CC:DD:EE:FF", "target": "ftp" } ``` ### Browse Folders ``` # List root bt_obex_browse session_id="ftp_AABBCCDDEEFF" path="/" # Navigate to folder bt_obex_browse session_id="ftp_AABBCCDDEEFF" path="DCIM" # Go up bt_obex_browse session_id="ftp_AABBCCDDEEFF" path=".." ``` Returns: ```json { "entries": [ {"name": "DCIM", "type": "folder"}, {"name": "Download", "type": "folder"}, {"name": "document.pdf", "type": "file", "size": 102400} ] } ``` ### Download Files ``` bt_obex_get session_id="ftp_..." remote_path="photo.jpg" local_path="~/Downloads/photo.jpg" ``` ### Upload Files ``` bt_obex_put session_id="ftp_..." local_path="~/document.pdf" remote_path="document.pdf" ``` ### Create Folder ``` bt_obex_mkdir session_id="ftp_..." folder_name="Backup" ``` ### Delete Files ``` bt_obex_delete session_id="ftp_..." remote_path="old_file.txt" ``` ### Close Session Always close when done: ``` bt_obex_disconnect session_id="ftp_AABBCCDDEEFF" ``` ## Session Management ### List Active Sessions ``` bt_obex_sessions ``` ### Check OBEX Status ``` bt_obex_status ``` Returns: ```json { "status": "ready", "obexd_installed": true, "obexd_running": true, "dbus_accessible": true, "active_sessions": [...] } ``` ## Transfer Monitoring ### Check Progress ``` bt_obex_transfer_status transfer_path="/org/bluez/obex/client/session0/transfer0" ``` Returns: ```json { "status": "active", "size": 104857600, "transferred": 52428800, "progress_percent": 50 } ``` ### Cancel Transfer ``` bt_obex_transfer_cancel transfer_path="..." ``` ## Common Workflows ### Backup Phone Photos ``` # Connect FTP session bt_obex_connect address="..." target="ftp" # Navigate to photos bt_obex_browse session_id="ftp_..." path="/" bt_obex_browse session_id="ftp_..." path="DCIM" bt_obex_browse session_id="ftp_..." path="Camera" # Download each photo bt_obex_get session_id="ftp_..." remote_path="IMG_001.jpg" local_path="~/backup/" bt_obex_get session_id="ftp_..." remote_path="IMG_002.jpg" local_path="~/backup/" # Close session bt_obex_disconnect session_id="ftp_..." ``` ### Share Document ``` # Simple send bt_obex_send_file address="..." file_path="~/report.pdf" ``` ## Device Compatibility | Device Type | OPP | FTP | |-------------|-----|-----| | Android phones | ✓ | Varies | | iPhones | ✓ | ✗ | | Feature phones | ✓ | ✓ | | Windows PCs | ✓ | ✓ | | macOS | ✓ | ✗ | ## Troubleshooting ### "Device rejected connection" - Ensure device is paired first - Check device has OBEX enabled in Bluetooth settings - Some devices require explicit file sharing permission ### "NotSupported" The device doesn't support the requested profile. Try OPP instead of FTP. ### Transfer Stuck at 0% The receiving device may be showing an accept prompt. Check its screen. ### Session Disappeared Sessions are tied to obexd. If it restarts, create a new session.