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.
- wifi_analyzer-0.1.19/.github/workflows/packages.yml +60 -0
- wifi_analyzer-0.1.19/.github/workflows/pypi-publish.yml +52 -0
- wifi_analyzer-0.1.19/.github/workflows/transifex-sync.yml +55 -0
- wifi_analyzer-0.1.19/.gitignore +6 -0
- wifi_analyzer-0.1.19/.tx/config +8 -0
- wifi_analyzer-0.1.19/FLATHUB.md +19 -0
- wifi_analyzer-0.1.19/LICENSE +9 -0
- wifi_analyzer-0.1.19/PKG-INFO +123 -0
- wifi_analyzer-0.1.19/README.md +109 -0
- wifi_analyzer-0.1.19/assets/wifi-analyzer-logo.png +0 -0
- wifi_analyzer-0.1.19/build-aux/io.github.yeager.WifiAnalyzer.json +45 -0
- wifi_analyzer-0.1.19/data/icons/hicolor/256x256/apps/io.github.yeager.WifiAnalyzer.png +0 -0
- wifi_analyzer-0.1.19/data/icons/hicolor/512x512/apps/io.github.yeager.WifiAnalyzer.png +0 -0
- wifi_analyzer-0.1.19/data/icons/io.github.yeager.WifiAnalyzer.svg +15 -0
- wifi_analyzer-0.1.19/data/io.github.yeager.WifiAnalyzer.desktop +10 -0
- wifi_analyzer-0.1.19/data/io.github.yeager.WifiAnalyzer.metainfo.xml +86 -0
- wifi_analyzer-0.1.19/debian/changelog +12 -0
- wifi_analyzer-0.1.19/debian/control +27 -0
- wifi_analyzer-0.1.19/debian/copyright +18 -0
- wifi_analyzer-0.1.19/debian/rules +33 -0
- wifi_analyzer-0.1.19/debian/source/format +1 -0
- wifi_analyzer-0.1.19/docs/man/README.md +7 -0
- wifi_analyzer-0.1.19/docs/man/po4a.cfg +3 -0
- wifi_analyzer-0.1.19/docs/man/sv/wifi-analyzer.1 +29 -0
- wifi_analyzer-0.1.19/docs/man/wifi-analyzer.1 +27 -0
- wifi_analyzer-0.1.19/flatpak/io.github.yeager.WifiAnalyzer.json +37 -0
- wifi_analyzer-0.1.19/packaging/rpm/wifi-analyzer.spec +78 -0
- wifi_analyzer-0.1.19/po/README.md +20 -0
- wifi_analyzer-0.1.19/po/ar.po +275 -0
- wifi_analyzer-0.1.19/po/de.po +327 -0
- wifi_analyzer-0.1.19/po/el.po +276 -0
- wifi_analyzer-0.1.19/po/en_GB.po +289 -0
- wifi_analyzer-0.1.19/po/es.po +327 -0
- wifi_analyzer-0.1.19/po/fi.po +276 -0
- wifi_analyzer-0.1.19/po/fr.po +327 -0
- wifi_analyzer-0.1.19/po/hi.po +275 -0
- wifi_analyzer-0.1.19/po/it.po +276 -0
- wifi_analyzer-0.1.19/po/ja.po +327 -0
- wifi_analyzer-0.1.19/po/ko.po +276 -0
- wifi_analyzer-0.1.19/po/nl.po +276 -0
- wifi_analyzer-0.1.19/po/no.po +327 -0
- wifi_analyzer-0.1.19/po/pl.po +277 -0
- wifi_analyzer-0.1.19/po/pt_BR.po +276 -0
- wifi_analyzer-0.1.19/po/ru.po +277 -0
- wifi_analyzer-0.1.19/po/sv.po +369 -0
- wifi_analyzer-0.1.19/po/tr.po +276 -0
- wifi_analyzer-0.1.19/po/uk.po +277 -0
- wifi_analyzer-0.1.19/po/wifi-analyzer.pot +354 -0
- wifi_analyzer-0.1.19/po/zh_CN.po +275 -0
- wifi_analyzer-0.1.19/pyproject.toml +29 -0
- wifi_analyzer-0.1.19/screenshots/main.png +0 -0
- wifi_analyzer-0.1.19/scripts/compile_translations.py +15 -0
- wifi_analyzer-0.1.19/setup.cfg +4 -0
- wifi_analyzer-0.1.19/src/wifi_analyzer/__init__.py +2 -0
- wifi_analyzer-0.1.19/src/wifi_analyzer/__main__.py +6 -0
- wifi_analyzer-0.1.19/src/wifi_analyzer/accessibility.py +66 -0
- wifi_analyzer-0.1.19/src/wifi_analyzer/app.py +1198 -0
- wifi_analyzer-0.1.19/src/wifi_analyzer/export_helper.py +45 -0
- wifi_analyzer-0.1.19/src/wifi_analyzer/locale/ar/LC_MESSAGES/wifi-analyzer.mo +0 -0
- wifi_analyzer-0.1.19/src/wifi_analyzer/locale/de/LC_MESSAGES/wifi-analyzer.mo +0 -0
- wifi_analyzer-0.1.19/src/wifi_analyzer/locale/el/LC_MESSAGES/wifi-analyzer.mo +0 -0
- wifi_analyzer-0.1.19/src/wifi_analyzer/locale/en_GB/LC_MESSAGES/wifi-analyzer.mo +0 -0
- wifi_analyzer-0.1.19/src/wifi_analyzer/locale/es/LC_MESSAGES/wifi-analyzer.mo +0 -0
- wifi_analyzer-0.1.19/src/wifi_analyzer/locale/fi/LC_MESSAGES/wifi-analyzer.mo +0 -0
- wifi_analyzer-0.1.19/src/wifi_analyzer/locale/fr/LC_MESSAGES/wifi-analyzer.mo +0 -0
- wifi_analyzer-0.1.19/src/wifi_analyzer/locale/hi/LC_MESSAGES/wifi-analyzer.mo +0 -0
- wifi_analyzer-0.1.19/src/wifi_analyzer/locale/it/LC_MESSAGES/wifi-analyzer.mo +0 -0
- wifi_analyzer-0.1.19/src/wifi_analyzer/locale/ja/LC_MESSAGES/wifi-analyzer.mo +0 -0
- wifi_analyzer-0.1.19/src/wifi_analyzer/locale/ko/LC_MESSAGES/wifi-analyzer.mo +0 -0
- wifi_analyzer-0.1.19/src/wifi_analyzer/locale/nl/LC_MESSAGES/wifi-analyzer.mo +0 -0
- wifi_analyzer-0.1.19/src/wifi_analyzer/locale/no/LC_MESSAGES/wifi-analyzer.mo +0 -0
- wifi_analyzer-0.1.19/src/wifi_analyzer/locale/pl/LC_MESSAGES/wifi-analyzer.mo +0 -0
- wifi_analyzer-0.1.19/src/wifi_analyzer/locale/pt_BR/LC_MESSAGES/wifi-analyzer.mo +0 -0
- wifi_analyzer-0.1.19/src/wifi_analyzer/locale/ru/LC_MESSAGES/wifi-analyzer.mo +0 -0
- wifi_analyzer-0.1.19/src/wifi_analyzer/locale/sv/LC_MESSAGES/wifi-analyzer.mo +0 -0
- wifi_analyzer-0.1.19/src/wifi_analyzer/locale/tr/LC_MESSAGES/wifi-analyzer.mo +0 -0
- wifi_analyzer-0.1.19/src/wifi_analyzer/locale/uk/LC_MESSAGES/wifi-analyzer.mo +0 -0
- wifi_analyzer-0.1.19/src/wifi_analyzer/locale/zh_CN/LC_MESSAGES/wifi-analyzer.mo +0 -0
- wifi_analyzer-0.1.19/src/wifi_analyzer/undo_redo.py +45 -0
- wifi_analyzer-0.1.19/src/wifi_analyzer.egg-info/PKG-INFO +123 -0
- wifi_analyzer-0.1.19/src/wifi_analyzer.egg-info/SOURCES.txt +83 -0
- wifi_analyzer-0.1.19/src/wifi_analyzer.egg-info/dependency_links.txt +1 -0
- wifi_analyzer-0.1.19/src/wifi_analyzer.egg-info/entry_points.txt +2 -0
- wifi_analyzer-0.1.19/src/wifi_analyzer.egg-info/top_level.txt +1 -0
- 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,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)
|
|
Binary file
|
|
@@ -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
|
+
}
|
|
Binary file
|
|
Binary file
|
|
@@ -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.
|