A TUI to dynamically select, connect, and monitor OpenVPN configurations on Linux.
Project description
pige.ovpn
A TUI that makes it easier to connect to VPNs and monitor network usage.
Designed for Linux distributions.
Features
- Connect to/Disconnect from VPN.
- Show IP information (IP address, city, country).
- Monitor network usage.
- Works with all VPN providers that offer OpenVPN configuration files.
Prerequisites
- Python 3.9 or above.
- A supported terminal emulator:
- gnome-terminal
- konsole
- x-terminal-emulator
- xfce4-terminal
- alacritty
- terminator
- kitty
- mate-terminal
- OpenVPN installed on your system.
Installation
pipx installation (recommended)
pige.ovpn is available on PyPI and can be installed with pipx:
pipx install pigeovpn
Launch it with:
pigeovpn
pip installation
You can also use pip (pip install pigeovpn) but it is strongly discouraged for avoiding dependency issues.
How the app works
First run
The first time you run the app, you will see the welcome screen:
From there, you will be asked to:
- Provide your VPN provider credentials (username and password).
This will create a
credentials.txtfile in/etc/openvpn/ - Select the directory where your
.ovpnconfiguration files are located.
Once these steps are completed, the main screen will appear: [photo of the main app]
Main app
The UI is divided into two main panels:
- Left panel: shows all
.ovpnfiles found in the configured directory. - Right panel: status, network information, and control panel.
Press s to search dynamically through the available configuration files.
To connect to a VPN, select a file and press Enter (or click on it).
By default, IP information is not automatically fetched until a VPN profile is selected.
You can manually refresh it at any time by pressing Refresh IP info.
Press q to exit the app.
⚠️ Important: quitting does not stop the VPN connection. OpenVPN will continue running in the background.
Technical characteristics
sudo commands
The app requires sudo privileges to:
- connect to an
.ovpnconfiguration. - disconnect OpenVPN.
- create the credentials file.
For security and operational reasons, the app itself isn't run with sudo privileges. Instead, whenever a sudo command is required, a new terminal window appears and prompts the user for the sudo password.
Although this can be frustrating as it will ask for the password every time a new connection is made, it ensures:
- the sudo password isn't stored in memory
- incorrect passwords are handled by the system prompt (the user is re-asked automatically)
The app will try to open the first supported terminal emulator available from the configured list (see constants.py) and execute the required command in that terminal.
Troubleshooting
When I try to connect, I enter my sudo password but get an 'AUTH FAILED / authentication' error.
This usually means your VPN credentials (username/password) are incorrect.
Try one of the following:
- Log out from the app and enter your credentials again.
- Manually create/update the credentials file (default location:
/etc/openvpn/credentials.txt).
The connection succeeds, but my traffic is not going through the VPN.
This is often caused by invalid credentials, even if OpenVPN does not immediately fail.
Try re-entering your credentials (log out and log back in), or manually update the credentials file at:
/etc/openvpn/credentials.txt
If the issue persists, please open a GitHub Issue and include the OpenVPN output log.
The city and/or country are incorrect.
pige.ovpn uses [API NAME / WEBSITE] to fetch IP geolocation data.
If too many requests are made in a short period of time, the app may fall back to ([SECOND API NAME]), which may be less accurate depending on the free plan limits.
In future versions, support for custom IP lookup APIs may be added.
FAQs
Does pige.ovpn store my credentials?
Yes. pige.ovpn stores your VPN username and password locally so it can authenticate OpenVPN connections without asking every time.
The credentials are saved in a plain text file (/etc/openvpn/credentials.txt) which is protected by proper permissions (chmod 600).
Does quitting the app stop the VPN?
No. Exiting pige.ovpn does not stop OpenVPN.
If you quit the app, the VPN connection will remain active and OpenVPN will continue running in the background until you manually disconnect (or kill the OpenVPN process).
Why pige.ovpn and how is it pronounced?
pige.ovpn takes its name from the pigeon bird, and it is pronounced like the bird:
"pigeo-VPN" (pi-jee-oh + VPN).
Pigeons can be found almost everywhere, and racing pigeons can travel up to 1,000 km in a single day, crossing cities and even countries.
They have also been used as messengers for centuries.
Since VPNs allow you to "travel" digitally across the world, the project was named after them.
Why did I make this application?
When I moved from Ubuntu to CachyOS, I realized that the vast majority of VPN providers do not offer a native Linux GUI application, especially for non-Debian-based distributions.
Most providers only distribute .ovpn configuration files, leaving users to connect manually through OpenVPN.
I created pige.ovpn to fill that gap and provide the essential features most GUI VPN apps offer.
Why a TUI and not a GUI?
There are a few reasons I decided to build a TUI rather than a GUI:
- The app is aimed at Linux users (especially Arch or Arch-based distributions), aka terminal is our favorite tool.
- I work mostly in Python, which isn't a 'fast' language. Nevertheless, running a TUI with Python doesn't make the app run considerably slower.
- I wanted to experiment with the Textual framework.
Why not cross-platform?
The main purpose of the app is to try to provide an application that misses from Linux distros (especially those that are not Debian based). Most VPN providers already offer feature-rich applications for Windows and macOS, so this project remains Linux-focused.
Contributing
pige.ovpn is currently under development.
Contributions are more than welcome! If you would like to collaborate, please check the CONTRIBUTING.md.
Roadmap
There are plenty of features I would like to include in the next versions. Some of them are:
- Add directory path auto-completion using
Tab. - Implement an automatic killswitch.
- Add more keybindings (e.g. for the buttons)
- Use vim keybindings for directory tree navigation.
- Require double-click to select an
.ovpnfile from the directory tree. - Show a loading widget when refreshing IP information.
- Add support for multiple IP lookup APIs.
- Replace the current graph with a line chart.
This list may be expanded based on user requests and feedback.
License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pigeovpn-0.1.0.post4.tar.gz.
File metadata
- Download URL: pigeovpn-0.1.0.post4.tar.gz
- Upload date:
- Size: 1.5 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: Hatch/1.16.3 cpython/3.14.2 HTTPX/0.28.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
84d502541a26777299c9c104cb8948977ae409da93103b2df902f05c3c273598
|
|
| MD5 |
11d92cd2fac3d1222d76bc162ed9b09f
|
|
| BLAKE2b-256 |
4906f70943871d3fb12b1847a9daf25ec62cb9509b6438cce68d171a135ec5ed
|
File details
Details for the file pigeovpn-0.1.0.post4-py3-none-any.whl.
File metadata
- Download URL: pigeovpn-0.1.0.post4-py3-none-any.whl
- Upload date:
- Size: 38.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: Hatch/1.16.3 cpython/3.14.2 HTTPX/0.28.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ef1271f0a090c4d3e3c06be26ece3eeae2de705841b2a2b59cc14a7b27ba3be1
|
|
| MD5 |
c734f21548ae10a73041ccba19923f49
|
|
| BLAKE2b-256 |
7d8a8d673be4808d026df8e668c8e02759b51c43764bc9abdd1d7c8b3cacef9d
|