ProtonVPN / linux-cli

Official ProtonVPN Linux app (CLI)
https://protonvpn.com/download-linux
GNU General Public License v3.0
332 stars 42 forks source link

Annoying dependency on GTK and Gnome #87

Open davxy opened 1 year ago

davxy commented 1 year ago

I'm using protonvpn-cli in a headless environment and I would like to pull in the bare minimum wrt dependencies.

I see that your cli application indirectly depends on a bunch of gnome and X related stuff.

For example this is one dependency path.

protonvpn-cli
    ->python3-protonvpn-nm-lib
        -> network-manager-openvpn-gnome
            -> libgtk-3.0
                -> adwaita-icon-them
                -> ...

In the end looks like the problematic dependency is network-manager-openvpn-gnome in python3-protonvpn-nm-lib

While I understand such a dependency for the GUI app, I find this annoying for the CLI.

It's possible to split python3-protonvpn-nm-lib in two separate libraries? Like one lower level lib for the CLI and another for the GUI

Thank you

qjerome commented 1 year ago

I'd like to add my contribution to this.

I am using Archlinux without desktop environment, only i3 as window manager and it was literally a nightmare to try to make protonvpn-cli work. After installing all the graphical dependencies and started to modify my xinit scripts to make all that run together, I stopped because I couldn't make DBUS work with gnome-keyring ! I think all that works smoothly when you use gnome based desktop environment but when you are not ... it is fairly complicated.

As @davxy commented, I think there are too much dependencies on graphical libraries and tools, which is not what user's would expect using a CLI tool. The expected behaviour of a CLI tool is to be able to run in terminal only.

shift-runstop commented 1 year ago

Massively agree on this, out of curiosity were you stuck with this error before installing all the graphical dependencies, I am also using i3 quite minimally.

When trying to log in with protonvpn-cli I get this err:

Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/protonvpn_nm_lib/core/keyring/linuxkeyring.py", line 21, in __getitem__
    stored_data = self.__keyring_backend.get_password(
  File "/usr/lib/python3/dist-packages/keyring/backends/SecretService.py", line 78, in get_password
    collection = self.get_preferred_collection()
  File "/usr/lib/python3/dist-packages/keyring/backends/SecretService.py", line 61, in get_preferred_collection
    collection = secretstorage.get_default_collection(bus)
  File "/usr/lib/python3/dist-packages/secretstorage/collection.py", line 177, in get_default_collection
    return Collection(connection)
  File "/usr/lib/python3/dist-packages/secretstorage/collection.py", line 45, in __init__
    self._collection.get_property('Label')
  File "/usr/lib/python3/dist-packages/secretstorage/util.py", line 67, in get_property
    (signature, value), = self.send_and_get_reply(msg)
  File "/usr/lib/python3/dist-packages/secretstorage/util.py", line 48, in send_and_get_reply
    raise DBusErrorResponse(resp_msg)
jeepney.wrappers.DBusErrorResponse: [org.freedesktop.DBus.Error.TimedOut] ("Failed to activate service 'org.freedesktop.secrets': timed out (service_start_timeout=120000ms)",)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/bin/protonvpn-cli", line 11, in <module>
    load_entry_point('protonvpn-cli==3.13.0', 'console_scripts', 'protonvpn-cli')()
  File "/usr/lib/python3/dist-packages/protonvpn_cli/main.py", line 21, in main
    ProtonVPNCLI()
  File "/usr/lib/python3/dist-packages/protonvpn_cli/cli.py", line 65, in __init__
    res = getattr(self, args.command)()
  File "/usr/lib/python3/dist-packages/protonvpn_cli/cli.py", line 162, in login
    return self.cli_wrapper.login(args.username)
  File "/usr/lib/python3/dist-packages/protonvpn_cli/cli_wrapper.py", line 63, in login
    if self.protonvpn.check_session_exists():
  File "/usr/lib/python3/dist-packages/protonvpn_nm_lib/api.py", line 356, in check_session_exists
    return self._env.api_session.is_valid
  File "/usr/lib/python3/dist-packages/protonvpn_nm_lib/core/environment.py", line 56, in api_session
    self.__api_session = APISession()
  File "/usr/lib/python3/dist-packages/protonvpn_nm_lib/core/session/session.py", line 240, in __init__
    self.__keyring_load_session()
  File "/usr/lib/python3/dist-packages/protonvpn_nm_lib/core/session/session.py", line 269, in __keyring_load_session
    keyring_data_user = ExecutionEnvironment().keyring[
  File "/usr/lib/python3/dist-packages/protonvpn_nm_lib/core/keyring/linuxkeyring.py", line 32, in __getitem__
    raise exceptions.KeyringError(e)
protonvpn_nm_lib.exceptions.KeyringError: [org.freedesktop.DBus.Error.TimedOut] ("Failed to activate service 'org.freedesktop.secrets': timed out (service_start_timeout=120000ms)",)

and when launching the app I get the same org.freedesktop.DBus.Error.

I'd like to add my contribution to this.

I am using Archlinux without desktop environment, only i3 as window manager and it was literally a nightmare to try to make protonvpn-cli work. After installing all the graphical dependencies and started to modify my xinit scripts to make all that run together, I stopped because I couldn't make DBUS work with gnome-keyring ! I think all that works smoothly when you use gnome based desktop environment but when you are not ... it is fairly complicated.

As @davxy commented, I think there are too much dependencies on graphical libraries and tools, which is not what user's would expect using a CLI tool. The expected behaviour of a CLI tool is to be able to run in terminal only.

davxy commented 1 year ago

It is quite clear that the gnome dependencies should be dropped when using the CLI. Unfortunately looks like maintainers are not too much responsive :-/ For the moment I'm just using directly the wireguard configs

calexandru2018 commented 1 year ago

Hey all,

Apologize for not being much active here, but we're currently working really hard on the new client, so that we don't have the same dependency issues that we currently have.

The idea for the new client is to be as modular as possible, meaning that if someone would like to run native backends instead of 3rd party (ie native openvpn/wg vs NM openvpn/wg ) that would happen transparently. The only difference would be which packages are required (we'll be creating meta-packages that help with installation). Apart from that we're working also on making the applications in general to be much more reliable, and all of this takes time. Initially the rebuild app won't have many features, but we intend in releasing it gradually.

Hope this clarifies some questions.

qjerome commented 1 year ago

@calexandru2018, thanks for your explanation, I'll wait for the new client then. If you need beta-testers with minimal graphical environment I am there ;)

shift-runstop commented 1 year ago

Also happy to test, as I'm paying for this product and am currently unable to use it on my machine the way that I'd like. Thanks for the response.

denics commented 1 year ago

Same here, little rpi server with no GUI at all, I really would like to keep as light as possible. Happy to test!

joedborg commented 11 months ago

This also means you can't containerize the client. I really want to create a docker image that is running the client as an entry point.