A modern, cross-platform web application to control your Logitech Z407 Bluetooth speakers from any device.
This application creates a local web server that connects to your Z407 speakers via Bluetooth Low Energy (BLE). It allows you to control the speakers and your PC's media playback directly from your smartphone, tablet, or another computer on the network.
🎛️ Full Speaker Control: Play/Pause, Volume Control (with visual feedback).
💻 PC Media Interface: Simulate multimedia keys on the host computer (Next/Prev Tack, Mute, System Volume) via the web interface.
📱 Mobile First Design: Responsive Material Design interface that works perfectly on iOS and Android.
🐧 Linux Portable: Ready-to-run application for Linux. No installation or setup required. (A Windows version is also available).
We provide an automated installer script that sets up everything for you (permissions, shortcuts, dependencies).
- Download the
install_linux.sh,icon.png, and theZ407_Control_Linuxexecutable (put them in the same folder, e.g.,Downloads). - Open a terminal in that folder and run:
chmod +x install_linux.sh sudo ./install_linux.sh
- Follow the on-screen instructions. It will create shortcuts on your Desktop and App Menu!
If you prefer not to install anything:
- Download the
Z407_Control_Linuxexecutable (from thedistfolder). - Open a terminal and run the app:
./Z407_Control_Linux
- Permissions Note: Linux restricts Bluetooth access. To run without
sudo, apply this permission once:sudo setcap 'cap_net_raw,cap_net_admin+eip' Z407_Control_Linux - Media Keys Note: To control PC media (Spotify, YouTube, etc.), install
xdotool:sudo apt install xdotool
By default, the app listens on all interfaces 0.0.0.0 at port 5000. You can override this using command line arguments if you need a specific setup (e.g., for Docker or specific network interfaces).
Usage:
# General Syntax
python app.py --ip <IP_ADDRESS> --port <PORT_NUMBER>
# Example: Listen only on localhost at port 8080
python app.py --ip 127.0.0.1 --port 8080
# Example: Listen on a specific LAN IP
python app.py --ip 192.168.1.50 --port 9090- Run the application on your PC provided above.
- The console will display your local IP address, e.g.,
http://192.168.1.35:5000. - Open that URL in your phone's browser (Safari/Chrome).
Since this app runs locally on your network without an SSL certificate (HTTP instead of HTTPS), browsers might warn you that the connection is not secure. This is expected for local apps.
- Chrome / Brave / Edge: Click "Advanced" or "Details" → "Proceed to ... (unsafe)".
- Safari: You might see "This Connection Is Not Private". Click "Show Details" → "visit this website".
- Firefox: Click "Advanced" → "Accept the Risk and Continue".
If you want to modify the code or build the executables yourself:
- Python 3.12+
pipandvenv
- Clone the repository.
- Run the build script for your OS:
Linux:
chmod +x build_linux.sh
./build_linux.shThis will create a virtual environment, install dependencies (quart, bleak, etc.), and compile the binary to dist/.
Reverse Engineering: Special thanks to freundTech for the reverse engineering work that made this possible. 🔗 https://github.com/freundTech/logi-z407-reverse-engineering
Author: Original Web App implementation by Androrama.
This is an unofficial project and is not affiliated with, endorsed by, or connected to Logitech in any way. "Logitech" is a trademark of its respective owner. This software is provided "as is" without warranty of any kind.
This project is 100% free.
Any donation (no matter how small) helps me dedicate more time and resources to this and other projects. Infinite thanks to those who have already collaborated! ❤️
And to those who haven't, thank you for using the project even if you don't donate, that already makes me very happy 😊
