From 57963af6e3d6f8ccca57f0af320816d1b9fc1b93 Mon Sep 17 00:00:00 2001 From: Anner Visser Date: Sun, 25 Jun 2023 13:48:07 +0200 Subject: [PATCH] Update readme and add generate-config command --- README.md | 98 ++++++++++++++-------- gnome_dns_switcher/__main__.py | 66 ++++++++++++--- screenshots/appindicator.png | Bin 0 -> 3319 bytes screenshots/menu.png | Bin 0 -> 12741 bytes screenshots/menu_multiple_connections.png | Bin 0 -> 23522 bytes screenshots/notification.png | Bin 0 -> 6953 bytes 6 files changed, 117 insertions(+), 47 deletions(-) create mode 100644 screenshots/appindicator.png create mode 100644 screenshots/menu.png create mode 100644 screenshots/menu_multiple_connections.png create mode 100644 screenshots/notification.png diff --git a/README.md b/README.md index 5dcad43..8f25285 100755 --- a/README.md +++ b/README.md @@ -1,71 +1,95 @@ # Gnome appindicator dns switcher https://pypi.org/project/gnome-dns-switcher/ +Gnome appindicator (toolbar icon) tool to quickly switch between different DNS servers +- Easily available in your toolbox +- Config file to specify DNS servers +Supports multiple connections and switching them separately +- Utility button to restart NetworkManager + +![Screenshot of menu with DNS servers](./screenshots/menu.png) + +
+💻 More screenshots + +#### Easily available in your toolbar +![](./screenshots/appindicator.png) + +#### Shows you what it's done, no surprises +![](./screenshots/notification.png) + +#### Supports multiple connections and switching them separately +![](./screenshots/menu_multiple_connections.png) + +
+ ## Setup +Install dependencies ```shell -# In case you don't have pip3: +# If you don't yet have pip3: sudo apt install python3-pip +# Install dependencies to run this application +sudo apt install python3-gi python3-gi-cairo gir1.2-gtk-3.0 gir1.2-appindicator3-0.1 +``` + +Install gnome-dns-switcher +```shell # sudo so the script is added to $PATH, you can also install normally and fix $PATH :) sudo pip3 install gnome-dns-switcher -# See config explanation -edit ~/.config/gnome-dns-switcher.yml +# Generate a default configuration +gnome-dns-switcher generate-config -# Start the app in the background -gnome-dns-switcher --config ~/.config/gnome-dns-switcher.yml & +# Modify the config to your needs. See config documentation below +edit ~/.config/gnome-dns-switcher.yml ``` - -Add to startup applications: +## Usage +### Start the app in the background +Simply add ` &` after your command ```shell -# Sleep 10 to prevent starting up before network connections have been made -bash -c 'sleep 10 && gnome-dns-switcher --config ~/.config/gnome-dns-switcher.yml'``` - -- Create a config.yml, see [Config](#config) - -## Running +gnome-dns-switcher & +``` +### Specify a different configuration file (default is `~/.config/gnome-dns-switcher.yml`) ```shell gnome-dns-switcher --config /path/to/config.yml ``` -## Config +### Add to startup applications +```shell +# Sleep 10 seconds before starting to prevent starting up +# before network connections have been made +bash -c 'sleep 10 && gnome-dns-switcher --config ~/.config/gnome-dns-switcher.yml' +``` -### Sample: +## Config +The config file allows you to specify which DNS servers to show and what devices are visible. +By default, gnome-dns-switcher looks for a config file at `~/.config/gnome-dns-switcher.yml` +To generate and example configuration, you can run `gnome-dns-switcher generate-config` +### The generated configuration will look like this: ```yaml -servers: - CloudFlare: 1.1.1.1 +servers: # DNS Server options to show + # DHCP is always shown as the first option + Quad9: 9.9.9.9 + CloudFlare: [1.1.1.1, 1.0.0.1] Google DNS: - 8.8.8.8 - 8.8.4.4 - localhost: 127.0.0.1, 127.0.1.1 -devices: - - wlp2s0 +devices: [] # Specify device names here if you want to hide certain devices (ip link show) ``` -### Explanation - -#### `servers:` +#### `servers` A list of servers that can be switched between +- The name is only used for displaying +- You can define one or more ips, as a yaml array or as a comma-seperated string -- A list of servers that can be switched between -- Name is just used for displaying -- You can define one or more ips -- On launch, we'll try to detect if the current settings match any of the servers - -#### `devices:` - -- optional, will display all non-bridge connections otherwise +#### `devices` Which devices to show (optional) +- optional, will display all non-bridge connections if not present or empty - one or more devices to show in the switcher - List all your devices by running `ip link show` in a terminal -### You possibly need to install these dependencies - -```shell -sudo apt install python3-gi python3-gi-cairo gir1.2-gtk-3.0 gir1.2-appindicator3-0.1 -``` - ## Development ### Setup diff --git a/gnome_dns_switcher/__main__.py b/gnome_dns_switcher/__main__.py index 903ee12..f2bfbc4 100644 --- a/gnome_dns_switcher/__main__.py +++ b/gnome_dns_switcher/__main__.py @@ -1,4 +1,5 @@ import argparse +import os from os.path import isfile from typing import List @@ -7,23 +8,61 @@ from .gnome_helpers import get_connections from .switcher import Server, DnsSwitcher +CONFIG_PATH = os.path.expanduser("~/.config/gnome-dns-switcher.yml") + APPINDICATOR_ID = 'gnome_dns_switcher' +# language=yaml +DEFAULT_CONFIG = ''' +servers: + # DHCP is always shown as the first option + Quad9: 9.9.9.9 + CloudFlare: [1.1.1.1, 1.0.0.1] + Google DNS: + - 8.8.8.8 + - 8.8.4.4 +devices: [] # Specify device names here if you want to hide certain devices (ip link show) +''' + def main(): parser = argparse.ArgumentParser(description='Gnome Dns Switcher') - parser.add_argument("--config", dest="config", required=False, default="./config.yml", - help="Path to config yaml", metavar="FILE", - type=lambda x: - x if isfile(x) - else parser.error("Specified config file ({}) is not a file. " - "Create it or specify a different path with --config".format(x))) + subcommands = parser.add_subparsers() + parser.set_defaults(subcommand=None) + + parser.add_argument( + "--config", + dest="config", + required=False, + default=CONFIG_PATH, + help="Path to config yaml", + metavar="FILE", + ) + + generate_config_command = subcommands.add_parser( + 'generate-config', + help=f'Generate an example configuration file in {CONFIG_PATH}' + ) + generate_config_command.set_defaults(subcommand='generate-config') args = parser.parse_args() - - config_path = args.config - - result = 42 # 42 === reload + config_path = os.path.expanduser(args.config) + + if args.subcommand == 'generate-config': + if isfile(config_path): + print(f'A file already exists at {config_path}') + exit(1) + print(f'Generating config at {config_path}') + os.umask(0o077) + os.makedirs(os.path.dirname(config_path), 0o700, exist_ok=True) + with open(config_path, 'x') as config_file: + config_file.write(DEFAULT_CONFIG) + print(f'Config file written!') + if (config_path != CONFIG_PATH): + print(f'To use this config file, run this program with --config {config_path}') + exit(0) + + result = 42 # 42 === reload while result == 42: connections, servers = load_config(config_path) menu = DnsSwitcher(APPINDICATOR_ID, servers, connections) @@ -33,6 +72,13 @@ def main(): def load_config(config_path): + if not isfile(config_path): + print( + f"There is no file at the specified config path ({config_path}).\n" + f"Create it by running `gnome-dns-switcher generate-config` or specify a different path with --config" + ) + exit(1) + with open(config_path, 'r') as config_file: config = yaml.safe_load(config_file) servers: List[Server] = [Server('DHCP', None, True)] diff --git a/screenshots/appindicator.png b/screenshots/appindicator.png new file mode 100644 index 0000000000000000000000000000000000000000..2ba92d7230bcace102ec43f008ac6fb7499e980b GIT binary patch literal 3319 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 literal 0 HcmV?d00001 diff --git a/screenshots/menu.png b/screenshots/menu.png new file mode 100644 index 0000000000000000000000000000000000000000..b182a5d6b8fca072840cdae723161bc936ab0dee GIT binary patch literal 12741 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 literal 0 HcmV?d00001 diff --git a/screenshots/notification.png b/screenshots/notification.png new file mode 100644 index 0000000000000000000000000000000000000000..2184cbe4a7c4fa3e365b12de24085810f2f276f9 GIT binary patch literal 6953 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 literal 0 HcmV?d00001