A lightweight system tray application that allows you to quickly change between configured DNS providers in just two clicks.
Built with PyQt6, it supports both IPv4 and IPv6 DNS servers and runs without root permissions on GNU/Linux platforms with NetworkManager as network configuration tool suite.
- Fast DNS change: Switch your DNS settings in just 2 clicks from the system tray.
- No root needed: App can be installed as user/system application and does not require root permissions to work.
- All interfaces at once: DNS changes will be applied to all real network interfaces (WiFi and Ethernet).
- IPv4 & IPv6 support: Full dual-stack compatibility.
- Real-time Monitoring: Automatically detects network changes and updates DNS status.
- System Tray Integration: Runs silently in background with minimal resource usage.
- Cross-Platform: Supports Linux (via NetworkManager).
- Notifications: Desktop notifications when DNS settings change.
- Multiple DNS providers: Pre-configured with 7 popular DNS providers:
- Cloudflare
- Quad9
- AdGuard
- OpenDNS
- Mullvad
- Yandex
- Customizable: Easy to personalize or add custom DNS providers via JSON configuration.
- Linux: NetworkManager with
nmclicommand-line tool - Python 3.8+
- PyQt6
- python-dbus
Install Quick DNS Switcher from AUR:
yay -S quick-dns-switcher-
Download project:
It's desirable to download latest release from Github page, but you are free to clone the repository if you want.
git clone https://github.com/gmm96/Quick-DNS-Switcher.git cd Quick-DNS-Switcher -
Run installation script:
-
As system application. Required dependencies will be installed if needed.
sudo bash install.sh
-
As user application. Required dependencies must be installed manually before.
bash install.sh
-
yay -R quick-dns-switcherCaution
Do not use this method if you installed it using AUR!
-
As system application.
sudo bash /opt/quick-dns-switcher/uninstall.sh
-
As user application.
bash ~/.local/opt/quick-dns-switcher/uninstall.sh
DNS providers are configured in dns_providers.json.Providers must follow next format in configuration file:
{
"Provider Name":
{
"ipv4_1": "primary_ipv4_address",
"ipv4_2": "secondary_ipv4_address",
"ipv6_1": "primary_ipv6_address",
"ipv6_2": "secondary_ipv6_address",
"icon": "icon_name"
}
}Icon field must be a icon name from your system theme.
- Right click on app icon in system tray.
- Select
Edit DNS providersfrom context menu to open configuration file. - Add a new entry following the format above and save.
- Restart application using
Restartapp menu option. - Your custom provider will now appear in the menu.
Any issues? Questions?
- Read this document.
- Search existing issues.
- Create a new issue with detailed info (include details like OS version, Python version, error messages, etc.).
This project is licensed under the GNU General Public License v3.0. See the LICENSE file for details.



