From 074e777ba2469d4becbb646ae8a775a35817ce77 Mon Sep 17 00:00:00 2001 From: Ryanmello07 <67509637+Ryanmello07@users.noreply.github.com> Date: Thu, 20 Aug 2026 23:05:38 -0700 Subject: [PATCH] rename: app id network.ur.urnetwork -> com.bringyour.network The Android and Apple clients ship under `com.bringyour.network`. Linux was the only platform on a different reverse-DNS id, and every place the id is written down had to be told which one to use. This makes Linux match, and it has to be done in one change because the id is a join key: the GTK application id, the .desktop basename, the AppStream component id, the polkit action namespace, the icon-theme name and the Flatpak app id must all agree or the desktop stops recognising the app. WHAT MOVES, AND WHY IT IS ALL ONE COMMIT main.cpp Gtk::Application::create() -- the GApplication id *.desktop filename, Icon=, StartupWMClass= metainfo.xml filename, , polkit .policy filename + all four action ids, matched in ControlProtocol.hpp so the daemon asks about the actions the file actually declares icons hicolor basenames; Flatpak refuses to export an icon whose name is not the app id flatpak manifest filename + id + the desktop-file-edit paths deb/rpm/tarball/ the installed paths, the conffile entries, and the AppImage/snap uninstaller's stale-path list Splitting these would leave an intermediate commit where, for example, the .desktop names an icon that does not exist, or the daemon checks polkit actions the shipped .policy does not declare -- both of which fail silently at runtime rather than at build time. TWO THINGS THAT ARE NOT PURE SEARCH-AND-REPLACE 1. `UrTheme::kAppIconName`. The icon name was spelled as a literal in two places -- the by-path load in UrTheme.cpp and the by-name fallback in MainWindow.cpp. Renaming the packaging alone left both lookups pointing at a file that no longer existed, and `set_from_icon_name()` renders a blank image without raising anything, so the title-bar logo simply went empty. It is now one constant that the packaging and both call sites share. 2. The libsecret keyring attribute in SecretServiceRpcSessionStore.cpp moves with the id. This is deliberately NOT dual-read: an entry written by an older build is no longer found, the app falls back to a fresh RPC session (the same one-time cost as the Flatpak data path moving), and the previous app identity is not left holding live key material in the user's keyring with nothing to clean it up. No behaviour changes beyond those two. `network.ur.urnetwork` no longer appears anywhere in the tree. --- APPIMAGE.md | 6 ++-- MIGRATION.md | 6 ++-- PLAN.md | 2 +- app/meson.build | 16 +++++----- ....desktop => com.bringyour.network.desktop} | 2 +- ....desktop => com.bringyour.network.desktop} | 4 +-- ...xml => com.bringyour.network.metainfo.xml} | 6 ++-- ...rnetwork.png => com.bringyour.network.png} | Bin ...rnetwork.png => com.bringyour.network.png} | Bin app/snap/snapcraft.yaml | 2 +- app/src/ControlProtocol.hpp | 14 ++++---- app/src/MainWindow.cpp | 2 +- app/src/SecretServiceRpcSessionStore.cpp | 8 ++++- app/src/UrTheme.cpp | 5 +-- app/src/UrTheme.hpp | 14 ++++++-- app/src/main.cpp | 4 +-- docs/TESTING-CACHYOS.md | 8 ++--- docs/linux_agent_help.md | 10 +++--- packaging/deb/nfpm.yaml | 6 ++-- packaging/deb/scripts/postinst | 4 +-- packaging/distro-smoke.sh | 6 ++-- ...rnetwork.yml => com.bringyour.network.yml} | 10 +++--- packaging/lib/common.sh | 30 +++++++++--------- packaging/make-appimage.sh | 20 ++++++------ packaging/make-flatpak.sh | 6 ++-- ...rk.policy => com.bringyour.network.policy} | 10 +++--- packaging/rpm/nfpm.yaml | 4 +-- packaging/tarball/install.sh | 4 +-- packaging/tarball/uninstall.sh | 12 +++---- 29 files changed, 119 insertions(+), 102 deletions(-) rename app/packaging/autostart/{network.ur.urnetwork.desktop => com.bringyour.network.desktop} (96%) rename app/packaging/{network.ur.urnetwork.desktop => com.bringyour.network.desktop} (93%) rename app/packaging/{network.ur.urnetwork.metainfo.xml => com.bringyour.network.metainfo.xml} (93%) rename app/packaging/icons/hicolor/256x256/apps/{urnetwork.png => com.bringyour.network.png} (100%) rename app/packaging/icons/hicolor/48x48/apps/{urnetwork.png => com.bringyour.network.png} (100%) rename packaging/flatpak/{network.ur.urnetwork.yml => com.bringyour.network.yml} (97%) rename packaging/polkit/{network.ur.urnetwork.policy => com.bringyour.network.policy} (95%) diff --git a/APPIMAGE.md b/APPIMAGE.md index e6c71eb..cf32ba8 100644 --- a/APPIMAGE.md +++ b/APPIMAGE.md @@ -738,11 +738,11 @@ bundling format inside a `.deb` — legitimate, but then use `/opt` + `$ORIGIN` - **apt gets strict in 26.04, not 24.04.** apt 3.2 uses Sequoia; `apt-key` is gone; `Signed-By` must point at a dearmored keyring in `/usr/share/keyrings`, never `/etc/apt/trusted.gpg.d` (which would trust our key for *all* repositories). -- **Desktop-file naming**: `main.cpp:67` uses app id `network.ur.urnetwork` but the +- **Desktop-file naming**: `main.cpp:67` uses app id `com.bringyour.network` but the desktop file is `urnetwork.desktop`. Nothing is broken today (`StartupWMClass` covers window association), but D-Bus activation — the clean way to deliver a `urnetwork://` URI to a running instance — requires the names to match. - Rename to `network.ur.urnetwork.desktop`. + Rename to `com.bringyour.network.desktop`. ### 10d. The recommended alternative, if the direction changes @@ -903,7 +903,7 @@ working with no error anywhere — a changed type is a decode error, and a chang in from `postinst` (IVPN's latent bug). **`install.sh` must run `update-desktop-database` and `gtk-update-icon-cache` itself** — see the §5 callout for why this one silently passes testing and reaches users broken. -- [ ] Rename the desktop file to `network.ur.urnetwork.desktop` to match +- [ ] Rename the desktop file to `com.bringyour.network.desktop` to match `main.cpp:67`'s app id. Harmless today, but D-Bus activation — the clean way to hand a `urnetwork://` URI to a running instance — requires the names to match. - [ ] Autostart via a root-owned **inert template** (`/etc/urnetwork/autostart/`) that diff --git a/MIGRATION.md b/MIGRATION.md index 30b9876..31f6c4f 100644 --- a/MIGRATION.md +++ b/MIGRATION.md @@ -37,12 +37,12 @@ a known follow-up, do not silently pretend loopback is private. | `/usr/lib/urnetwork/libURnetworkSdk.so` | daemon pkg | rpath `$ORIGIN` | | `/usr/bin/urnetwork` | daemon pkg | **launcher script**, the stable `Exec=` target | | `/lib/systemd/system/urnetworkd.service` | daemon pkg | `/lib`, in every release's load path | -| `/usr/share/applications/network.ur.urnetwork.desktop` | daemon pkg | filename **must** match `main.cpp`'s app id | -| `/usr/share/icons/hicolor/{48x48,256x256}/apps/urnetwork.png` | daemon pkg | | +| `/usr/share/applications/com.bringyour.network.desktop` | daemon pkg | filename **must** match `main.cpp`'s app id | +| `/usr/share/icons/hicolor/{48x48,256x256}/apps/com.bringyour.network.png` | daemon pkg | | | `/usr/share/urnetwork/world-110m.json` | daemon pkg | globe land outlines | | `/usr/share/urnetwork/icons/urnetwork-tray-*.png` | daemon pkg | tray art | | `/usr/share/locale//LC_MESSAGES/urnetwork.mo` | daemon pkg | gettext catalogs | -| `/etc/urnetwork/autostart/network.ur.urnetwork.desktop` | daemon pkg | **inert template**, GUI symlinks it | +| `/etc/urnetwork/autostart/com.bringyour.network.desktop` | daemon pkg | **inert template**, GUI symlinks it | | `/etc/NetworkManager/conf.d/95-urnetwork.conf` | daemon pkg | `unmanaged-devices=interface-name:urnet0` | | `/etc/udev/rules.d/85-urnetwork-unmanaged.rules` | daemon pkg | `ENV{NM_UNMANAGED}="1"` | | `~/.local/lib/urnetwork/URnetwork.AppImage` | **user** | never packaged; must be user-writable | diff --git a/PLAN.md b/PLAN.md index 49c92b0..dedbcf5 100644 --- a/PLAN.md +++ b/PLAN.md @@ -302,7 +302,7 @@ than being the one platform that differs. refreshed by **dpkg triggers**, no dependency or maintainer script needed; §9.7.1 covers `x-scheme-handler/urnetwork`. ⚠️ Triggers fire only for files **dpkg** installs, so never symlink one in from `postinst` (IVPN's latent bug). Residual: - `main.cpp:67`'s app id `network.ur.urnetwork` does not match + `main.cpp:67`'s app id `com.bringyour.network` does not match `urnetwork.desktop`; harmless today, but D-Bus activation requires them to match. - **R8 — GeoClue ≥ 2.7.0 is required for the location override** [confirmed]: Ubuntu 22.04 (2.5.7) and Debian 12 (2.6.0) can **never** support it. Those users diff --git a/app/meson.build b/app/meson.build index 2fad86a..ccda761 100644 --- a/app/meson.build +++ b/app/meson.build @@ -305,30 +305,30 @@ endif # host_integration=false (Flatpak) drops it with the rest: the GUI never calls # polkit — the daemon does, against a subject the GUI cannot influence. if host_integration -install_data('..' / 'packaging' / 'polkit' / 'network.ur.urnetwork.policy', +install_data('..' / 'packaging' / 'polkit' / 'com.bringyour.network.policy', install_dir : get_option('datadir') / 'polkit-1' / 'actions') endif -# desktop file: the filename MUST match main.cpp's app id network.ur.urnetwork +# desktop file: the filename MUST match main.cpp's app id com.bringyour.network # (D-Bus activation requires it; APPIMAGE.md §11d) -install_data('packaging/network.ur.urnetwork.desktop', +install_data('packaging/com.bringyour.network.desktop', install_dir : get_option('datadir') / 'applications') # AppStream metadata — required by Flathub, read by GNOME Software / Discover # for the .deb and .rpm too. The component id matches the .desktop basename. -install_data('packaging/network.ur.urnetwork.metainfo.xml', +install_data('packaging/com.bringyour.network.metainfo.xml', install_dir : get_option('datadir') / 'metainfo') -# hicolor icons (Icon=urnetwork in the desktop file) -install_data('packaging/icons/hicolor/48x48/apps/urnetwork.png', +# hicolor icons (Icon=com.bringyour.network in the desktop file) +install_data('packaging/icons/hicolor/48x48/apps/com.bringyour.network.png', install_dir : get_option('datadir') / 'icons' / 'hicolor' / '48x48' / 'apps') -install_data('packaging/icons/hicolor/256x256/apps/urnetwork.png', +install_data('packaging/icons/hicolor/256x256/apps/com.bringyour.network.png', install_dir : get_option('datadir') / 'icons' / 'hicolor' / '256x256' / 'apps') # autostart INERT TEMPLATE: root-owned under /etc/urnetwork/autostart/, where # no desktop reads it; the GUI symlinks it into ~/.config/autostart atomically if host_integration -install_data('packaging/autostart/network.ur.urnetwork.desktop', +install_data('packaging/autostart/com.bringyour.network.desktop', install_dir : '/etc/urnetwork/autostart') endif diff --git a/app/packaging/autostart/network.ur.urnetwork.desktop b/app/packaging/autostart/com.bringyour.network.desktop similarity index 96% rename from app/packaging/autostart/network.ur.urnetwork.desktop rename to app/packaging/autostart/com.bringyour.network.desktop index ac7d01f..31b99cd 100644 --- a/app/packaging/autostart/network.ur.urnetwork.desktop +++ b/app/packaging/autostart/com.bringyour.network.desktop @@ -2,7 +2,7 @@ Type=Application Name=URnetwork Comment=URnetwork VPN -Icon=urnetwork +Icon=com.bringyour.network Exec=urnetwork # TryExec self-disables this entry once the daemon package (and with it the # launcher) is removed, so a stale symlink cannot error at every login. diff --git a/app/packaging/network.ur.urnetwork.desktop b/app/packaging/com.bringyour.network.desktop similarity index 93% rename from app/packaging/network.ur.urnetwork.desktop rename to app/packaging/com.bringyour.network.desktop index 63e8327..e592abc 100644 --- a/app/packaging/network.ur.urnetwork.desktop +++ b/app/packaging/com.bringyour.network.desktop @@ -2,7 +2,7 @@ Type=Application Name=URnetwork Comment=URnetwork VPN -Icon=urnetwork +Icon=com.bringyour.network # /usr/bin/urnetwork is the launcher script the daemon package installs; it # finds the user's AppImage (search order in MIGRATION.md) and execs it with # the same arguments. Keeping Exec= on a stable, package-managed path is what @@ -13,7 +13,7 @@ Terminal=false Categories=Network;Security; Keywords=VPN;URnetwork;proxy;privacy; StartupNotify=true -StartupWMClass=network.ur.urnetwork +StartupWMClass=com.bringyour.network # Register the urnetwork:// scheme so OAuth/SSO callbacks and wallet deep # links route back to the app. Shipped as a plain dpkg file so the # desktop-file-utils dpkg trigger refreshes mimeinfo.cache automatically diff --git a/app/packaging/network.ur.urnetwork.metainfo.xml b/app/packaging/com.bringyour.network.metainfo.xml similarity index 93% rename from app/packaging/network.ur.urnetwork.metainfo.xml rename to app/packaging/com.bringyour.network.metainfo.xml index 409e1e0..6770f1e 100644 --- a/app/packaging/network.ur.urnetwork.metainfo.xml +++ b/app/packaging/com.bringyour.network.metainfo.xml @@ -2,7 +2,7 @@ - network.ur.urnetwork + com.bringyour.network URnetwork Private, decentralized VPN powered by a peer network @@ -45,7 +45,7 @@

- network.ur.urnetwork.desktop + com.bringyour.network.desktop https://ur.io https://github.com/urnetwork/urnetwork-linux/issues diff --git a/app/packaging/icons/hicolor/256x256/apps/urnetwork.png b/app/packaging/icons/hicolor/256x256/apps/com.bringyour.network.png similarity index 100% rename from app/packaging/icons/hicolor/256x256/apps/urnetwork.png rename to app/packaging/icons/hicolor/256x256/apps/com.bringyour.network.png diff --git a/app/packaging/icons/hicolor/48x48/apps/urnetwork.png b/app/packaging/icons/hicolor/48x48/apps/com.bringyour.network.png similarity index 100% rename from app/packaging/icons/hicolor/48x48/apps/urnetwork.png rename to app/packaging/icons/hicolor/48x48/apps/com.bringyour.network.png diff --git a/app/snap/snapcraft.yaml b/app/snap/snapcraft.yaml index 43a049f..ced14b0 100644 --- a/app/snap/snapcraft.yaml +++ b/app/snap/snapcraft.yaml @@ -49,7 +49,7 @@ apps: urnetwork: command: usr/bin/urnetwork extensions: [gnome] # GTK4/libadwaita runtime, themes, portals, wayland/x11 - common-id: network.ur.urnetwork + common-id: com.bringyour.network desktop: usr/share/applications/urnetwork.desktop plugs: - network # outbound sockets (SDK platform + provider traffic) diff --git a/app/src/ControlProtocol.hpp b/app/src/ControlProtocol.hpp index 078d762..985f566 100644 --- a/app/src/ControlProtocol.hpp +++ b/app/src/ControlProtocol.hpp @@ -108,14 +108,14 @@ inline constexpr const char* kControlGroupName = "urnetwork"; // policy file absent -> byte-for-byte today's behaviour: 0660 // root:urnetwork and AuthorizeControlPeer. inline constexpr const char* kPolkitPolicyPath = - "/usr/share/polkit-1/actions/network.ur.urnetwork.policy"; + "/usr/share/polkit-1/actions/com.bringyour.network.policy"; // The immutable-host twin. ostree/bootc machines mount /usr read-only, so the // tarball installer maps its whole payload under /usr/local — and polkit has // read both directories since 124. ControlServer::PolicyPath() probes this one // FIRST; without it the daemon looks in the one place the file cannot be on // Bazzite/Silverblue/Kinoite/SteamOS and silently falls back to the group. inline constexpr const char* kPolkitPolicyPathLocal = - "/usr/local/share/polkit-1/actions/network.ur.urnetwork.policy"; + "/usr/local/share/polkit-1/actions/com.bringyour.network.policy"; // HelloReply::auth_mode — which authority this daemon actually latched at // start. The GUI needs it because the "add yourself to the urnetwork group, @@ -125,16 +125,16 @@ inline constexpr const char* kAuthModePolkit = "polkit"; inline constexpr const char* kAuthModeGroup = "group"; // The four polkit action ids, namespaced to the app id. Shipped in -// packaging/polkit/network.ur.urnetwork.policy (0644 root:root — polkit +// packaging/polkit/com.bringyour.network.policy (0644 root:root — polkit // ignores group- or world-writable action files). They are checked by // urnetworkd, never by the GUI: the subject is built from SO_PEERCRED on the // connection being served, so a client can neither nominate its own subject // nor skip the check by not asking. -inline constexpr const char* kActionControlTunnel = "network.ur.urnetwork.control-tunnel"; +inline constexpr const char* kActionControlTunnel = "com.bringyour.network.control-tunnel"; inline constexpr const char* kActionManageKillSwitch = - "network.ur.urnetwork.manage-kill-switch"; -inline constexpr const char* kActionTakeOverTunnel = "network.ur.urnetwork.take-over-tunnel"; -inline constexpr const char* kActionReadLog = "network.ur.urnetwork.read-log"; + "com.bringyour.network.manage-kill-switch"; +inline constexpr const char* kActionTakeOverTunnel = "com.bringyour.network.take-over-tunnel"; +inline constexpr const char* kActionReadLog = "com.bringyour.network.read-log"; // The SDK's built-in default device-RPC address (sdk/device_rpc.go:109, // deviceRpcDefaultAddress = "127.0.0.1:12025"). Kept as a NAMED CONSTANT ONLY, diff --git a/app/src/MainWindow.cpp b/app/src/MainWindow.cpp index 22e496e..9a424b6 100644 --- a/app/src/MainWindow.cpp +++ b/app/src/MainWindow.cpp @@ -517,7 +517,7 @@ void MainWindow::BuildChrome() { if (auto logo = BrandLogoTexture()) { icon->set(logo); } else { - icon->set_from_icon_name("urnetwork"); + icon->set_from_icon_name(kAppIconName); } icon->set_pixel_size(20); brand->append(*icon); diff --git a/app/src/SecretServiceRpcSessionStore.cpp b/app/src/SecretServiceRpcSessionStore.cpp index 325fe40..664286a 100644 --- a/app/src/SecretServiceRpcSessionStore.cpp +++ b/app/src/SecretServiceRpcSessionStore.cpp @@ -12,7 +12,13 @@ namespace { constexpr int kSecretPayloadVersion = 1; constexpr size_t kMaxSecretPayloadBytes = 256 * 1024; -constexpr const char* kApplicationAttribute = "network.ur.urnetwork"; +// The keyring attribute that scopes our secrets. Renamed with the app ID, so +// an entry written by an older build is not found by this one and the app +// falls back to a fresh RPC session — the same one-time cost as the Flatpak +// data path moving. Deliberately NOT dual-read: keeping the old attribute +// alive would leave the previous app identity holding live key material in the +// user's keyring with nothing left to clean it up. +constexpr const char* kApplicationAttribute = "com.bringyour.network"; const SecretSchema kRpcSessionSchema = [] { // Zero-initialize libsecret's reserved ABI fields explicitly. A short C diff --git a/app/src/UrTheme.cpp b/app/src/UrTheme.cpp index db6d024..44573d0 100644 --- a/app/src/UrTheme.cpp +++ b/app/src/UrTheme.cpp @@ -369,7 +369,8 @@ Glib::RefPtr BrandLogoTexture() { const std::string dir = BrandIconDir(); if (dir.empty()) return cached; for (const char* size : {"256x256", "48x48"}) { - const std::string path = dir + "/hicolor/" + size + "/apps/urnetwork.png"; + const std::string path = + dir + "/hicolor/" + size + "/apps/" + kAppIconName + ".png"; if (!g_file_test(path.c_str(), G_FILE_TEST_IS_REGULAR)) continue; try { cached = Gdk::Texture::create_from_filename(path); @@ -378,7 +379,7 @@ Glib::RefPtr BrandLogoTexture() { g_warning("brand logo: %s failed to load: %s", path.c_str(), e.what()); } } - g_warning("brand logo: no urnetwork.png under %s", dir.c_str()); + g_warning("brand logo: no %s.png under %s", kAppIconName, dir.c_str()); return cached; } diff --git a/app/src/UrTheme.hpp b/app/src/UrTheme.hpp index 7341792..de5e00f 100644 --- a/app/src/UrTheme.hpp +++ b/app/src/UrTheme.hpp @@ -34,10 +34,20 @@ void LoadBrandFonts(); // Install the brand CSS provider once per display. Safe to call repeatedly. void EnsureBrandCss(); +// The app icon's basename AND its icon-theme name: the packaging installs +// /icons/hicolor//apps/.png, and the .desktop's +// Icon= key names the same string. It lives here as ONE constant because it was +// previously spelled as a literal in two places -- the by-path load in +// UrTheme.cpp and the by-name fallback in MainWindow.cpp -- and the rename to +// the reverse-DNS app id caught only the packaging, so both lookups missed and +// the title-bar logo went blank with no error. Flatpak additionally REQUIRES +// this to equal the app id, or it exports no icon at all. +inline constexpr const char* kAppIconName = "com.bringyour.network"; + // Register the app's hicolor icon directory with the default icon theme so -// the icon NAME "urnetwork" resolves (window icon, tray, .desktop matching) +// the icon NAME "com.bringyour.network" resolves (window icon, tray, .desktop matching) // even when the app runs from a build tree or a relocated AppImage. Without -// this, set_from_icon_name("urnetwork") silently renders a BLANK image — +// this, set_from_icon_name("com.bringyour.network") silently renders a BLANK image — // which is exactly how the title-bar logo came out empty. Idempotent. void RegisterBrandIcons(); diff --git a/app/src/main.cpp b/app/src/main.cpp index 6eb543f..dc33838 100644 --- a/app/src/main.cpp +++ b/app/src/main.cpp @@ -78,7 +78,7 @@ int main(int argc, char** argv) { // the window with the app (and the hide-to-tray window keeps its identity). // HANDLES_OPEN: the single instance receives urnetwork:// deep links (wallet // callbacks) via signal_open — the .desktop registers x-scheme-handler/urnetwork. - auto app = Gtk::Application::create("network.ur.urnetwork", + auto app = Gtk::Application::create("com.bringyour.network", Gio::Application::Flags::HANDLES_OPEN); // Hold the application so it survives with only the tray (window hidden). @@ -98,7 +98,7 @@ int main(int argc, char** argv) { // missing face fails silently to the fallback font (windows parity). urnw::LoadBrandFonts(); urnw::EnsureBrandCss(); - // the icon NAME "urnetwork" must resolve for the window icon and the + // the icon NAME kAppIconName must resolve for the window icon and the // tray, wherever the app runs from urnw::RegisterBrandIcons(); diff --git a/docs/TESTING-CACHYOS.md b/docs/TESTING-CACHYOS.md index 3cc0da3..f3a9705 100644 --- a/docs/TESTING-CACHYOS.md +++ b/docs/TESTING-CACHYOS.md @@ -1094,7 +1094,7 @@ cd urnetwork-linux ### 10.2 Run it ```bash -flatpak run network.ur.urnetwork +flatpak run com.bringyour.network ``` ### 10.3 What is different from the AppImage — and what to test because of it @@ -1121,7 +1121,7 @@ inode, and every `connect()` fails with `EACCES` — which historically got repo as a group-membership problem. The app now detects this and says so instead. To test it: ```bash -flatpak run network.ur.urnetwork & # leave it running +flatpak run com.bringyour.network & # leave it running sudo systemctl restart urnetworkd # now press Connect in the Flatpak GUI ``` @@ -1187,7 +1187,7 @@ Plus, separately: * **The full `--selftest-egress` output and its exit code** (§5.2). Always. * **The app's own log** — the `connect:` lines. From a terminal launch that is `gui.log` from §7.1; otherwise `journalctl --user -b | grep -E 'urnetwork|connect:'`, or for the Flatpak, - `flatpak run network.ur.urnetwork 2>&1 | tee flatpak-gui.log`. + `flatpak run com.bringyour.network 2>&1 | tee flatpak-gui.log`. * **The installer's full output** (§4 dry-run and §6 real run). **Use `stat -c %C`, never `ls -Z`.** On a machine with no SELinux, `ls -Z` prints `?` and @@ -1208,7 +1208,7 @@ tunnel addresses (`169.254.x.x`) are fine and are useful to us. sudo systemctl stop urnetworkd sudo /usr/lib/urnetwork/uninstall.sh # add --purge to also remove state + group rm -f ~/.local/lib/urnetwork/URnetwork.AppImage -flatpak uninstall --user network.ur.urnetwork +flatpak uninstall --user com.bringyour.network ``` Then confirm the machine is back to normal: diff --git a/docs/linux_agent_help.md b/docs/linux_agent_help.md index 5606c9d..4508e4a 100644 --- a/docs/linux_agent_help.md +++ b/docs/linux_agent_help.md @@ -1803,7 +1803,7 @@ single-process model existed only under Snap and is dead). ~17.8k lines of C++ a `urnetwork_sdk.hpp` wrapper as Windows. Holds `urnet::DeviceRemote` + a control-socket client. Ships as a **user AppImage in a user-writable path** with a `/usr/bin/urnetwork` launcher-script indirection; never installed by a package (meson `install_rpath - '$ORIGIN/../lib'`). App id `network.ur.urnetwork`; GApplication HANDLES_OPEN deep links; + '$ORIGIN/../lib'`). App id `com.bringyour.network`; GApplication HANDLES_OPEN deep links; hide-to-tray; forces `ADW_COLOR_SCHEME_FORCE_DARK`; runtime-resolved `bindtextdomain`. - **`urnetworkd`** — root daemon, **no GTK of any kind** (glib GMainLoop + gio + json + SDK; `-static-libstdc++ -static-libgcc`). Holds `DeviceLocal(enable_rpc=true)`, opens @@ -1898,8 +1898,8 @@ replacing it, keeping its version/SDK-match enforcement. `urnetworkd.service` (Type=notify, After/Wants `network-pre.target`, `RuntimeDirectory=urnetwork` 0750, `StateDirectory`/`LogsDirectory` 0700, `NoNewPrivileges`, `ProtectHome`, `Restart=on-failure`/`RestartSec=2`), - `network.ur.urnetwork.desktop` (`Exec=urnetwork %u`, - `MimeType=x-scheme-handler/urnetwork;`, `StartupWMClass=network.ur.urnetwork`), + `com.bringyour.network.desktop` (`Exec=urnetwork %u`, + `MimeType=x-scheme-handler/urnetwork;`, `StartupWMClass=com.bringyour.network`), `urnetwork-launcher` (installed `/usr/bin/urnetwork`; search order `$URNETWORK_APPIMAGE` → `~/.local/lib/urnetwork/URnetwork.AppImage` → `~/Applications/URnetwork*.AppImage` newest → `/usr/lib/urnetwork/URnetwork.AppImage` → `urnetwork-gui` on PATH; exit 127 with install @@ -1947,7 +1947,7 @@ Files that ARE snap support (delete): - `linux:app/snap/snapcraft.yaml` — the whole file (114 lines). Already carries a SUPERSEDED banner ("NOT BUILT, NOT SHIPPED... describes the SINGLE-PROCESS architecture... Do not resurrect as-is"); it is also **broken** — it organizes `packaging/urnetwork.desktop`, - which was renamed to `network.ur.urnetwork.desktop`, and its `version: "0.0.0"` sed + which was renamed to `com.bringyour.network.desktop`, and its `version: "0.0.0"` sed stamping mechanism is gone. It was retained only because "Snap Store as secondary channel" was left open (`APPIMAGE.md` §8 item 5); that door is now closed. - `linux:app/.gitignore` lines 8–11: `*.snap`, `parts/`, `prime/`, `stage/`. @@ -2139,7 +2139,7 @@ EOL ~yearly — plan an annual runtime bump. - polkit: actions as XML `.policy` in `/usr/share/polkit-1/actions/`; the daemon checks each privileged request via `CheckAuthorization` (CLI form `pkcheck`), passing request variables so admins can write rules. Proposed action split (tiering idiom is standard; names are our - proposal): `network.ur.urnetwork.connect`/`.disconnect` → `allow_active=yes`; + proposal): `com.bringyour.network.connect`/`.disconnect` → `allow_active=yes`; `.install-daemon`, `.set-killswitch`, `.clear-blocking` → `auth_admin_keep`. Simpler alternative used by Mullvad/Tailscale: socket file mode + group membership (already the linux: model — group `urnetwork`); reasonable default, with polkit/pkexec reserved for the diff --git a/packaging/deb/nfpm.yaml b/packaging/deb/nfpm.yaml index f2d8605..4877706 100644 --- a/packaging/deb/nfpm.yaml +++ b/packaging/deb/nfpm.yaml @@ -97,7 +97,7 @@ contents: # APPIMAGE.md 11d). # # The polkit action file rides inside this same /usr tree, at - # usr/share/polkit-1/actions/network.ur.urnetwork.policy, put there by + # usr/share/polkit-1/actions/com.bringyour.network.policy, put there by # linux/packaging/lib/common.sh (assemble_daemon_root), which also asserts # its 0644 mode before the package is built. It is deliberately NOT given a # second explicit contents entry: nfpm would then emit the path twice, and @@ -112,8 +112,8 @@ contents: dst: /lib type: tree # Admin-editable integration files: conffiles, preserved on upgrade. - - src: "${PKGROOT}/etc/urnetwork/autostart/network.ur.urnetwork.desktop" - dst: /etc/urnetwork/autostart/network.ur.urnetwork.desktop + - src: "${PKGROOT}/etc/urnetwork/autostart/com.bringyour.network.desktop" + dst: /etc/urnetwork/autostart/com.bringyour.network.desktop type: config - src: "${PKGROOT}/etc/NetworkManager/conf.d/95-urnetwork.conf" dst: /etc/NetworkManager/conf.d/95-urnetwork.conf diff --git a/packaging/deb/scripts/postinst b/packaging/deb/scripts/postinst index ff6ebae..cc2e41b 100644 --- a/packaging/deb/scripts/postinst +++ b/packaging/deb/scripts/postinst @@ -57,7 +57,7 @@ case "$1" in # Which authority this machine will run under, said out loud. # # DETECTED BY LOOKING FOR POLKIT, NOT FOR OUR OWN ACTION FILE: dpkg has - # already unpacked /usr/share/polkit-1/actions/network.ur.urnetwork + # already unpacked /usr/share/polkit-1/actions/com.bringyour.network # .policy by the time this runs (and created that directory on the way), # so testing the file or the directory would report "polkit" on a box # that has never had it. polkitd is a Recommends, so apt pulls it in by @@ -88,7 +88,7 @@ case "$1" in # from the package tree; assert it rather than assume it, and check the # directory too (polkit does not police the directory, and whoever can # write it can drop in a file that redefines our defaults). - UR_POLICY=/usr/share/polkit-1/actions/network.ur.urnetwork.policy + UR_POLICY=/usr/share/polkit-1/actions/com.bringyour.network.policy if [ -f "${UR_POLICY}" ]; then chmod 0644 "${UR_POLICY}" 2>/dev/null || true chown root:root "${UR_POLICY}" 2>/dev/null || true diff --git a/packaging/distro-smoke.sh b/packaging/distro-smoke.sh index fdd923c..b8a064b 100755 --- a/packaging/distro-smoke.sh +++ b/packaging/distro-smoke.sh @@ -347,7 +347,7 @@ if have flatpak; then FP_REMOTES="${FP_REMOTES%% }" check 2.2 ok "flatpak" "present; remotes: ${FP_REMOTES:-}" note "No .flatpak bundle is published in the release yet either -- the manifest" - note "at packaging/flatpak/network.ur.urnetwork.yml builds one locally." + note "at packaging/flatpak/com.bringyour.network.yml builds one locally." else check 2.2 n/a "flatpak" "not installed (only matters for the GUI, never the daemon)" fi @@ -922,8 +922,8 @@ fi GUI_FOUND='' [ -x /usr/bin/urnetwork ] && GUI_FOUND="/usr/bin/urnetwork" [ -x /usr/local/bin/urnetwork ] && GUI_FOUND="${GUI_FOUND} /usr/local/bin/urnetwork" -if have flatpak && flatpak list --app --columns=application 2>/dev/null | grep -qx 'network.ur.urnetwork'; then - GUI_FOUND="${GUI_FOUND} flatpak:network.ur.urnetwork" +if have flatpak && flatpak list --app --columns=application 2>/dev/null | grep -qx 'com.bringyour.network'; then + GUI_FOUND="${GUI_FOUND} flatpak:com.bringyour.network" fi if [ -n "${GUI_FOUND}" ]; then check 9.6 ok "GUI" "${GUI_FOUND# }" diff --git a/packaging/flatpak/network.ur.urnetwork.yml b/packaging/flatpak/com.bringyour.network.yml similarity index 97% rename from packaging/flatpak/network.ur.urnetwork.yml rename to packaging/flatpak/com.bringyour.network.yml index 7bc1238..7be0e0a 100644 --- a/packaging/flatpak/network.ur.urnetwork.yml +++ b/packaging/flatpak/com.bringyour.network.yml @@ -23,8 +23,8 @@ # LOCAL INSTALL (the current target — Flathub submission comes later): # flatpak install -y flathub org.gnome.Platform//49 org.gnome.Sdk//49 # flatpak run org.flatpak.Builder --force-clean --user --install \ -# build-flatpak packaging/flatpak/network.ur.urnetwork.yml -# flatpak run network.ur.urnetwork +# build-flatpak packaging/flatpak/com.bringyour.network.yml +# flatpak run com.bringyour.network # # FOR FLATHUB, two changes are required and are deliberately NOT made here: # 1. `sources: [{type: dir, path: ../..}]` must become a git/archive source @@ -34,7 +34,7 @@ # redistribution; that audit (§7.17) must land before submission. # # SPDX-License-Identifier: MPL-2.0 -id: network.ur.urnetwork +id: com.bringyour.network runtime: org.gnome.Platform runtime-version: '49' sdk: org.gnome.Sdk @@ -192,9 +192,9 @@ modules: # no AppImage here and no /usr/bin to put a launcher in, so the Flatpak # runs the GUI binary directly. - desktop-file-edit --set-key=Exec --set-value="urnetwork-gui %u" - /app/share/applications/network.ur.urnetwork.desktop + /app/share/applications/com.bringyour.network.desktop - desktop-file-edit --remove-key=TryExec - /app/share/applications/network.ur.urnetwork.desktop + /app/share/applications/com.bringyour.network.desktop sources: # LOCAL SOURCE — replace with a git/archive source before any Flathub # submission (see the header). The path is relative to this manifest. diff --git a/packaging/lib/common.sh b/packaging/lib/common.sh index 2f58e19..f40bdae 100644 --- a/packaging/lib/common.sh +++ b/packaging/lib/common.sh @@ -124,11 +124,11 @@ assemble_daemon_root() { # --- static integration files: canonical sources in app/packaging ------- local src="${APP_PACKAGING_DIR}" local f - for f in urnetwork-launcher urnetworkd.service network.ur.urnetwork.desktop \ - autostart/network.ur.urnetwork.desktop 95-urnetwork.conf \ + for f in urnetwork-launcher urnetworkd.service com.bringyour.network.desktop \ + autostart/com.bringyour.network.desktop 95-urnetwork.conf \ 85-urnetwork-unmanaged.rules \ - icons/hicolor/48x48/apps/urnetwork.png \ - icons/hicolor/256x256/apps/urnetwork.png; do + icons/hicolor/48x48/apps/com.bringyour.network.png \ + icons/hicolor/256x256/apps/com.bringyour.network.png; do [ -f "${src}/${f}" ] || die "packaging source missing: ${src}/${f}" done @@ -140,17 +140,17 @@ assemble_daemon_root() { cp "${src}/urnetworkd.service" "${root}/lib/systemd/system/urnetworkd.service" install -d "${root}/usr/share/applications" - cp "${src}/network.ur.urnetwork.desktop" "${root}/usr/share/applications/" + cp "${src}/com.bringyour.network.desktop" "${root}/usr/share/applications/" install -d "${root}/usr/share/icons/hicolor/48x48/apps" \ "${root}/usr/share/icons/hicolor/256x256/apps" - cp "${src}/icons/hicolor/48x48/apps/urnetwork.png" \ - "${root}/usr/share/icons/hicolor/48x48/apps/urnetwork.png" - cp "${src}/icons/hicolor/256x256/apps/urnetwork.png" \ - "${root}/usr/share/icons/hicolor/256x256/apps/urnetwork.png" + cp "${src}/icons/hicolor/48x48/apps/com.bringyour.network.png" \ + "${root}/usr/share/icons/hicolor/48x48/apps/com.bringyour.network.png" + cp "${src}/icons/hicolor/256x256/apps/com.bringyour.network.png" \ + "${root}/usr/share/icons/hicolor/256x256/apps/com.bringyour.network.png" install -d "${root}/etc/urnetwork/autostart" - cp "${src}/autostart/network.ur.urnetwork.desktop" "${root}/etc/urnetwork/autostart/" + cp "${src}/autostart/com.bringyour.network.desktop" "${root}/etc/urnetwork/autostart/" install -d "${root}/etc/NetworkManager/conf.d" cp "${src}/95-urnetwork.conf" "${root}/etc/NetworkManager/conf.d/" @@ -174,11 +174,11 @@ assemble_daemon_root() { # world-writable .policy file, so a wrong mode here does not fail loudly, # it silently drops every action back to its built-in default. The mode # normalization below sets it; the assertion after it proves it. - [ -f "${PACKAGING_DIR}/polkit/network.ur.urnetwork.policy" ] || \ - die "packaging source missing: ${PACKAGING_DIR}/polkit/network.ur.urnetwork.policy" + [ -f "${PACKAGING_DIR}/polkit/com.bringyour.network.policy" ] || \ + die "packaging source missing: ${PACKAGING_DIR}/polkit/com.bringyour.network.policy" install -d "${root}/usr/share/polkit-1/actions" - cp "${PACKAGING_DIR}/polkit/network.ur.urnetwork.policy" \ - "${root}/usr/share/polkit-1/actions/network.ur.urnetwork.policy" + cp "${PACKAGING_DIR}/polkit/com.bringyour.network.policy" \ + "${root}/usr/share/polkit-1/actions/com.bringyour.network.policy" # Normalize modes: directories 0755; everything except the two # executables 0644 (shared libraries ship 0644 on Debian). @@ -191,7 +191,7 @@ assemble_daemon_root() { # and skips the file), and the visible symptom would be "every Connect asks # for an admin password" long after the build. local policy_mode - policy_mode="$(_file_mode_octal "${root}/usr/share/polkit-1/actions/network.ur.urnetwork.policy")" + policy_mode="$(_file_mode_octal "${root}/usr/share/polkit-1/actions/com.bringyour.network.policy")" [ "${policy_mode}" = '644' ] || \ die "polkit action file is mode ${policy_mode}, must be 644 (polkit ignores a group- or world-writable .policy)" } diff --git a/packaging/make-appimage.sh b/packaging/make-appimage.sh index a283e0d..e064097 100755 --- a/packaging/make-appimage.sh +++ b/packaging/make-appimage.sh @@ -188,22 +188,22 @@ done < <(find "${STAGING}/usr/share/locale" -type f -name 'urnetwork.mo' 2>/dev/ # Desktop entry: same app-id filename as the system one (wayland app_id -> # icon association), but Exec points at the bundled binary -- inside the # AppDir the launcher script does not exist. AppRun is what actually runs. -DESKTOP_SRC="${APP_PACKAGING_DIR}/network.ur.urnetwork.desktop" +DESKTOP_SRC="${APP_PACKAGING_DIR}/com.bringyour.network.desktop" [ -f "${DESKTOP_SRC}" ] || die "missing ${DESKTOP_SRC}" install -d "${APPDIR}/usr/share/applications" sed -e 's/^Exec=urnetwork /Exec=urnetwork-gui /' \ -e 's/^TryExec=urnetwork$/TryExec=urnetwork-gui/' \ - "${DESKTOP_SRC}" > "${APPDIR}/usr/share/applications/network.ur.urnetwork.desktop" -printf 'X-AppImage-Version=%s\n' "${VERSION}" >> "${APPDIR}/usr/share/applications/network.ur.urnetwork.desktop" -cp "${APPDIR}/usr/share/applications/network.ur.urnetwork.desktop" "${APPDIR}/network.ur.urnetwork.desktop" + "${DESKTOP_SRC}" > "${APPDIR}/usr/share/applications/com.bringyour.network.desktop" +printf 'X-AppImage-Version=%s\n' "${VERSION}" >> "${APPDIR}/usr/share/applications/com.bringyour.network.desktop" +cp "${APPDIR}/usr/share/applications/com.bringyour.network.desktop" "${APPDIR}/com.bringyour.network.desktop" install -d "${APPDIR}/usr/share/icons/hicolor/256x256/apps" "${APPDIR}/usr/share/icons/hicolor/48x48/apps" -install -m 0644 "${APP_PACKAGING_DIR}/icons/hicolor/256x256/apps/urnetwork.png" \ - "${APPDIR}/usr/share/icons/hicolor/256x256/apps/urnetwork.png" -install -m 0644 "${APP_PACKAGING_DIR}/icons/hicolor/48x48/apps/urnetwork.png" \ - "${APPDIR}/usr/share/icons/hicolor/48x48/apps/urnetwork.png" -install -m 0644 "${APP_PACKAGING_DIR}/icons/hicolor/256x256/apps/urnetwork.png" "${APPDIR}/urnetwork.png" -cp "${APPDIR}/urnetwork.png" "${APPDIR}/.DirIcon" +install -m 0644 "${APP_PACKAGING_DIR}/icons/hicolor/256x256/apps/com.bringyour.network.png" \ + "${APPDIR}/usr/share/icons/hicolor/256x256/apps/com.bringyour.network.png" +install -m 0644 "${APP_PACKAGING_DIR}/icons/hicolor/48x48/apps/com.bringyour.network.png" \ + "${APPDIR}/usr/share/icons/hicolor/48x48/apps/com.bringyour.network.png" +install -m 0644 "${APP_PACKAGING_DIR}/icons/hicolor/256x256/apps/com.bringyour.network.png" "${APPDIR}/com.bringyour.network.png" +cp "${APPDIR}/com.bringyour.network.png" "${APPDIR}/.DirIcon" install -m 0755 "${SCRIPT_DIR}/appimage/AppRun" "${APPDIR}/AppRun" diff --git a/packaging/make-flatpak.sh b/packaging/make-flatpak.sh index c92da22..722431a 100755 --- a/packaging/make-flatpak.sh +++ b/packaging/make-flatpak.sh @@ -5,7 +5,7 @@ # /dev/net/tun, no CAP_NET_ADMIN and no way to install a system unit. The app # reaches the HOST's urnetworkd over /run/urnetwork/control.sock, which the # manifest exposes read-only (Trayscale's pattern). Install the daemon from the -# native .deb/.rpm — see packaging/flatpak/network.ur.urnetwork.yml for the +# native .deb/.rpm — see packaging/flatpak/com.bringyour.network.yml for the # full reasoning. # # Works on an immutable host (Bazzite/Silverblue): flatpak-builder itself runs @@ -20,8 +20,8 @@ set -euo pipefail REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" -MANIFEST="${MANIFEST:-$REPO_ROOT/packaging/flatpak/network.ur.urnetwork.yml}" -APP_ID="network.ur.urnetwork" +MANIFEST="${MANIFEST:-$REPO_ROOT/packaging/flatpak/com.bringyour.network.yml}" +APP_ID="com.bringyour.network" RUNTIME_VERSION="${RUNTIME_VERSION:-49}" # The build dir MUST live inside the repo. flatpak-builder runs sandboxed and # gets a PRIVATE /tmp, so a build dir under the host's /tmp vanishes between diff --git a/packaging/polkit/network.ur.urnetwork.policy b/packaging/polkit/com.bringyour.network.policy similarity index 95% rename from packaging/polkit/network.ur.urnetwork.policy rename to packaging/polkit/com.bringyour.network.policy index b33e2ba..d6c0c5f 100644 --- a/packaging/polkit/network.ur.urnetwork.policy +++ b/packaging/polkit/com.bringyour.network.policy @@ -2,7 +2,7 @@ - + Connect or disconnect the URnetwork VPN Authentication is required to route this device's traffic through URnetwork. @@ -81,7 +81,7 @@ a site can require a password for THIS and not for Connect. The kill switch can cut every user on the box off the network, which is why it is worth its own knob. --> - + Change the URnetwork kill switch Authentication is required to change whether this device's traffic is blocked when the URnetwork connection drops. @@ -95,7 +95,7 @@ DIFFERENT uid started. This is the action that replaces "everyone in the urnetwork group is interchangeable": any active local user may run their own tunnel, nobody takes over someone else's without proving admin. --> - + Take over a URnetwork connection started by another user Authentication is required to take over the URnetwork connection another user started on this device. @@ -111,7 +111,7 @@ own. Same default trust as control-tunnel (if you can silently start a tunnel you can read its log), separate id so it can be tightened alone. The daemon ALSO refuses it across uids: see kCodeAuthNotTunnelOwner. --> - + Read the URnetwork service log Authentication is required to read the URnetwork service log. diff --git a/packaging/rpm/nfpm.yaml b/packaging/rpm/nfpm.yaml index 1e43b3b..4ba2282 100644 --- a/packaging/rpm/nfpm.yaml +++ b/packaging/rpm/nfpm.yaml @@ -153,8 +153,8 @@ contents: # Admin-editable integration files. %config(noreplace) is the rpm equivalent # of a dpkg conffile: an edited file is preserved and the package's version # lands beside it as .rpmnew. - - src: "${PKGROOT}/etc/urnetwork/autostart/network.ur.urnetwork.desktop" - dst: /etc/urnetwork/autostart/network.ur.urnetwork.desktop + - src: "${PKGROOT}/etc/urnetwork/autostart/com.bringyour.network.desktop" + dst: /etc/urnetwork/autostart/com.bringyour.network.desktop type: "config|noreplace" - src: "${PKGROOT}/etc/NetworkManager/conf.d/95-urnetwork.conf" dst: /etc/NetworkManager/conf.d/95-urnetwork.conf diff --git a/packaging/tarball/install.sh b/packaging/tarball/install.sh index 8b7ec98..2164aa6 100755 --- a/packaging/tarball/install.sh +++ b/packaging/tarball/install.sh @@ -162,7 +162,7 @@ DNS_WARNING='' # legacy `urnetwork` group check stays in force. POLKIT_PRESENT=0 POLKIT_VERSION='' -POLICY_REL='/usr/share/polkit-1/actions/network.ur.urnetwork.policy' +POLICY_REL='/usr/share/polkit-1/actions/com.bringyour.network.policy' log() { printf '%s\n' "$*"; } note() { printf -- '- %s\n' "$*"; } @@ -1339,7 +1339,7 @@ if [ "${POLKIT_PRESENT}" = 1 ]; then # # MEASURED on Bazzite: after a clean install the daemon correctly # reported `authorization: polkit`, and `pkaction --action-id - # network.ur.urnetwork.control-tunnel` answered "No action with action + # com.bringyour.network.control-tunnel` answered "No action with action # id" -- polkitd had been up since the previous boot, two days earlier. # Every authorization check would have been made against an action # polkit did not know, so Connect would have failed on a host the diff --git a/packaging/tarball/uninstall.sh b/packaging/tarball/uninstall.sh index 34a32f6..359c741 100755 --- a/packaging/tarball/uninstall.sh +++ b/packaging/tarball/uninstall.sh @@ -152,12 +152,12 @@ ${BIN_DIR}/urnetwork /lib/systemd/system/urnetworkd.service /usr/lib/systemd/system/urnetworkd.service /etc/systemd/system/urnetworkd.service -${SHARE_DIR}/applications/network.ur.urnetwork.desktop -${SHARE_DIR}/metainfo/network.ur.urnetwork.metainfo.xml -${SHARE_DIR}/icons/hicolor/48x48/apps/urnetwork.png -${SHARE_DIR}/icons/hicolor/256x256/apps/urnetwork.png -${SHARE_DIR}/polkit-1/actions/network.ur.urnetwork.policy -/etc/urnetwork/autostart/network.ur.urnetwork.desktop +${SHARE_DIR}/applications/com.bringyour.network.desktop +${SHARE_DIR}/metainfo/com.bringyour.network.metainfo.xml +${SHARE_DIR}/icons/hicolor/48x48/apps/com.bringyour.network.png +${SHARE_DIR}/icons/hicolor/256x256/apps/com.bringyour.network.png +${SHARE_DIR}/polkit-1/actions/com.bringyour.network.policy +/etc/urnetwork/autostart/com.bringyour.network.desktop /etc/NetworkManager/conf.d/95-urnetwork.conf /etc/udev/rules.d/85-urnetwork-unmanaged.rules" # plus whole directories swept below: ${SHARE_DIR}/urnetwork, locale .mo