Una aplicación de escritorio moderna para gestionar conexiones VPN en Linux usando OpenVPN con interfaz gráfica GTK3.
Urreste García, L. A., Capote Casas, F. E., Castellanos Muriel, J. A., & Rincón Brito, C. D. (2025). VPN Linux Desktop Connector (v1.0.0) [Software]. Zenodo. https://doi.org/10.5281/zenodo.17676938
-
✅ Interfaz gráfica intuitiva con GTK3
-
✅ Íconos personalizados en ventana y bandeja del sistema
-
✅ Soporte multiidioma (Español 🇨🇴, Inglés 🇬🇧, Chino 🇨🇳, Portugués 🇧🇷, Francés 🇫🇷, Alemán 🇩🇪, Japonés 🇯🇵)
-
✅ 4 temas visuales personalizables:
-
✅ Atajos de teclado: presiona Enter en el campo de contraseña para conectar automáticamente
-
✅ Forzar TLS 1.0: Si tu cliente OpenVPN es de la versión 2.3.6 a la 2.3.2, prueba a añadir tls-version-min 1.0
-
✅ Modo antisuspensión: permite mantener el screen o pantalla activa, realizando un leve movimiento de puntero cada 30 segundos
-
✅ Mostrar Consola: permite ver el log de la ejecución de openvpn
- ✅ Gestión inteligente de conexiones:
- Timeout automático de 90 segundos para evitar conexiones colgadas
- Detección de intentos de reconexión (máximo 3 intentos)
- Captura y visualización de mensajes de error de OpenVPN
- Terminación limpia del proceso con señal SIGINT
- ✅ Almacenamiento seguro de credenciales con encriptación Fernet
- ✅ Archivos de configuración con permisos restrictivos (600)
- ✅ Clave de encriptación única por usuario y máquina
- ✅ Soporte para TLS 1.0 en servidores legacy
-
✅ Logs en tiempo real de conexión OpenVPN
-
✅ Indicador visual de estado con semáforo (verde/amarillo/rojo)
-
✅ Información de red actualizada automáticamente en la barra de tareas:
- Estado de conexión VPN
- IP del túnel VPN (tun0)
- IP local de la máquina
- IP pública (con módulo requests)
- Tipo de conexión (WiFi con nombre de red / Ethernet)
sh install.shLa primera vez que ejecutes la aplicación desde el escritorio, OpenVPN necesita privilegios de administrador. Para evitar que solicite contraseña cada vez, ejecuta:
cd ~/VPN-Desktop-Linux-Conector
sudo bash setup-sudo.shEste script configura sudo para permitir ejecutar OpenVPN sin contraseña solo para tu usuario. Es seguro y solo afecta a OpenVPN.
¿Qué hace el script?
- Crea un archivo en
/etc/sudoers.d/vpn-linux-desktop-connector - Permite ejecutar
openvpnsin contraseña solo para tu usuario - Valida la configuración automáticamente
Para revertir la configuración:
sudo rm /etc/sudoers.d/vpn-linux-desktop-connectorSi prefieres instalar manualmente, copia y pega el siguiente código:
cd ~ && curl -L https://github.com/danielrincon302/OpenVPN-Linux-Desktop-Connector/archive/refs/heads/main.zip -o vpn-temp.zip &&
unzip -o -q vpn-temp.zip && rm -rf VPN-Desktop-Linux-Conector 2>/dev/null &&
mv OpenVPN-Linux-Desktop-Connector-main VPN-Desktop-Linux-Conector &&
rm vpn-temp.zip && cp ~/VPN-Desktop-Linux-Conector/Run-VPN-Desktop-Linux-Conector.desktop "$(xdg-user-dir DESKTOP)"/ &&
chmod +x "$(xdg-user-dir DESKTOP)/Run-VPN-Desktop-Linux-Conector.desktop" &&
sed -i "s|\$HOME|$HOME|g" "$(xdg-user-dir DESKTOP)/Run-VPN-Desktop-Linux-Conector.desktop" &&
chmod +x "$(xdg-user-dir DESKTOP)/Run-VPN-Desktop-Linux-Conector.desktop" &&
gio set "$(xdg-user-dir DESKTOP)/Run-VPN-Desktop-Linux-Conector.desktop" metadata::trusted true
echo "✓ Installation complete. Check your desktop icon"Nota: Esta aplicación NO requiere permisos de root para ejecutarse (solo para la instalación de dependencias). El ícono de bandeja usa Gtk.StatusIcon que viene incluido con GTK3.
Opción 1: Haz doble clic en el ícono .desktop que se instaló en tu escritorio
Opción 2: Ejecuta directamente desde la línea de comandos:
python3 VPN-Desktop-Linux-Conector.py- Selecciona tu archivo OVPN (proporcionado por tu administrador de red)
- Ingresa tu usuario y contraseña
- Las credenciales se guardarán automáticamente de forma segura y encriptada
- Haz clic en "Conectar VPN" o presiona Enter en el campo de contraseña
Opción 1: Haz clic en el botón "Conectar VPN"
Opción 2: Presiona la tecla Enter mientras el cursor está en el campo de contraseña
Comportamiento de la conexión:
- La aplicación intentará conectar durante un máximo de 90 segundos
- Si detecta problemas de reconexión (más de 3 intentos), detendrá automáticamente el proceso
- Los mensajes de error de OpenVPN se mostrarán en los logs en tiempo real
- Si la conexión es exitosa, la ventana se minimizará a la bandeja del sistema
- Ve a Menú → Configuración → Lenguaje
- Selecciona el idioma deseado
- La interfaz se actualizará automáticamente sin reiniciar
- Ve a Menú → Configuración → Temas
- Selecciona entre los 4 temas disponibles:
- Gerencial: Estilo corporativo profesional
- Minimalista: Diseño limpio y minimalista
- Moderno: Gradientes vibrantes modernos
- Sistema Solar: Tema oscuro inspirado en el espacio
- El tema se aplica instantáneamente
La aplicación incluye un ícono de bandeja del sistema que aparece automáticamente en la barra de tareas:
- Minimizar a bandeja: Al cerrar la ventana, la aplicación permanece en segundo plano
- Clic izquierdo: Alterna mostrar/ocultar la ventana principal
- Clic derecho: Menú contextual con información en tiempo real:
- Estado de conexión (Conectado ✓ / Desconectado)
- IP del túnel VPN
- IP local
- IP pública
- Tipo de conexión (WiFi con nombre / Ethernet)
- Abrir/Restaurar ventana
- Salir de la aplicación
- ✅ Usa
Gtk.StatusIconincluido en GTK3 (sin dependencias adicionales) - ✅ Funciona sin permisos de root
- ✅ Compatible con todos los entornos de escritorio GTK3
- ✅ Actualización automática cada 5 segundos
- ✅ Ícono dinámico que cambia según el estado de conexión
VPN-Desktop-Linux-Connector/
├── VPN-Desktop-Linux-Conector.py # ⭐ Aplicación principal GTK3
├── README.md # Documentación del proyecto
├── requirements.txt # Dependencias de Python
├── install.sh # Script de instalación rápida
├── setup-sudo.sh # Configuración de permisos sudo para OpenVPN
├── Run-VPN-Desktop-Linux-Conector.desktop # Archivo .desktop para lanzador de aplicaciones
│
├── icons/ # Íconos de la aplicación
│ ├── ico-index.png # Logo principal (307x333px)
│ ├── VPN-LDC_16x16.svg # Ícono 16x16 para escalado
│ ├── VPN-LDC_22x22.svg # Ícono 22x22 para escalado
│ ├── VPN-LDC_24x24.svg # ⭐ Bandeja del sistema
│ ├── VPN-LDC_32x32.svg # ⭐ Ventana principal y diálogo About
│ ├── BCandadoConectado16x16.png # Candado conectado (tema claro)
│ ├── BCandadoDesConectado16x16.png # Candado desconectado (tema claro)
│ ├── WCandadoConectado16x16.png # Candado conectado (tema oscuro)
│ └── WCandadoDesConectado16x16.png # Candado desconectado (tema oscuro)
│
├── img/ # Imágenes para documentación
│ ├── header.png # Cabecera del README
│ ├── TaskMenu.png # Captura del menú de bandeja
│ ├── i001Consola.png # Captura de consola de logs
│ ├── i001Gerencial.png # Tema Gerencial
│ ├── i001Minimalista.png # Tema Minimalista
│ ├── i001Moderno.png # Tema Moderno
│ └── i001SistemaSolar.png # Tema Sistema Solar
│
└── Archivos generados automáticamente:
├── config.txt # Credenciales VPN encriptadas (autogenerado)
├── .vpn_key # Clave de encriptación Fernet (autogenerado, oculto)
├── idioma.txt # Idioma seleccionado (autogenerado)
├── tema.txt # Tema visual seleccionado (autogenerado)
├── tls_config.txt # Configuración TLS 1.0 (autogenerado)
├── anti_suspend_config.txt # Estado modo anti-suspensión (autogenerado)
└── console_log_config.txt # Visibilidad del log de consola (autogenerado)
| Archivo | Propósito |
|---|---|
VPN-Desktop-Linux-Conector.py |
Aplicación principal con interfaz GTK3. Gestiona conexión VPN, interfaz gráfica, temas, idiomas y bandeja del sistema. |
install.sh |
Script de instalación automática. Descarga el proyecto, copia el lanzador al escritorio y configura permisos. |
setup-sudo.sh |
Configura permisos sudo para ejecutar OpenVPN sin contraseña. Crea archivo en /etc/sudoers.d/. |
Run-VPN-Desktop-Linux-Conector.desktop |
Lanzador de aplicación para escritorios Linux. Define ícono, comando de ejecución y categoría. |
requirements.txt |
Lista de dependencias Python: cryptography, requests (opcional). |
Estos archivos se crean automáticamente cuando usas la aplicación:
| Archivo | Contenido |
|---|---|
config.txt |
Credenciales VPN encriptadas (usuario, contraseña, ruta OVPN) usando Fernet. |
.vpn_key |
Clave de encriptación única generada por usuario y máquina. No compartir. |
idioma.txt |
Código del idioma seleccionado (es, en, zh, pt, fr, de, ja). |
tema.txt |
Código del tema visual (gerencial, minimalista, moderno, sistema-solar). |
tls_config.txt |
Estado de configuración TLS 1.0 (true/false). |
anti_suspend_config.txt |
Estado del modo anti-suspensión (true/false). |
console_log_config.txt |
Visibilidad del log de consola OpenVPN (true/false). |
Nota: Todos los archivos de configuración tienen permisos restrictivos (600) para proteger información sensible.
La aplicación usa íconos personalizados en formato SVG:
- Ventana principal: Muestra el ícono
VPN-LDC_32x32.svgen la barra de título - Bandeja del sistema: Usa
VPN-LDC_24x24.svgpara el ícono de la bandeja - Diálogo About: Logo escalado a 128x128 píxeles
- Título: "VPN Linux Desktop Connector" visible en la barra de título
Ver icons/README_ICONS.md para más detalles sobre la implementación.
- ✅ Contraseñas encriptadas con Fernet (criptografía simétrica de alto nivel)
- ✅ Clave de encriptación única generada por usuario y máquina
- ✅ Archivos de configuración con permisos restrictivos Unix (600)
- ✅ Archivo de credenciales temporales se elimina después de cada uso
- ✅ No se almacenan contraseñas en texto plano en ningún momento
- ✅ Terminación limpia del proceso OpenVPN con señal SIGINT
- ✅ Timeout automático para evitar procesos zombis
- ✅ Detección de estados colgados o en bucle de reconexión
- ✅ Limpieza automática de archivos temporales al finalizar
Síntoma: La conexión se detiene automáticamente después de 90 segundos mostrando "TIMEOUT".
Causas posibles:
- Servidor VPN no responde o está caído
- Configuración OVPN incorrecta
- Problemas de red o firewall bloqueando la conexión
- Necesidad de configurar TLS 1.0 para servidores legacy
Solución:
- Verifica que el servidor VPN esté activo
- Revisa los logs para identificar el error específico
- Si aparece error de TLS, acepta activar TLS 1.0 cuando se solicite
- Verifica tu conexión a internet
Síntoma: La aplicación detiene la conexión después de 3 intentos de reconexión.
Causa: El servidor VPN está rechazando la conexión repetidamente.
Solución:
- Revisa las credenciales (usuario y contraseña)
- Verifica el archivo OVPN
- Consulta con tu administrador de red si el servidor está operativo
- Revisa los logs para ver el mensaje de error específico
Causas posibles:
- El entorno de escritorio no soporta bandejas del sistema
- Extensiones del sistema que bloquean íconos de bandeja
Solución: La ventana principal funciona normalmente sin el ícono de bandeja.
Verifica:
- Usuario y contraseña correctos
- Archivo OVPN válido y actualizado
- Conexión a internet activa
- Credenciales no expiradas
Asegúrate de tener permisos sudo para OpenVPN:
sudo openvpn --versionSi el comando anterior falla, instala OpenVPN:
sudo apt-get install openvpnInstala el módulo requests:
pip3 install requestsLa aplicación funciona sin este módulo, pero no mostrará la IP pública.
GPL 3.0
Las contribuciones son bienvenidas. Por favor:
- Haz fork del repositorio
- Crea una rama para tu feature (
git checkout -b feature/NuevaCaracteristica) - Commit tus cambios (
git commit -m 'Agregar nueva característica') - Push a la rama (
git push origin feature/NuevaCaracteristica) - Abre un Pull Request
Para reportar bugs o solicitar nuevas características, abre un issue en GitHub incluyendo:
Información del sistema:
- Distribución de Linux y versión (ej: Ubuntu 22.04)
- Versión de Python (
python3 --version) - Versión de OpenVPN (
openvpn --version) - Entorno de escritorio (GNOME, KDE, XFCE, etc.)
Logs de la aplicación:
- Copia el contenido completo del área de logs
- Incluye el mensaje de error específico
- Indica los pasos para reproducir el problema
Capturas de pantalla (opcional):
- Ayudan a entender mejor el problema visual
Desarrollado con ❤️ para la comunidad Linux






