wifi-analyzer 0.1.19__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. wifi_analyzer-0.1.19/.github/workflows/packages.yml +60 -0
  2. wifi_analyzer-0.1.19/.github/workflows/pypi-publish.yml +52 -0
  3. wifi_analyzer-0.1.19/.github/workflows/transifex-sync.yml +55 -0
  4. wifi_analyzer-0.1.19/.gitignore +6 -0
  5. wifi_analyzer-0.1.19/.tx/config +8 -0
  6. wifi_analyzer-0.1.19/FLATHUB.md +19 -0
  7. wifi_analyzer-0.1.19/LICENSE +9 -0
  8. wifi_analyzer-0.1.19/PKG-INFO +123 -0
  9. wifi_analyzer-0.1.19/README.md +109 -0
  10. wifi_analyzer-0.1.19/assets/wifi-analyzer-logo.png +0 -0
  11. wifi_analyzer-0.1.19/build-aux/io.github.yeager.WifiAnalyzer.json +45 -0
  12. wifi_analyzer-0.1.19/data/icons/hicolor/256x256/apps/io.github.yeager.WifiAnalyzer.png +0 -0
  13. wifi_analyzer-0.1.19/data/icons/hicolor/512x512/apps/io.github.yeager.WifiAnalyzer.png +0 -0
  14. wifi_analyzer-0.1.19/data/icons/io.github.yeager.WifiAnalyzer.svg +15 -0
  15. wifi_analyzer-0.1.19/data/io.github.yeager.WifiAnalyzer.desktop +10 -0
  16. wifi_analyzer-0.1.19/data/io.github.yeager.WifiAnalyzer.metainfo.xml +86 -0
  17. wifi_analyzer-0.1.19/debian/changelog +12 -0
  18. wifi_analyzer-0.1.19/debian/control +27 -0
  19. wifi_analyzer-0.1.19/debian/copyright +18 -0
  20. wifi_analyzer-0.1.19/debian/rules +33 -0
  21. wifi_analyzer-0.1.19/debian/source/format +1 -0
  22. wifi_analyzer-0.1.19/docs/man/README.md +7 -0
  23. wifi_analyzer-0.1.19/docs/man/po4a.cfg +3 -0
  24. wifi_analyzer-0.1.19/docs/man/sv/wifi-analyzer.1 +29 -0
  25. wifi_analyzer-0.1.19/docs/man/wifi-analyzer.1 +27 -0
  26. wifi_analyzer-0.1.19/flatpak/io.github.yeager.WifiAnalyzer.json +37 -0
  27. wifi_analyzer-0.1.19/packaging/rpm/wifi-analyzer.spec +78 -0
  28. wifi_analyzer-0.1.19/po/README.md +20 -0
  29. wifi_analyzer-0.1.19/po/ar.po +275 -0
  30. wifi_analyzer-0.1.19/po/de.po +327 -0
  31. wifi_analyzer-0.1.19/po/el.po +276 -0
  32. wifi_analyzer-0.1.19/po/en_GB.po +289 -0
  33. wifi_analyzer-0.1.19/po/es.po +327 -0
  34. wifi_analyzer-0.1.19/po/fi.po +276 -0
  35. wifi_analyzer-0.1.19/po/fr.po +327 -0
  36. wifi_analyzer-0.1.19/po/hi.po +275 -0
  37. wifi_analyzer-0.1.19/po/it.po +276 -0
  38. wifi_analyzer-0.1.19/po/ja.po +327 -0
  39. wifi_analyzer-0.1.19/po/ko.po +276 -0
  40. wifi_analyzer-0.1.19/po/nl.po +276 -0
  41. wifi_analyzer-0.1.19/po/no.po +327 -0
  42. wifi_analyzer-0.1.19/po/pl.po +277 -0
  43. wifi_analyzer-0.1.19/po/pt_BR.po +276 -0
  44. wifi_analyzer-0.1.19/po/ru.po +277 -0
  45. wifi_analyzer-0.1.19/po/sv.po +369 -0
  46. wifi_analyzer-0.1.19/po/tr.po +276 -0
  47. wifi_analyzer-0.1.19/po/uk.po +277 -0
  48. wifi_analyzer-0.1.19/po/wifi-analyzer.pot +354 -0
  49. wifi_analyzer-0.1.19/po/zh_CN.po +275 -0
  50. wifi_analyzer-0.1.19/pyproject.toml +29 -0
  51. wifi_analyzer-0.1.19/screenshots/main.png +0 -0
  52. wifi_analyzer-0.1.19/scripts/compile_translations.py +15 -0
  53. wifi_analyzer-0.1.19/setup.cfg +4 -0
  54. wifi_analyzer-0.1.19/src/wifi_analyzer/__init__.py +2 -0
  55. wifi_analyzer-0.1.19/src/wifi_analyzer/__main__.py +6 -0
  56. wifi_analyzer-0.1.19/src/wifi_analyzer/accessibility.py +66 -0
  57. wifi_analyzer-0.1.19/src/wifi_analyzer/app.py +1198 -0
  58. wifi_analyzer-0.1.19/src/wifi_analyzer/export_helper.py +45 -0
  59. wifi_analyzer-0.1.19/src/wifi_analyzer/locale/ar/LC_MESSAGES/wifi-analyzer.mo +0 -0
  60. wifi_analyzer-0.1.19/src/wifi_analyzer/locale/de/LC_MESSAGES/wifi-analyzer.mo +0 -0
  61. wifi_analyzer-0.1.19/src/wifi_analyzer/locale/el/LC_MESSAGES/wifi-analyzer.mo +0 -0
  62. wifi_analyzer-0.1.19/src/wifi_analyzer/locale/en_GB/LC_MESSAGES/wifi-analyzer.mo +0 -0
  63. wifi_analyzer-0.1.19/src/wifi_analyzer/locale/es/LC_MESSAGES/wifi-analyzer.mo +0 -0
  64. wifi_analyzer-0.1.19/src/wifi_analyzer/locale/fi/LC_MESSAGES/wifi-analyzer.mo +0 -0
  65. wifi_analyzer-0.1.19/src/wifi_analyzer/locale/fr/LC_MESSAGES/wifi-analyzer.mo +0 -0
  66. wifi_analyzer-0.1.19/src/wifi_analyzer/locale/hi/LC_MESSAGES/wifi-analyzer.mo +0 -0
  67. wifi_analyzer-0.1.19/src/wifi_analyzer/locale/it/LC_MESSAGES/wifi-analyzer.mo +0 -0
  68. wifi_analyzer-0.1.19/src/wifi_analyzer/locale/ja/LC_MESSAGES/wifi-analyzer.mo +0 -0
  69. wifi_analyzer-0.1.19/src/wifi_analyzer/locale/ko/LC_MESSAGES/wifi-analyzer.mo +0 -0
  70. wifi_analyzer-0.1.19/src/wifi_analyzer/locale/nl/LC_MESSAGES/wifi-analyzer.mo +0 -0
  71. wifi_analyzer-0.1.19/src/wifi_analyzer/locale/no/LC_MESSAGES/wifi-analyzer.mo +0 -0
  72. wifi_analyzer-0.1.19/src/wifi_analyzer/locale/pl/LC_MESSAGES/wifi-analyzer.mo +0 -0
  73. wifi_analyzer-0.1.19/src/wifi_analyzer/locale/pt_BR/LC_MESSAGES/wifi-analyzer.mo +0 -0
  74. wifi_analyzer-0.1.19/src/wifi_analyzer/locale/ru/LC_MESSAGES/wifi-analyzer.mo +0 -0
  75. wifi_analyzer-0.1.19/src/wifi_analyzer/locale/sv/LC_MESSAGES/wifi-analyzer.mo +0 -0
  76. wifi_analyzer-0.1.19/src/wifi_analyzer/locale/tr/LC_MESSAGES/wifi-analyzer.mo +0 -0
  77. wifi_analyzer-0.1.19/src/wifi_analyzer/locale/uk/LC_MESSAGES/wifi-analyzer.mo +0 -0
  78. wifi_analyzer-0.1.19/src/wifi_analyzer/locale/zh_CN/LC_MESSAGES/wifi-analyzer.mo +0 -0
  79. wifi_analyzer-0.1.19/src/wifi_analyzer/undo_redo.py +45 -0
  80. wifi_analyzer-0.1.19/src/wifi_analyzer.egg-info/PKG-INFO +123 -0
  81. wifi_analyzer-0.1.19/src/wifi_analyzer.egg-info/SOURCES.txt +83 -0
  82. wifi_analyzer-0.1.19/src/wifi_analyzer.egg-info/dependency_links.txt +1 -0
  83. wifi_analyzer-0.1.19/src/wifi_analyzer.egg-info/entry_points.txt +2 -0
  84. wifi_analyzer-0.1.19/src/wifi_analyzer.egg-info/top_level.txt +1 -0
  85. wifi_analyzer-0.1.19/tests/test_network_helpers.py +136 -0
@@ -0,0 +1,60 @@
1
+ name: Build distribution packages
2
+
3
+ on:
4
+ pull_request:
5
+ push:
6
+ tags: ["v*"]
7
+ workflow_dispatch:
8
+
9
+ permissions:
10
+ contents: read
11
+
12
+ jobs:
13
+ debian:
14
+ name: Debian package
15
+ runs-on: ubuntu-latest
16
+ container: debian:stable
17
+ steps:
18
+ - name: Install build tools
19
+ run: |
20
+ apt-get update
21
+ DEBIAN_FRONTEND=noninteractive apt-get install -y git ca-certificates \
22
+ devscripts dpkg-dev debhelper dh-python gettext \
23
+ pybuild-plugin-pyproject python3-all python3-setuptools \
24
+ python3-gi python3-cairo python3-pytest
25
+ - uses: actions/checkout@v4
26
+ - name: Build Debian package
27
+ run: |
28
+ dpkg-buildpackage -us -uc -b
29
+ mkdir -p artifacts/deb
30
+ cp ../*.deb ../*.buildinfo ../*.changes artifacts/deb/
31
+ - uses: actions/upload-artifact@v4
32
+ with:
33
+ name: wifi-analyzer-deb
34
+ path: artifacts/deb/
35
+
36
+ rpm:
37
+ name: RPM package
38
+ runs-on: ubuntu-latest
39
+ container: fedora:latest
40
+ steps:
41
+ - name: Install build tools
42
+ run: |
43
+ dnf -y install git rpm-build rpmdevtools rpm-devel \
44
+ python3-devel python3-setuptools python3-pytest \
45
+ python3-gobject python3-cairo gettext desktop-file-utils appstream \
46
+ gtk4 libadwaita
47
+ - uses: actions/checkout@v4
48
+ - name: Prepare RPM source archive
49
+ run: |
50
+ git config --global --add safe.directory "$GITHUB_WORKSPACE"
51
+ version=$(python3 -c "import tomllib; print(tomllib.load(open('pyproject.toml', 'rb'))['project']['version'])")
52
+ mkdir -p "$HOME/rpmbuild/SOURCES"
53
+ git archive --format=tar.gz --prefix="wifi-analyzer-$version/" HEAD \
54
+ > "$HOME/rpmbuild/SOURCES/wifi-analyzer-$version.tar.gz"
55
+ - name: Build RPM package
56
+ run: rpmbuild -ba packaging/rpm/wifi-analyzer.spec
57
+ - uses: actions/upload-artifact@v4
58
+ with:
59
+ name: wifi-analyzer-rpm
60
+ path: ~/rpmbuild/RPMS/**/*.rpm
@@ -0,0 +1,52 @@
1
+ name: Publish to PyPI
2
+
3
+ on:
4
+ push:
5
+ tags: ["v*"]
6
+
7
+ permissions:
8
+ contents: read
9
+
10
+ jobs:
11
+ test:
12
+ runs-on: ubuntu-latest
13
+ container: debian:stable
14
+ steps:
15
+ - name: Install test dependencies
16
+ run: |
17
+ apt-get update
18
+ DEBIAN_FRONTEND=noninteractive apt-get install -y \
19
+ ca-certificates git gettext python3-gi python3-cairo \
20
+ gir1.2-gtk-4.0 gir1.2-adw-1 python3-pytest
21
+ - uses: actions/checkout@v4
22
+ - name: Compile translations
23
+ run: python3 scripts/compile_translations.py
24
+ - name: Run tests
25
+ env:
26
+ PYTHONPATH: src
27
+ run: pytest -q
28
+
29
+ publish:
30
+ needs: test
31
+ runs-on: ubuntu-latest
32
+ environment: pypi
33
+ permissions:
34
+ id-token: write
35
+ steps:
36
+ - uses: actions/checkout@v4
37
+ - uses: actions/setup-python@v5
38
+ with:
39
+ python-version: "3.12"
40
+ - name: Install build tools
41
+ run: |
42
+ sudo apt-get update
43
+ sudo apt-get install -y gettext
44
+ python -m pip install --upgrade build twine
45
+ - name: Compile translations
46
+ run: python3 scripts/compile_translations.py
47
+ - name: Build distributions
48
+ run: python -m build
49
+ - name: Check distributions
50
+ run: python -m twine check dist/*
51
+ - name: Publish distributions
52
+ uses: pypa/gh-action-pypi-publish@release/v1
@@ -0,0 +1,55 @@
1
+ name: Sync Transifex Translations
2
+ on:
3
+ workflow_dispatch:
4
+ schedule:
5
+ - cron: "0 4 * * 1"
6
+
7
+ jobs:
8
+ sync:
9
+ permissions:
10
+ contents: write
11
+ runs-on: ubuntu-latest
12
+ steps:
13
+ - uses: actions/checkout@v4
14
+ - name: Extract and upload .pot
15
+ env:
16
+ TX_TOKEN: ${{ secrets.TX_TOKEN }}
17
+ run: |
18
+ sudo apt-get install -y gettext
19
+ MODULE=$(find src -mindepth 1 -maxdepth 1 -type d ! -name "*.egg-info" | head -1 | xargs basename)
20
+ REPO=$(basename $GITHUB_REPOSITORY)
21
+ xgettext --language=Python --keyword=_ --from-code=UTF-8 -o po/${REPO}.pot src/${MODULE}/*.py
22
+ pip install transifex-python
23
+ pip install transifex-cli || true
24
+ curl -s -X POST "https://rest.api.transifex.com/resource_strings_async_uploads" \
25
+ -H "Authorization: Bearer $TX_TOKEN" \
26
+ -F "resource=o:danielnylander:p:${REPO}:r:${REPO}-pot" \
27
+ -F "content=@po/${REPO}.pot"
28
+ - name: Download translations
29
+ env:
30
+ TX_TOKEN: ${{ secrets.TX_TOKEN }}
31
+ run: |
32
+ REPO=$(basename $GITHUB_REPOSITORY)
33
+ for lang in sv; do
34
+ RESP=$(curl -s -X POST "https://rest.api.transifex.com/resource_translations_async_downloads" \
35
+ -H "Authorization: Bearer $TX_TOKEN" \
36
+ -H "Content-Type: application/vnd.api+json" \
37
+ -d "{\"data\":{\"type\":\"resource_translations_async_downloads\",\"attributes\":{\"content_encoding\":\"text\",\"file_type\":\"default\"},\"relationships\":{\"resource\":{\"data\":{\"type\":\"resources\",\"id\":\"o:danielnylander:p:${REPO}:r:${REPO}-pot\"}},\"language\":{\"data\":{\"type\":\"languages\",\"id\":\"l:${lang}\"}}}}}")
38
+ DL_ID=$(echo "$RESP" | python3 -c "import json,sys; print(json.load(sys.stdin).get('data',{}).get('id',''))")
39
+ sleep 10
40
+ curl -s -L -H "Authorization: Bearer $TX_TOKEN" \
41
+ "https://rest.api.transifex.com/resource_translations_async_downloads/$DL_ID" \
42
+ -o "po/${lang}.po"
43
+ if head -1 "po/${lang}.po" | grep -q "^#"; then
44
+ echo "Downloaded ${lang}.po"
45
+ else
46
+ rm -f "po/${lang}.po"
47
+ fi
48
+ done
49
+ - name: Commit translations
50
+ run: |
51
+ git config user.name "Daniel Nylander"
52
+ git config user.email "daniel@danielnylander.se"
53
+ git add po/*.po
54
+ git diff --cached --quiet || git commit -m "Update translations from Transifex"
55
+ git push
@@ -0,0 +1,6 @@
1
+ *.mo
2
+ __pycache__/
3
+ *.py[cod]
4
+ build/
5
+ *.egg-info/
6
+ locale/
@@ -0,0 +1,8 @@
1
+ [main]
2
+ host = https://www.transifex.com
3
+
4
+ [o:danielnylander:p:wifi-analyzer:r:wifi-analyzer-pot]
5
+ file_filter = po/<lang>.po
6
+ source_file = po/wifi-analyzer.pot
7
+ source_lang = en
8
+ type = PO
@@ -0,0 +1,19 @@
1
+ # Flathub submission
2
+
3
+ The manifest intended for Flathub is
4
+ [`flatpak/io.github.yeager.WifiAnalyzer.json`](flatpak/io.github.yeager.WifiAnalyzer.json).
5
+ It pins the public upstream release tag and commit so reviewers can reproduce
6
+ the build without trusting a moving branch.
7
+
8
+ Before opening a Flathub pull request:
9
+
10
+ 1. Update the manifest to the newest signed release tag and commit.
11
+ 2. Build it with Flatpak Builder using the current GNOME SDK.
12
+ 3. Open a submission pull request to
13
+ <https://github.com/flathub/flathub> with this manifest named
14
+ `io.github.yeager.WifiAnalyzer.json`.
15
+ 4. Respond to the automated build and AppStream review comments there.
16
+
17
+ The sandbox only asks for display access, GPU rendering, and the NetworkManager
18
+ system D-Bus name needed to scan nearby access points. It does not request
19
+ network or home-directory access.
@@ -0,0 +1,9 @@
1
+ GNU GENERAL PUBLIC LICENSE
2
+ Version 3, 29 June 2007
3
+
4
+ This program is free software: you can redistribute it and/or modify
5
+ it under the terms of the GNU General Public License as published by
6
+ the Free Software Foundation, either version 3 of the License, or
7
+ (at your option) any later version.
8
+
9
+ See https://www.gnu.org/licenses/gpl-3.0.html for full text.
@@ -0,0 +1,123 @@
1
+ Metadata-Version: 2.4
2
+ Name: wifi-analyzer
3
+ Version: 0.1.19
4
+ Summary: WiFi Analyzer — GTK4/Adwaita app for WiFi network analysis
5
+ Author: Daniel Nylander
6
+ License-Expression: GPL-3.0-or-later
7
+ Project-URL: Homepage, https://github.com/yeager/wifi-analyzer
8
+ Project-URL: Repository, https://github.com/yeager/wifi-analyzer
9
+ Project-URL: Bug Tracker, https://github.com/yeager/wifi-analyzer/issues
10
+ Requires-Python: >=3.10
11
+ Description-Content-Type: text/markdown
12
+ License-File: LICENSE
13
+ Dynamic: license-file
14
+
15
+ <p align="center">
16
+ <img src="assets/wifi-analyzer-logo.png" width="220" alt="WiFi Analyzer logo">
17
+ </p>
18
+
19
+ # WiFi Analyzer
20
+
21
+ Wi-Fi signal analyzer, channel planner and local connection diagnostics tool.
22
+
23
+ Built with GTK4/Adwaita. Part of the [Danne L10n Suite](https://github.com/yeager/debian-repo).
24
+
25
+ ## Features
26
+
27
+ - Scan access points through NetworkManager D-Bus; no privileged shell command is required.
28
+ - Filter results by network name, BSSID, channel or security type.
29
+ - Inspect 2.4, 5 and 6 GHz bands with a channel-overlap graph.
30
+ - Show NetworkManager's announced AP bandwidth when available, with a clearly
31
+ marked estimate as a fallback.
32
+ - Mark 5 GHz DFS channels. Their availability depends on the local regulatory domain.
33
+ - Recommend less congested channels from observed signal overlap.
34
+ - Sort results by signal, channel, or security and group repeated SSIDs by access-point count.
35
+ - Export visible, filtered results as CSV, JSON, anonymized JSON or an HTML
36
+ diagnostic report, with a user-selected file name and destination.
37
+ - Keep up to 100 local scan summaries for future history views. Scan data never leaves the device and can be cleared from the menu.
38
+ - Mark the active access point and use the actual channel width reported by `iw` for that radio when available.
39
+ - Identify Wi-Fi 4, 5, 6/6E and 7 for the active link from `iw` PHY markers.
40
+ A generation is never guessed for an unconnected AP.
41
+ - Compare consecutive scans to identify new, missing, or materially changed access points.
42
+ - Create a self-contained HTML diagnostic report or an anonymized JSON export for safe sharing.
43
+ - Select an access point to identify the strongest overlapping neighbours.
44
+ - Show the active connection's gateway and DNS servers from local system diagnostics.
45
+ - Use optional 60-second monitoring and location profiles for private local scan history.
46
+
47
+ ## Installation
48
+
49
+ ### PyPI (Debian/Ubuntu)
50
+
51
+ GTK, libadwaita, PyGObject and Pycairo use native system libraries, so install
52
+ them from your distribution before installing the Python package:
53
+
54
+ ```bash
55
+ sudo apt install python3-gi python3-cairo gir1.2-gtk-4.0 gir1.2-adw-1 network-manager iw pipx
56
+ pipx install --system-site-packages wifi-analyzer
57
+ ```
58
+
59
+ ### Debian/Ubuntu
60
+
61
+ `wifi-analyzer` is distributed through the [Danne L10n Suite APT repository](https://github.com/yeager/debian-repo), not the default Debian or Ubuntu repositories. Add the repository before installing:
62
+
63
+ ```bash
64
+ wget -qO /tmp/yeager-repo-key.asc https://yeager.github.io/debian-repo/yeager-repo-key.asc
65
+ sudo install -m 0644 /tmp/yeager-repo-key.asc /usr/share/keyrings/yeager-repo.asc
66
+ echo 'deb [signed-by=/usr/share/keyrings/yeager-repo.asc] https://yeager.github.io/debian-repo ./' | sudo tee /etc/apt/sources.list.d/yeager.list
67
+ sudo apt update
68
+ sudo apt install wifi-analyzer
69
+ ```
70
+
71
+ If APT still cannot find the package, check that the repository appears in
72
+ `apt update` and run `apt-cache policy wifi-analyzer`. The signed APT index may
73
+ lag behind the latest release. To install the current version, download the
74
+ `.deb` from [GitHub Releases](https://github.com/yeager/wifi-analyzer/releases/latest)
75
+ and install the downloaded file with `sudo apt install ./wifi-analyzer_*.deb`.
76
+
77
+ Source packages follow Debian policy and can be built with:
78
+
79
+ ```bash
80
+ dpkg-buildpackage -us -uc -b
81
+ ```
82
+
83
+ ### Fedora/RPM distributions
84
+
85
+ The release includes an RPM built on Fedora 44. Download it from
86
+ [GitHub Releases](https://github.com/yeager/wifi-analyzer/releases/latest)
87
+ and install it on Fedora 44 with `sudo dnf install ./wifi-analyzer-*.rpm`.
88
+
89
+ Build the source RPM with:
90
+
91
+ ```bash
92
+ rpmbuild -ba packaging/rpm/wifi-analyzer.spec
93
+ ```
94
+
95
+ GitHub Actions builds both `.deb` and `.rpm` artifacts for releases and pull
96
+ requests.
97
+
98
+ ## Translations
99
+
100
+ The user interface uses gettext catalogues for 20 languages. Swedish is
101
+ translated and reviewed; the remaining catalogues are ready for translation.
102
+ See [`po/README.md`](po/README.md) to contribute or validate a translation.
103
+ The Swedish manual page is installed as `wifi-analyzer(1)` and is maintained in
104
+ [`docs/man/sv`](docs/man/sv).
105
+
106
+ ### Flatpak
107
+
108
+ Flatpak-paketet byggs från
109
+ [`build-aux/io.github.yeager.WifiAnalyzer.json`](build-aux/io.github.yeager.WifiAnalyzer.json).
110
+ Det kan installeras med Flatpak Builder tills paketet har publicerats på Flathub.
111
+
112
+ ```bash
113
+ flatpak-builder --user --install --force-clean build-dir \
114
+ build-aux/io.github.yeager.WifiAnalyzer.json
115
+ ```
116
+
117
+ ## License
118
+
119
+ GPL-3.0
120
+
121
+ ## Author
122
+
123
+ Daniel Nylander — [danielnylander.se](https://danielnylander.se)
@@ -0,0 +1,109 @@
1
+ <p align="center">
2
+ <img src="assets/wifi-analyzer-logo.png" width="220" alt="WiFi Analyzer logo">
3
+ </p>
4
+
5
+ # WiFi Analyzer
6
+
7
+ Wi-Fi signal analyzer, channel planner and local connection diagnostics tool.
8
+
9
+ Built with GTK4/Adwaita. Part of the [Danne L10n Suite](https://github.com/yeager/debian-repo).
10
+
11
+ ## Features
12
+
13
+ - Scan access points through NetworkManager D-Bus; no privileged shell command is required.
14
+ - Filter results by network name, BSSID, channel or security type.
15
+ - Inspect 2.4, 5 and 6 GHz bands with a channel-overlap graph.
16
+ - Show NetworkManager's announced AP bandwidth when available, with a clearly
17
+ marked estimate as a fallback.
18
+ - Mark 5 GHz DFS channels. Their availability depends on the local regulatory domain.
19
+ - Recommend less congested channels from observed signal overlap.
20
+ - Sort results by signal, channel, or security and group repeated SSIDs by access-point count.
21
+ - Export visible, filtered results as CSV, JSON, anonymized JSON or an HTML
22
+ diagnostic report, with a user-selected file name and destination.
23
+ - Keep up to 100 local scan summaries for future history views. Scan data never leaves the device and can be cleared from the menu.
24
+ - Mark the active access point and use the actual channel width reported by `iw` for that radio when available.
25
+ - Identify Wi-Fi 4, 5, 6/6E and 7 for the active link from `iw` PHY markers.
26
+ A generation is never guessed for an unconnected AP.
27
+ - Compare consecutive scans to identify new, missing, or materially changed access points.
28
+ - Create a self-contained HTML diagnostic report or an anonymized JSON export for safe sharing.
29
+ - Select an access point to identify the strongest overlapping neighbours.
30
+ - Show the active connection's gateway and DNS servers from local system diagnostics.
31
+ - Use optional 60-second monitoring and location profiles for private local scan history.
32
+
33
+ ## Installation
34
+
35
+ ### PyPI (Debian/Ubuntu)
36
+
37
+ GTK, libadwaita, PyGObject and Pycairo use native system libraries, so install
38
+ them from your distribution before installing the Python package:
39
+
40
+ ```bash
41
+ sudo apt install python3-gi python3-cairo gir1.2-gtk-4.0 gir1.2-adw-1 network-manager iw pipx
42
+ pipx install --system-site-packages wifi-analyzer
43
+ ```
44
+
45
+ ### Debian/Ubuntu
46
+
47
+ `wifi-analyzer` is distributed through the [Danne L10n Suite APT repository](https://github.com/yeager/debian-repo), not the default Debian or Ubuntu repositories. Add the repository before installing:
48
+
49
+ ```bash
50
+ wget -qO /tmp/yeager-repo-key.asc https://yeager.github.io/debian-repo/yeager-repo-key.asc
51
+ sudo install -m 0644 /tmp/yeager-repo-key.asc /usr/share/keyrings/yeager-repo.asc
52
+ echo 'deb [signed-by=/usr/share/keyrings/yeager-repo.asc] https://yeager.github.io/debian-repo ./' | sudo tee /etc/apt/sources.list.d/yeager.list
53
+ sudo apt update
54
+ sudo apt install wifi-analyzer
55
+ ```
56
+
57
+ If APT still cannot find the package, check that the repository appears in
58
+ `apt update` and run `apt-cache policy wifi-analyzer`. The signed APT index may
59
+ lag behind the latest release. To install the current version, download the
60
+ `.deb` from [GitHub Releases](https://github.com/yeager/wifi-analyzer/releases/latest)
61
+ and install the downloaded file with `sudo apt install ./wifi-analyzer_*.deb`.
62
+
63
+ Source packages follow Debian policy and can be built with:
64
+
65
+ ```bash
66
+ dpkg-buildpackage -us -uc -b
67
+ ```
68
+
69
+ ### Fedora/RPM distributions
70
+
71
+ The release includes an RPM built on Fedora 44. Download it from
72
+ [GitHub Releases](https://github.com/yeager/wifi-analyzer/releases/latest)
73
+ and install it on Fedora 44 with `sudo dnf install ./wifi-analyzer-*.rpm`.
74
+
75
+ Build the source RPM with:
76
+
77
+ ```bash
78
+ rpmbuild -ba packaging/rpm/wifi-analyzer.spec
79
+ ```
80
+
81
+ GitHub Actions builds both `.deb` and `.rpm` artifacts for releases and pull
82
+ requests.
83
+
84
+ ## Translations
85
+
86
+ The user interface uses gettext catalogues for 20 languages. Swedish is
87
+ translated and reviewed; the remaining catalogues are ready for translation.
88
+ See [`po/README.md`](po/README.md) to contribute or validate a translation.
89
+ The Swedish manual page is installed as `wifi-analyzer(1)` and is maintained in
90
+ [`docs/man/sv`](docs/man/sv).
91
+
92
+ ### Flatpak
93
+
94
+ Flatpak-paketet byggs från
95
+ [`build-aux/io.github.yeager.WifiAnalyzer.json`](build-aux/io.github.yeager.WifiAnalyzer.json).
96
+ Det kan installeras med Flatpak Builder tills paketet har publicerats på Flathub.
97
+
98
+ ```bash
99
+ flatpak-builder --user --install --force-clean build-dir \
100
+ build-aux/io.github.yeager.WifiAnalyzer.json
101
+ ```
102
+
103
+ ## License
104
+
105
+ GPL-3.0
106
+
107
+ ## Author
108
+
109
+ Daniel Nylander — [danielnylander.se](https://danielnylander.se)
@@ -0,0 +1,45 @@
1
+ {
2
+ "app-id": "io.github.yeager.WifiAnalyzer",
3
+ "runtime": "org.gnome.Platform",
4
+ "runtime-version": "50",
5
+ "sdk": "org.gnome.Sdk",
6
+ "command": "wifi-analyzer",
7
+ "finish-args": [
8
+ "--share=ipc",
9
+ "--socket=fallback-x11",
10
+ "--socket=wayland",
11
+ "--device=dri",
12
+ "--system-talk-name=org.freedesktop.NetworkManager"
13
+ ],
14
+ "cleanup": [
15
+ "/include",
16
+ "/lib/pkgconfig",
17
+ "/man",
18
+ "/share/doc",
19
+ "/share/gtk-doc",
20
+ "/share/man",
21
+ "*.la",
22
+ "*.a"
23
+ ],
24
+ "modules": [
25
+ {
26
+ "name": "wifi-analyzer",
27
+ "buildsystem": "simple",
28
+ "build-commands": [
29
+ "python3 scripts/compile_translations.py",
30
+ "pip3 install --no-index --no-build-isolation --prefix=/app .",
31
+ "for mo in locale/*/LC_MESSAGES/wifi-analyzer.mo; do lang=$(basename $(dirname $(dirname $mo))); install -Dm644 $mo /app/share/locale/$lang/LC_MESSAGES/wifi-analyzer.mo; done",
32
+ "install -Dm644 data/io.github.yeager.WifiAnalyzer.desktop /app/share/applications/io.github.yeager.WifiAnalyzer.desktop",
33
+ "install -Dm644 data/icons/hicolor/512x512/apps/io.github.yeager.WifiAnalyzer.png /app/share/icons/hicolor/512x512/apps/io.github.yeager.WifiAnalyzer.png",
34
+ "install -Dm644 data/icons/hicolor/256x256/apps/io.github.yeager.WifiAnalyzer.png /app/share/icons/hicolor/256x256/apps/io.github.yeager.WifiAnalyzer.png",
35
+ "install -Dm644 data/io.github.yeager.WifiAnalyzer.metainfo.xml /app/share/metainfo/io.github.yeager.WifiAnalyzer.metainfo.xml"
36
+ ],
37
+ "sources": [
38
+ {
39
+ "type": "dir",
40
+ "path": ".."
41
+ }
42
+ ]
43
+ }
44
+ ]
45
+ }
@@ -0,0 +1,15 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128">
2
+ <defs>
3
+ <linearGradient id="bg" x1="0" y1="0" x2="0" y2="1">
4
+ <stop offset="0%" stop-color="#57e389"/>
5
+ <stop offset="100%" stop-color="#26a269"/>
6
+ </linearGradient>
7
+ </defs>
8
+ <rect width="128" height="128" rx="16" fill="url(#bg)"/>
9
+ <g transform="translate(64,72)" fill="none" stroke="white" stroke-width="5" stroke-linecap="round">
10
+ <circle cx="0" cy="0" r="6" fill="white"/>
11
+ <path d="M-18-14 a 26 26 0 0 1 36 0"/>
12
+ <path d="M-30-28 a 44 44 0 0 1 60 0"/>
13
+ <path d="M-42-42 a 62 62 0 0 1 84 0"/>
14
+ </g>
15
+ </svg>
@@ -0,0 +1,10 @@
1
+ [Desktop Entry]
2
+ Name=WiFi Analyzer
3
+ Comment=WiFi Network Analysis Tool
4
+ Exec=wifi-analyzer
5
+ Icon=io.github.yeager.WifiAnalyzer
6
+ Terminal=false
7
+ Type=Application
8
+ StartupWMClass=io.github.yeager.WifiAnalyzer
9
+ Categories=Network;GTK;
10
+ Keywords=wifi;wireless;network;analyzer;channel;
@@ -0,0 +1,86 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <component type="desktop-application">
3
+ <id>io.github.yeager.WifiAnalyzer</id>
4
+ <name>WiFi Analyzer</name>
5
+ <summary>Inspect nearby Wi-Fi networks and channels</summary>
6
+ <metadata_license>CC0-1.0</metadata_license>
7
+ <project_license>GPL-3.0-or-later</project_license>
8
+ <developer id="io.github.yeager">
9
+ <name>Daniel Nylander</name>
10
+ </developer>
11
+ <launchable type="desktop-id">io.github.yeager.WifiAnalyzer.desktop</launchable>
12
+ <provides>
13
+ <binary>wifi-analyzer</binary>
14
+ </provides>
15
+ <description>
16
+ <p>WiFi Analyzer shows nearby wireless networks, their signal strength, channel and security mode.</p>
17
+ </description>
18
+ <url type="homepage">https://www.danielnylander.se</url>
19
+ <url type="bugtracker">https://github.com/yeager/wifi-analyzer/issues</url>
20
+ <content_rating type="oars-1.1"/>
21
+ <releases>
22
+ <release version="0.1.19" date="2026-10-25">
23
+ <description><p>Prepare PyPI distribution and synchronize release metadata.</p></description>
24
+ </release>
25
+ <release version="0.1.18" date="2026-09-22">
26
+ <description><p>Fix direct launch with Python from the source directory.</p></description>
27
+ </release>
28
+ <release version="0.1.17" date="2026-09-21">
29
+ <description><p>Add zoom and guidance to the interactive channel view.</p></description>
30
+ </release>
31
+ <release version="0.1.16" date="2026-09-21">
32
+ <description><p>Add interactive channel filtering and expanded connection diagnostics.</p></description>
33
+ </release>
34
+ <release version="0.1.15" date="2026-09-21">
35
+ <description><p>Add a profile-scoped local signal history graph for selected access points.</p></description>
36
+ </release>
37
+ <release version="0.1.14" date="2026-09-21">
38
+ <description><p>Show the measured active-link Wi-Fi generation in the network list.</p></description>
39
+ </release>
40
+ <release version="0.1.13" date="2026-09-21">
41
+ <description>
42
+ <p>Fix channel detection, safe scan handling, filtered exports, package support, a Swedish manual, and active-link Wi-Fi generation identification.</p>
43
+ </description>
44
+ </release>
45
+ <release version="0.1.12" date="2026-09-21">
46
+ <description>
47
+ <p>Add a new WiFi Analyzer logo and desktop application icon.</p>
48
+ </description>
49
+ </release>
50
+ <release version="0.1.11" date="2026-09-21">
51
+ <description>
52
+ <p>Add a 20-language gettext translation framework and compile translations in Flatpak builds.</p>
53
+ </description>
54
+ </release>
55
+ <release version="0.1.10" date="2026-09-21">
56
+ <description>
57
+ <p>Add actionable system notifications for Wi-Fi connection problems.</p>
58
+ </description>
59
+ </release>
60
+ <release version="0.1.9" date="2026-09-21">
61
+ <description>
62
+ <p>Add interference explanations, connection diagnostics, profile history, and monitoring notifications.</p>
63
+ </description>
64
+ </release>
65
+ <release version="0.1.8" date="2026-09-21">
66
+ <description>
67
+ <p>Add location profiles and optional background scan monitoring with change notifications.</p>
68
+ </description>
69
+ </release>
70
+ <release version="0.1.7" date="2026-09-21">
71
+ <description>
72
+ <p>Add active-connection details, scan comparison, measured channel width, anonymized exports, and HTML diagnostic reports.</p>
73
+ </description>
74
+ </release>
75
+ <release version="0.1.6" date="2026-09-21">
76
+ <description>
77
+ <p>Add congestion recommendations, local scan history, CSV/JSON export, sorting, and access-point details.</p>
78
+ </description>
79
+ </release>
80
+ <release version="0.1.5" date="2026-09-21">
81
+ <description>
82
+ <p>Add filtering, 6 GHz support, channel-width guidance, and DFS/regulatory indications.</p>
83
+ </description>
84
+ </release>
85
+ </releases>
86
+ </component>
@@ -0,0 +1,12 @@
1
+ wifi-analyzer (0.1.19) unstable; urgency=medium
2
+
3
+ * Prepare the PyPI release and bundle gettext catalogues in the Python package.
4
+ * Keep the About dialog and distribution metadata synchronized.
5
+
6
+ -- Daniel Nylander <po@danielnylander.se> Sun, 25 Oct 2026 16:27:59 +0100
7
+
8
+ wifi-analyzer (0.1.18) unstable; urgency=medium
9
+
10
+ * Fix direct launch with Python from the source directory.
11
+
12
+ -- Daniel Nylander <po@danielnylander.se> Tue, 22 Sep 2026 16:15:00 +0200
@@ -0,0 +1,27 @@
1
+ Source: wifi-analyzer
2
+ Section: net
3
+ Priority: optional
4
+ Maintainer: Daniel Nylander <po@danielnylander.se>
5
+ Build-Depends: debhelper-compat (= 13),
6
+ dh-sequence-python3,
7
+ gettext,
8
+ pybuild-plugin-pyproject,
9
+ python3-all,
10
+ python3-setuptools
11
+ Standards-Version: 4.7.0
12
+ Rules-Requires-Root: no
13
+ Homepage: https://www.danielnylander.se
14
+
15
+ Package: wifi-analyzer
16
+ Architecture: all
17
+ Depends: ${misc:Depends},
18
+ ${python3:Depends},
19
+ gir1.2-adw-1,
20
+ gir1.2-gtk-4.0,
21
+ network-manager,
22
+ python3-cairo,
23
+ python3-gi
24
+ Recommends: iw
25
+ Description: GTK application for inspecting nearby Wi-Fi networks
26
+ WiFi Analyzer displays nearby access points, their signal strength, channel,
27
+ security mode, overlap and regulatory hints through NetworkManager.