omdrop-owl Brings AirDrop to Linux on MediaTek Wi-Fi While Keeping Wi-Fi Active
The omdrop-owl project enables bidirectional AirDrop file transfer between Linux (on MediaTek MT7925 Wi-Fi) and Apple devices by running the AWDL protocol in userspace, piggybacking on the existing Wi-Fi channel so the network connection stays active, with installation steps, hardware compatibility details, and known limitations documented.
What Problem Does It Solve
AirDrop relies on Apple's proprietary AWDL (Apple Wireless Direct Link) protocol, which negotiates time-slotted communication on fixed channels (6, 44, 149). Apple's Broadcom firmware implements AWDL natively, so Macs and iPhones work out of the box. On Linux, the open-source OWL (Open Wireless Link) implementation from ETH Zurich can emulate AWDL, but traditionally requires a Wi-Fi card that supports "active monitor mode" — effectively limited to the Atheros AR9271 USB adapter — and usually monopolizes the entire radio.
omdrop-owl closes this gap for a common MediaTek MT7925 card (as found in the Framework 13 laptop) by letting AWDL share the channel already used by the Wi-Fi access point, so the station interface stays connected to the router while AirDrop works.
How It Works
The key insight is to run AWDL on the same channel as the current AP. The implementation proceeds in four steps:
Channel alignment. AWDL only uses channels 6, 44, and 149. If the router operates on one of these, the card never needs to leave the AP.
Monitor interface with station MAC. A monitor interface mon0 is created and assigned the MAC address of the active station interface. OWL runs on mon0 with the parameter -S intersect, meaning it only advertises the time slots the phone makes available on that channel.
ACK handling via station interface. Injected frames from the MT7925 use the station's MAC; the station interface automatically sends ACKs for unicast frames from the phone. This avoids the need for an "active" monitor interface — a regular monitor interface plus correct channel alignment suffices.
Virtual awdl0 interface. OWL creates awdl0, to which omdrop's receiver binds. Service advertisement ( _airdrop._tcp) is sent every few seconds by a script borrowed from omdrop-awdl, using the --plain flag because OWL adds its own AWDL encapsulation.
Crucially, omdrop-owl reuses the entire upper-layer stack from omdrop-awdl (AirDrop sender airdrop-send.py, BLE wake-up broadcast, mDNS responder, send-to-peer, etc.) without modification, because those tools only speak to awdl0 or BlueZ. The borrowed files are fetched at a pinned commit during build and not committed to the repository, avoiding GPL-2.0 license contamination.
Support Matrix
Hardware compatibility is recorded in userspace/owl-profiles, one line per driver: mt7925e (MediaTek MT7925, Framework 13) — tested, bidirectional works, Wi-Fi stays connected. iwlwifi (Intel AX200, AX211) — does not work: the firmware drops injected frames while associated and does not ACK in monitor mode.
All other cards — fall back to a catch-all * line that requires manual opt-in via echo 1 | sudo tee /etc/omdrop/allow-untested.
The project documents why Intel cards fail rather than glossing over it. Adding a new card involves: identify the driver name, set the router to channel 6/44/149, copy the * line in /etc/omdrop/owl-profiles and replace it with your driver, run sudo tools/test-card.sh (which guides you through sending/receiving a photo, then monitors Wi-Fi for five minutes and produces a report), and submit a PR with the new line and summary.txt.
Real-World Usage
On Arch Linux: makepkg -si. On Debian/Ubuntu: install build dependencies, then run tools/build-deb.sh and install the resulting .deb. Both methods compile OWL at the pinned commit with two patches from patches/, install everything under /usr/lib/omdrop (including omdrop-discoverable, portable omdrop-awdl utilities, a polkit policy, and a NetworkManager rule to ignore awdl0 and mon0). After installing omdrop itself (version with radio-backend support), enable it from the panel. /usr/lib/omdrop/omdrop-discoverable probe reports any blockers.
The panel UI lists nearby devices, shows a radar-style signal strength graph, and lets you control discoverability timeout, displayed name, and download folder. Received files are auto-saved, copied to clipboard, and a notification opens the file. Sending uses the same panel to pick a target device.
Development workflow: just build assembles artifacts into build/lib; just test runs the card test suite against that build.
Status and Known Issues
On MT7925, omdrop-discoverable implements the full backend contract: start returns in ~2 seconds with awdl0 up and broadcasting, peers lists the phone; a second start returns 5 and extends the visibility window; stop tears down in ~2 seconds; window expiry is automatic.
Four known issues are documented honestly:
Deleting the monitor interface freezes the card. Removing mon0 while the station remains associated causes the station to appear connected but stop receiving traffic, recovering only after reloading the mt7925e driver. This is believed to be an mt76 firmware bug. Since the backend contract forbids driver reloads, stop now forces an immediate reconnect after interface deletion — testing shows the station survives every cycle.
Sending is slower than receiving. ~490 kB/s vs ~1.3 MB/s. Injected frames are emitted at a fixed cadence (~every 2.5 ms) regardless of the PHY rate OWL requests or the time slots the phone grants.
Router must be on channel 6, 44, or 149. Otherwise start exits with code 3 and explains why. Disassociating from the AP during the AirDrop window would bypass this, but is not yet implemented.
iPhone randomizes its AWDL address. Therefore no device identity can be persisted.
Is It Worth Using
The tool is narrowly targeted:
Good fit: Framework 13 or other MT7925 machines running Arch/Debian/Ubuntu that need native AirDrop interop. It solves a problem that previously required buying a specific USB Wi-Fi adapter or using LocalSend, and it keeps Wi-Fi online — an advantage over most alternatives.
Bad fit: Intel Wi-Fi users (tested and fails); mobile users (Linux-side only); occasional one-off transfers (installing LocalSend on both ends is simpler).
Entry difficulty is moderate-high: installation follows standard packaging, but the whole thing hinges on the undocumented premise that your card can inject frames while associated — a guarantee no datasheet provides, hence the profile table and self-test script. The repository also lacks a LICENSE file, which may concern some users.
Why This Project Matters
Viewed alongside the broader omdrop ecosystem, it exemplifies a clean open-source pattern: split a feature (AirDrop interop) into a radio layer and an application layer. The application layer (CLI, sender, receiver) is shared; the radio layer gets a backend per hardware class (Broadcom firmware via omdrop-awdl, userspace OWL via omdrop-owl). Whoever has the hardware contributes the corresponding backend.
omdrop-owl's value isn't completeness — it supports one card and carries several unfixed bugs. Its value is breaking the assumption that "Linux AirDrop requires a specific Wi-Fi card" and leaving a verification framework (profile table + test-card.sh) for the community to expand hardware support.
Project URL: https://github.com/t4t5/omdrop-owl
Signed-in readers can open the original source through BestHub's protected redirect.
This article has been distilled and summarized from source material, then republished for learning and reference. If you believe it infringes your rights, please contactand we will review it promptly.
Geek Labs
Daily shares of interesting GitHub open-source projects. AI tools, automation gems, technical tutorials, open-source inspiration.
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.
