> We are happy to answer your questions about the code or discuss technical ide…as.
Please complete the following checklist (by adding [x]):
- [X] I have searched open and closed issues for duplicates
- [X] This isn't a feature request
- [X] This is not a report about my app not working as expected
----------------------------------------
When opening the app with the `protonvpn-app` command I get this error
```
2026-01-19T02:47:12.289576+00:00 | proton.vpn.split_tunneling.interface:52 | WARNING | Split tunneling backend not found
Traceback (most recent call last):
File "/usr/bin/protonvpn-app", line 8, in <module>
sys.exit(main())
~~~~^^
File "/usr/lib/python3.14/site-packages/proton/vpn/app/gtk/__main__.py", line 35, in main
controller = Controller.get(executor, exception_handler)
File "/usr/lib/python3.14/site-packages/proton/vpn/app/gtk/controller.py", line 72, in get
executor.submit(controller.initialize_vpn_connector).result()
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^
File "/usr/lib/python3.14/concurrent/futures/_base.py", line 450, in result
return self.__get_result()
~~~~~~~~~~~~~~~~~^^
File "/usr/lib/python3.14/concurrent/futures/_base.py", line 395, in __get_result
raise self._exception
File "/usr/lib/python3.14/site-packages/proton/vpn/app/gtk/controller.py", line 104, in initialize_vpn_connector
self._connector = await self._api.get_vpn_connector()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.14/site-packages/proton/vpn/core/api.py", line 69, in get_vpn_connector
self._vpn_connector = await VPNConnector.get(
^^^^^^^^^^^^^^^^^^^^^^^
...<3 lines>...
)
^
File "/usr/lib/python3.14/site-packages/proton/vpn/core/connection.py", line 100, in get
await connector.initialize_state()
File "/usr/lib/python3.14/site-packages/proton/vpn/core/connection.py", line 296, in initialize_state
state = await self._get_initial_state()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.14/site-packages/proton/vpn/core/connection.py", line 284, in _get_initial_state
if self._session_holder.session.logged_in:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.14/site-packages/proton/vpn/core/session_holder.py", line 93, in session
self._session = self._proton_sso.get_default_session(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
override_class=VPNSession
^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/usr/lib/python3.14/site-packages/proton/sso/sso.py", line 195, in get_default_session
sessions = self.sessions
^^^^^^^^^^^^^
File "/usr/lib/python3.14/site-packages/proton/sso/sso.py", line 133, in sessions
keyring = self._keyring
^^^^^^^^^^^^^
File "/usr/lib/python3.14/site-packages/proton/sso/sso.py", line 114, in _keyring
self.__keyring_backend = Keyring.get_from_factory(self.__keyring_backend_name)
~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.14/site-packages/proton/keyring/_base.py", line 49, in get_from_factory
keyring_backend = Loader.get("keyring", class_name=backend)
File "/usr/lib/python3.14/site-packages/proton/loader/loader.py", line 122, in get
entry_is_valid = entry.cls._validate() # pylint: disable=protected-access
File "/usr/lib/python3.14/site-packages/proton/keyring_linux/secretservice/secretservice_backend.py", line 43, in _validate
return cls._is_backend_working(SecretService.Keyring())
~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.14/site-packages/proton/keyring_linux/core/keyring_linux.py", line 111, in _is_backend_working
keyring_backend.get_password(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
"ProtonVPN",
^^^^^^^^^^^^
"TestingThatBackendIsWorking"
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/usr/lib/python3.14/site-packages/keyring/backends/SecretService.py", line 79, in get_password
collection = self.get_preferred_collection()
File "/usr/lib/python3.14/site-packages/keyring/backends/SecretService.py", line 62, in get_preferred_collection
collection = secretstorage.get_default_collection(bus)
File "/usr/lib/python3.14/site-packages/secretstorage/collection.py", line 177, in get_default_collection
return Collection(connection)
File "/usr/lib/python3.14/site-packages/secretstorage/collection.py", line 45, in __init__
self._collection.get_property('Label')
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^
File "/usr/lib/python3.14/site-packages/secretstorage/util.py", line 67, in get_property
(signature, value), = self.send_and_get_reply(msg)
~~~~~~~~~~~~~~~~~~~~~~~^^^^^
File "/usr/lib/python3.14/site-packages/secretstorage/util.py", line 48, in send_and_get_reply
raise DBusErrorResponse(resp_msg)
jeepney.wrappers.DBusErrorResponse: [org.freedesktop.DBus.Error.UnknownObject] ("No such object path '/org/freedesktop/secrets/aliases/default'",)
```
It seems to be an issue with retrieving the wallet. This is a clean minimal install of ArchLinux with KDE plasma and kwallet.
A workaround I found is I open an application like Brave that prompts to create the the wallet . Then open ProtonVPN again and it'll work. Can you make it so if no wallet exists then prompt to create one?
## Steps to reproduce
1. Install Arch Linux using minimal packages: `plasma-desktop sddm konsole`
1. Install ProtonVPN from Pacman: `sudo pacman -S proton-vpn-gtk-app`
1. Run `protonvpn-app` from the Konsole terminal