Skip to content

AirPods like Normal - Access AirPods' Apple-excluseive features on your linux machine

License

Notifications You must be signed in to change notification settings

kavishdevar/aln

Repository files navigation

ALN - AirPods like Normal (Linux Only)

Currently supported device(s)

  • AirPods Pro 2

1. Install the required packages

sudo apt install python3 python3-pip
pip3 install pybluez

If you want to run it as a daemon (Refer to the Daemon Version section), you will need to install the python-daemon package.

pip3 install python-daemon

2. Clone the repository

git clone https://github.com/kavishdevar/aln.git
cd aln

3. Preprare

Pair your AirPods with your machine before running this script!

Note: DO NOT FORGET TO EDIT THE AIRPODS_MAC VARIABLE IN EXAMPLE SCRIPTS WITH YOUR AIRPODS MAC ADDRESS BEFORE RUNNING THEM!

Versions

Non-Daemon based

This version is the most polished version of the script. It can do the following:

  • fetch the battery percentage,
  • fetch in-ear status (but not actually controlling the media with that information).
  • control ANC modes
python3 examples/logger-and-anc.py

As a daemon (using a UNIX socket)

Daemon Log Screenshot If you want to run a deamon for multiple programs to read/write airpods data, you can use the airpods_daemon.py script.

  • This creates a standard UNIX socket at /tmp/airpods_daemon.sock and listens for commands
  • and sends battery/in-ear info You can run it as follows:
python3 airpods_daemon.py

Interacting with the daemon

Set ANC Screenshot

  • Sending data to the daemon You can send data to the daemon using the set-anc.py script. Since it's a standard UNIX socket, you can send data to it using any programming language that supports UNIX sockets.

This package includes a demo script that sends a command to turn off the ANC. You can run it as follows:

python3 examples/daemon/set-anc.py
  • Reading data from the daemon Read Data Screenshot You can listen to the daemon's output by running the read-data.py script. This script listens to the UNIX socket and prints the data it receives. Currenty, it recognizes the battery percentage and the in-ear status and dumps the rest of the data to the terminal.
python3 examples/daemon/read-data.py
  • Controlling the media with the in-ear status (and get battery status)

Ear Detection Screenshot This script is basically the standalone script, but interacts with the UNIX socket created by the daemon instead. It can control the media with the in-ear status and remove the device as an audio sink when the AirPods are not in your ears.

python3 examples/daemon/ear-detection.py
  • App Indicator/Tray Icon

Tray Icon Hover Screenshot Tray Icon Menu Screenshot This script is a simple tray icon that shows the battery percentage and set ANC modes. It can also control the media with the in-ear status.

Note: This script uses QT.

python3 examples/daemon/tray.py

Standalone version (without module dependency, mainly for testing, and reverse engineering purposes)

  • Controlling the media with the in-ear status.
  • Remove the device as an audio sink when the AirPods are not in your ears.
  • Try to connect with the AirPods if media is playing and the AirPods are not connected.
  • Control ANC modes.
python3 examples/standalone.py

About

AirPods like Normal - Access AirPods' Apple-excluseive features on your linux machine

Topics

Resources

License

Stars

Watchers

Forks

Languages