10
9
Fork
You've already forked linux-app
14

Installing eduVPN via Flatpak or Appimage #660

Closed
opened 2025年09月30日 13:57:01 +02:00 by thms-k · 13 comments

Hi,
since I'm on an atomic distro (Bluefin), I'd love to see a Flatpak or AppImage version of eduVPN. This would avoid the hassle with layering apps to the system.

Thanks!

Hi, since I'm on an atomic distro (Bluefin), I'd love to see a Flatpak or AppImage version of eduVPN. This would avoid the hassle with layering apps to the system. Thanks!

Would you like to submit packages for this? #537

Supporting this is not trivial due to the flatpak sandbox. Personally I am not interested in an AppImage, but PRs welcome :)

Would you like to submit packages for this? https://codeberg.org/eduVPN/linux-app/issues/537 Supporting this is not trivial due to the flatpak sandbox. Personally I am not interested in an AppImage, but PRs welcome :)
Author
Copy link

Sorry, I can't code. I'm just a user who thought a Flatpak version would be a good idea ;b I can test things though.

Sorry, I can't code. I'm just a user who thought a Flatpak version would be a good idea ;b I can test things though.

I personally don't have the time to support this

I personally don't have the time to support this

please someone comment if you want to pick this up

please someone comment if you want to pick this up
Contributor
Copy link

@jwijenbergh I am moving my daily driver from ubuntu to Bluefin, which is mainly flatpak based. I'd like to give it a go.

@jwijenbergh I am moving my daily driver from ubuntu to Bluefin, which is mainly flatpak based. I'd like to give it a go.

Thanks! Let me know if you have any questions or an update regarding this

Thanks! Let me know if you have any questions or an update regarding this
Contributor
Copy link

After a bit of fiddling, eduVPN 4.6.0 runs as a flatpak, thanks to the extensive notes in #537

Wireguard just works out of the box, but when trying/connecting to an openvpn profile, there is an error on the console, resulting in a state machine messup:

time=2026年03月11日T13:18:32.927+01:00 level=DEBUG msg="FSM transition" old=GotConfig new=Connecting
2026年03月11日 13:18:32,929 - MainThread - ERROR - /app/lib/python3.13/site-packages/eduvpn/utils.py - utils.py:28 - Unhandled exception
Traceback (most recent call last):
 File "/app/lib/python3.13/site-packages/eduvpn/app.py", line 425, in connect
 connection.connect(
 ~~~~~~~~~~~~~~~~~~^
 self.nm_manager,
 ^^^^^^^^^^^^^^^^
 ...<4 lines>...
 on_connect,
 ^^^^^^^^^^^
 )
 ^
 File "/app/lib/python3.13/site-packages/eduvpn/connection.py", line 166, in connect
 manager.start_openvpn_connection(
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
 self.config_str,
 ^^^^^^^^^^^^^^^^
 ...<2 lines>...
 callback=callback,
 ^^^^^^^^^^^^^^^^^^
 )
 ^
 File "/app/lib/python3.13/site-packages/eduvpn/nm.py", line 412, in start_openvpn_connection
 new_con = self.import_ovpn(ovpn)
 File "/app/lib/python3.13/site-packages/eduvpn/nm.py", line 366, in import_ovpn
 connection = self.ovpn_import(target)
 File "/app/lib/python3.13/site-packages/eduvpn/nm.py", line 351, in ovpn_import
 raise Exception(f"Expected one openvpn VPN plugins, got: {len(vpn_infos)}")
Exception: Expected one openvpn VPN plugins, got: 0
After a bit of fiddling, eduVPN 4.6.0 runs as a flatpak, thanks to the extensive notes in #537 Wireguard just works out of the box, but when trying/connecting to an openvpn profile, there is an error on the console, resulting in a state machine messup: ``` time=2026年03月11日T13:18:32.927+01:00 level=DEBUG msg="FSM transition" old=GotConfig new=Connecting 2026年03月11日 13:18:32,929 - MainThread - ERROR - /app/lib/python3.13/site-packages/eduvpn/utils.py - utils.py:28 - Unhandled exception Traceback (most recent call last): File "/app/lib/python3.13/site-packages/eduvpn/app.py", line 425, in connect connection.connect( ~~~~~~~~~~~~~~~~~~^ self.nm_manager, ^^^^^^^^^^^^^^^^ ...<4 lines>... on_connect, ^^^^^^^^^^^ ) ^ File "/app/lib/python3.13/site-packages/eduvpn/connection.py", line 166, in connect manager.start_openvpn_connection( ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ self.config_str, ^^^^^^^^^^^^^^^^ ...<2 lines>... callback=callback, ^^^^^^^^^^^^^^^^^^ ) ^ File "/app/lib/python3.13/site-packages/eduvpn/nm.py", line 412, in start_openvpn_connection new_con = self.import_ovpn(ovpn) File "/app/lib/python3.13/site-packages/eduvpn/nm.py", line 366, in import_ovpn connection = self.ovpn_import(target) File "/app/lib/python3.13/site-packages/eduvpn/nm.py", line 351, in ovpn_import raise Exception(f"Expected one openvpn VPN plugins, got: {len(vpn_infos)}") Exception: Expected one openvpn VPN plugins, got: 0 ```

@WebSpider wrote in #660 (comment):

After a bit of fiddling, eduVPN 4.6.0 runs as a flatpak, thanks to the extensive notes in #537

Wireguard just works out of the box, but when trying/connecting to an openvpn profile, there is an error on the console, resulting in a state machine messup:

time=2026年03月11日T13:18:32.927+01:00 level=DEBUG msg="FSM transition" old=GotConfig new=Connecting
2026年03月11日 13:18:32,929 - MainThread - ERROR - /app/lib/python3.13/site-packages/eduvpn/utils.py - utils.py:28 - Unhandled exception
Traceback (most recent call last):
 File "/app/lib/python3.13/site-packages/eduvpn/app.py", line 425, in connect
 connection.connect(
 ~~~~~~~~~~~~~~~~~~^
 self.nm_manager,
 ^^^^^^^^^^^^^^^^
 ...<4 lines>...
 on_connect,
 ^^^^^^^^^^^
 )
 ^
 File "/app/lib/python3.13/site-packages/eduvpn/connection.py", line 166, in connect
 manager.start_openvpn_connection(
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
 self.config_str,
 ^^^^^^^^^^^^^^^^
 ...<2 lines>...
 callback=callback,
 ^^^^^^^^^^^^^^^^^^
 )
 ^
 File "/app/lib/python3.13/site-packages/eduvpn/nm.py", line 412, in start_openvpn_connection
 new_con = self.import_ovpn(ovpn)
 File "/app/lib/python3.13/site-packages/eduvpn/nm.py", line 366, in import_ovpn
 connection = self.ovpn_import(target)
 File "/app/lib/python3.13/site-packages/eduvpn/nm.py", line 351, in ovpn_import
 raise Exception(f"Expected one openvpn VPN plugins, got: {len(vpn_infos)}")
Exception: Expected one openvpn VPN plugins, got: 0

This seems like it cannot find the NetworkManager-openvpn plugin. Maybe the flatpak needs that as a dependency?

@WebSpider wrote in https://codeberg.org/eduVPN/linux-app/issues/660#issuecomment-11514250: > After a bit of fiddling, eduVPN 4.6.0 runs as a flatpak, thanks to the extensive notes in #537 > > Wireguard just works out of the box, but when trying/connecting to an openvpn profile, there is an error on the console, resulting in a state machine messup: > > ```text > time=2026年03月11日T13:18:32.927+01:00 level=DEBUG msg="FSM transition" old=GotConfig new=Connecting > 2026年03月11日 13:18:32,929 - MainThread - ERROR - /app/lib/python3.13/site-packages/eduvpn/utils.py - utils.py:28 - Unhandled exception > Traceback (most recent call last): > File "/app/lib/python3.13/site-packages/eduvpn/app.py", line 425, in connect > connection.connect( > ~~~~~~~~~~~~~~~~~~^ > self.nm_manager, > ^^^^^^^^^^^^^^^^ > ...<4 lines>... > on_connect, > ^^^^^^^^^^^ > ) > ^ > File "/app/lib/python3.13/site-packages/eduvpn/connection.py", line 166, in connect > manager.start_openvpn_connection( > ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ > self.config_str, > ^^^^^^^^^^^^^^^^ > ...<2 lines>... > callback=callback, > ^^^^^^^^^^^^^^^^^^ > ) > ^ > File "/app/lib/python3.13/site-packages/eduvpn/nm.py", line 412, in start_openvpn_connection > new_con = self.import_ovpn(ovpn) > File "/app/lib/python3.13/site-packages/eduvpn/nm.py", line 366, in import_ovpn > connection = self.ovpn_import(target) > File "/app/lib/python3.13/site-packages/eduvpn/nm.py", line 351, in ovpn_import > raise Exception(f"Expected one openvpn VPN plugins, got: {len(vpn_infos)}") > Exception: Expected one openvpn VPN plugins, got: 0 > ``` This seems like it cannot find the NetworkManager-openvpn plugin. Maybe the flatpak needs that as a dependency?
Contributor
Copy link

Yeah, I added that, but maybe the paths are wrong. Thanks for the suggestion, i'll keep you posted.

Yeah, I added that, but maybe the paths are wrong. Thanks for the suggestion, i'll keep you posted.
Contributor
Copy link

OK, I think I found the problem.

While calling NM.VpnPluginInfo.list_load() in nm.py from the sandbox, the polkit rules that allow elevation of privileges do not seem to apply. The call results in a permission denied. A simulation from within the sandbox:

[📦 org.eduvpn.www ~]$ gdbus call \
 --system \
 --dest org.freedesktop.NetworkManager \
 --object-path /org/freedesktop/NetworkManager/VpnManager \
 --method org.freedesktop.NetworkManager.VpnManager.GetVpnPlugins
Error: GDBus.Error:org.freedesktop.DBus.Error.AccessDenied: Sender is not authorized to send message

There seem to be two ways to correct this:

  1. Let flatpak break out of the sandbox specifying a command to run using flatpak-spawn
  2. Let the flatpak drop user-scoped polkit config files to allow the sandbox to run the command

but actually I am hoping for a third option, that allows the flatpak to specify it should be exempted under existing polkit rules.

Or maybe as a 4th option patch the client to just assume the plugin is present or in general behave more like eovpn does in https://github.com/jkotra/eOVPN/blob/master/eovpn/connection_manager.py

OK, I think I found the problem. While calling `NM.VpnPluginInfo.list_load()` in `nm.py` from the sandbox, the polkit rules that allow elevation of privileges do not seem to apply. The call results in a permission denied. A simulation from within the sandbox: ``` [📦 org.eduvpn.www ~]$ gdbus call \ --system \ --dest org.freedesktop.NetworkManager \ --object-path /org/freedesktop/NetworkManager/VpnManager \ --method org.freedesktop.NetworkManager.VpnManager.GetVpnPlugins Error: GDBus.Error:org.freedesktop.DBus.Error.AccessDenied: Sender is not authorized to send message ``` There seem to be two ways to correct this: 1) Let flatpak break out of the sandbox specifying a command to run using `flatpak-spawn` 2) Let the flatpak drop user-scoped polkit config files to allow the sandbox to run the command but actually I am hoping for a third option, that allows the flatpak to specify it should be exempted under existing polkit rules. Or maybe as a 4th option patch the client to just assume the plugin is present or in general behave more like eovpn does in https://github.com/jkotra/eOVPN/blob/master/eovpn/connection_manager.py

@WebSpider can you post the final flatpak configuration that you used here? I would be interested in trying this as well.

@WebSpider can you post the final flatpak configuration that you used here? I would be interested in trying this as well.

Hi,

I'm also interested in a Flatpak for Bluefin. I can try to contribute to this as well. Should we try to add this logic to this repo or should we start a eduvpn-flatpak repo for this purpose?

Hi, I'm also interested in a Flatpak for Bluefin. I can try to contribute to this as well. Should we try to add this logic to this repo or should we start a eduvpn-flatpak repo for this purpose?
Contributor
Copy link

I have a flatpak working, that you can install as a user. More details here: #693 (comment)

Cleanup is needed, it's a mess at the moment, but I will setup an eduvpn-flatpak repo on my account on codeberg for this while we discuss how to move this further.

I will be at the EduVPN BoF at TNC26.

I have a flatpak working, that you can install as a user. More details here: https://codeberg.org/eduVPN/linux-app/issues/693#issuecomment-14495400 Cleanup is needed, it's a mess at the moment, but I will setup an eduvpn-flatpak repo on my account on codeberg for this while we discuss how to move this further. I will be at the EduVPN BoF at TNC26.
Sign in to join this conversation.
No Branch/Tag specified
master
upstream-deb
openvpn-persistent
1.x
4.7.2
4.7.1
4.7.0
4.6.0
4.5.1
4.5.0
4.4.99.0
4.4.0
4.3.1
4.3.0
4.2.99.1
4.2.99.0
4.2.1
4.2.0
4.1.99.0
4.1.3
4.1.2
4.1.1
4.1.0
3.1.1
4.0.1
4.0.0
pr-3.3.1
pr-3.3.0
pr-3.2.0
3.1.0
3.0.0
2.2.1
2.2.0
2.1.0
2.0.0
1.1
1.0.3
1.0.2
1.0.1
1.0rc17
1.0rc16
1.0rc15
1.0rc14
1.0rc13
1.0rc12
1.0rc11
1.0rc10
1.0rc9
1.0rc8
1.0rc7
1.0rc6
1.0rc5
1.0rc4
1.0rc3
1.0rc2
1.0rc1
0.8
0.7.2
0.7.1
0.7
0.6.1
0.6
0.5.1
0.5
0.3
0.2.1
0.2
0.1.1
0.1
Milestone
Clear milestone
No items
No milestone
Projects
Clear projects
No items
No project
Assignees
Clear assignees
No assignees
5 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
eduVPN/linux-app#660
Reference in a new issue
eduVPN/linux-app
No description provided.
Delete branch "%!s()"

Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?