Package: network-manager-gnome Version: 1.20.0-2 Severity: important Tags: patch
Dear Maintainer(s), The network-manager-applet version in Debian bullseye has support to edit Wireguard connections, which is a good thing (it was introduced upstream in version 1.18.0). However, it is not possible to enable or disable a Wireguard connection in the applet. This is currently only possible through nmcli (a command-line tool), which defeats the purpose of using a graphical tool like nm-applet. This has been fixed upstream but didn't make it in time for the recent 1.20.0 release that Debian is currently using. Since the fix involves only minor code changes on top of 1.20.0, I suggest backporting the upstream patch in Debian. This will ensure that Wireguard support is complete and that it can be used fully graphically in Debian bullseye. I am attaching the upstream patch, here are the upstream references: https://gitlab.gnome.org/GNOME/network-manager-applet/-/commit/514d033b8d0b9e411ba7e878ddbfa338c6720e6f https://gitlab.gnome.org/GNOME/network-manager-applet/-/merge_requests/95 Thank you, Baptiste -- System Information: Debian Release: bullseye/sid APT prefers testing APT policy: (500, 'testing') Architecture: amd64 (x86_64) Kernel: Linux 5.9.0-2-amd64 (SMP w/4 CPU threads) Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8), LANGUAGE=en_US:en Shell: /bin/sh linked to /usr/bin/dash Init: systemd (via /run/systemd/system) LSM: AppArmor: enabled Versions of packages network-manager-gnome depends on: ii dbus-user-session [default-dbus-session-bus] 1.12.20-1 ii dbus-x11 [dbus-session-bus] 1.12.20-1 ii gnome-shell [polkit-1-auth-agent] 3.38.3-2 ii libatk1.0-0 2.36.0-2 ii libayatana-appindicator3-1 0.5.5-2 ii libc6 2.31-9 ii libcairo2 1.16.0-5 ii libgdk-pixbuf-2.0-0 2.42.2+dfsg-1 ii libglib2.0-0 2.66.7-1 ii libgtk-3-0 3.24.24-1 ii libjansson4 2.13.1-1.1 ii libmm-glib0 1.14.10-0.1 ii libnm0 1.28.0-2+b1 ii libnma0 1.8.30-1 ii libnotify4 0.7.9-3 ii libpango-1.0-0 1.46.2-3 ii libpangocairo-1.0-0 1.46.2-3 ii libsecret-1-0 0.20.4-2 ii libselinux1 3.1-3 ii network-manager 1.28.0-2+b1 Versions of packages network-manager-gnome recommends: ii gnome-keyring 3.36.0-1 ii gnome-shell [notification-daemon] 3.38.3-2 ii iso-codes 4.5.0-1 ii mobile-broadband-provider-info 20201225-1 ii notification-daemon 3.20.0-4 Versions of packages network-manager-gnome suggests: pn network-manager-openconnect-gnome <none> ii network-manager-openvpn-gnome 1.8.12-2 pn network-manager-pptp-gnome <none> pn network-manager-vpnc-gnome <none> -- no debconf information
>From 514d033b8d0b9e411ba7e878ddbfa338c6720e6f Mon Sep 17 00:00:00 2001 From: Beniamino Galvani <bgalv...@redhat.com> Date: Thu, 11 Feb 2021 09:45:00 +0100 Subject: [PATCH] applet: support activating WireGuard connections as VPNs Display WireGuard connections in the VPN submenu and allow [de]activating them. https://gitlab.gnome.org/GNOME/network-manager-applet/-/issues/77 --- src/applet.c | 65 ++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 45 insertions(+), 20 deletions(-) diff --git a/src/applet.c b/src/applet.c index 8ebac755..8cf6dc43 100644 --- a/src/applet.c +++ b/src/applet.c @@ -875,6 +875,13 @@ applet_is_any_device_activating (NMApplet *applet) return FALSE; } +static gboolean +connection_is_vpn (NMConnection *connection) +{ + return nm_connection_is_type (connection, NM_SETTING_VPN_SETTING_NAME) + || nm_connection_is_type (connection, NM_SETTING_WIREGUARD_SETTING_NAME); +} + static gboolean applet_is_any_vpn_activating (NMApplet *applet) { @@ -1062,10 +1069,13 @@ nma_menu_vpn_item_clicked (GtkMenuItem *item, gpointer user_data) return; } - active = applet_get_default_active_connection (applet, &device, FALSE); - if (!active || !device) { - g_warning ("%s: no active connection or device.", __func__); - return; + if (nm_connection_is_type (connection, NM_SETTING_VPN_SETTING_NAME)) { + active = applet_get_default_active_connection (applet, &device, FALSE); + if (!active || !device) { + /* FIXME: show a UI notification ? */ + g_warning ("%s: no active connection or device.", __func__); + return; + } } info = g_malloc0 (sizeof (VPNActivateInfo)); @@ -1076,7 +1086,7 @@ nma_menu_vpn_item_clicked (GtkMenuItem *item, gpointer user_data) nm_client_activate_connection_async (applet->nm_client, connection, device, - nm_object_get_path (NM_OBJECT (active)), + active ? nm_object_get_path (NM_OBJECT (active)) : NULL, NULL, activate_vpn_cb, info); @@ -1112,6 +1122,25 @@ nma_menu_add_vpn_item_activate (GtkMenuItem *item, gpointer user_data) g_spawn_async (NULL, (gchar **) argv, NULL, 0, NULL, NULL, NULL, NULL); } +static NMVpnConnectionState +ac_state_to_vpn_state (NMActiveConnectionState ac_state) +{ + switch (ac_state) { + case NM_ACTIVE_CONNECTION_STATE_UNKNOWN: + return NM_VPN_CONNECTION_STATE_UNKNOWN; + case NM_ACTIVE_CONNECTION_STATE_ACTIVATING: + return NM_VPN_CONNECTION_STATE_PREPARE; + case NM_ACTIVE_CONNECTION_STATE_ACTIVATED: + case NM_ACTIVE_CONNECTION_STATE_DEACTIVATING: + return NM_VPN_CONNECTION_STATE_ACTIVATED; + case NM_ACTIVE_CONNECTION_STATE_DEACTIVATED: + return NM_VPN_CONNECTION_STATE_DISCONNECTED; + } + + nm_assert_not_reached (); + return NM_VPN_CONNECTION_STATE_UNKNOWN; +} + /* * applet_get_active_vpn_connection: * @@ -1121,7 +1150,7 @@ nma_menu_add_vpn_item_activate (GtkMenuItem *item, gpointer user_data) */ static NMActiveConnection * applet_get_active_vpn_connection (NMApplet *applet, - NMVpnConnectionState *out_state) + NMVpnConnectionState *out_state) { const GPtrArray *active_list; NMActiveConnection *ret = NULL; @@ -1132,7 +1161,6 @@ applet_get_active_vpn_connection (NMApplet *applet, for (i = 0; active_list && (i < active_list->len); i++) { NMActiveConnection *candidate; NMConnection *connection; - NMSettingConnection *s_con; candidate = g_ptr_array_index (active_list, i); @@ -1140,17 +1168,20 @@ applet_get_active_vpn_connection (NMApplet *applet, if (!connection) continue; - s_con = nm_connection_get_setting_connection (connection); - if (!s_con) + if (!connection_is_vpn (connection)) continue; - if (!strcmp (nm_setting_connection_get_connection_type (s_con), NM_SETTING_VPN_SETTING_NAME)) { - ret = candidate; + ret = candidate; + if (nm_connection_is_type (connection, NM_SETTING_VPN_SETTING_NAME)) { state = nm_vpn_connection_get_vpn_state (NM_VPN_CONNECTION (candidate)); + } else { + NMActiveConnectionState ac_state; - if (state != NM_VPN_CONNECTION_STATE_ACTIVATED) - break; + ac_state = nm_active_connection_get_state (candidate); + state = ac_state_to_vpn_state (ac_state); } + if (state != NM_VPN_CONNECTION_STATE_ACTIVATED) + break; } if (ret && out_state) @@ -1453,15 +1484,9 @@ get_vpn_connections (NMApplet *applet) for (i = 0; i < all_connections->len; i++) { NMConnection *connection = NM_CONNECTION (all_connections->pdata[i]); - if (!nm_connection_is_type (connection, NM_SETTING_VPN_SETTING_NAME)) + if (!connection_is_vpn (connection)) continue; - if (!nm_connection_get_setting_vpn (connection)) { - g_warning ("%s: VPN connection '%s' didn't have required vpn setting.", __func__, - nm_connection_get_id (connection)); - continue; - } - g_ptr_array_add (vpn_connections, g_object_ref (connection)); } -- GitLab