Un menú de inicio moderno y personalizable para JWM (Joe's Window Manager) y Puppy Linux, escrito en Python con GTK3.
English | Español
PyMenuPup es un menú de inicio moderno y altamente personalizable diseñado específicamente para distribuciones ligeras como Puppy Linux que usan JWM como gestor de ventanas. También es compatible con Openbox y Tint2.
- Totalmente personalizable: colores, fuentes, tamaños y posicionamiento
- Multilingüe: soporte para inglés y español
- Búsqueda rápida: encuentra aplicaciones al instante
- Acceso rápido: carpetas del sistema con un clic
- Integración web: búsqueda directa en el navegador
- Foto de perfil: personalizable (cuadrada o circular)
- Detección automática: soporte para JWM, Openbox y Tint2
- Rendimiento optimizado: carga perezosa de aplicaciones
- Categorías personalizables: oculta las que no necesites
- Navegación con teclado: soporte para teclas de flecha y Enter
- Integración con tema del sistema: usa los colores del tema GTK
Menú principal que muestra todas las aplicaciones del sistema organizadas por categorías.
Funcionalidades:
- Lectura automática del archivo
.jwmrcde JWM - Categorización inteligente de aplicaciones
- Búsqueda en tiempo real
- Acceso rápido a carpetas comunes
- Integración con redes sociales
- Creación de accesos directos en el escritorio (no compatible con ROX-Filer; funciona solo con SpaceFM y gestores derivados)
- Soporte de teclado (navegación con teclas de flecha)
- Menú contextual (clic derecho en aplicaciones)
Herramienta gráfica de configuración para personalizar el menú.
Opciones configurables:
- Dimensiones y posición de la ventana
- Colores y transparencia
- Fuentes y tamaños de texto
- Rutas de archivos y comandos
- Categorías visibles/ocultas
- Integración con tema GTK del sistema
PyMenuPup utiliza un sistema de traducción simple y fácil de usar basado en archivos .lang.
No se necesitan herramientas complejas como poedit o gettext.
El proyecto ya incluye un template.lang listo para usar, solo necesitas copiarlo y traducirlo.
Las traducciones utilizan un formato de texto simple clave = valor.
Solo traduces el texto después del signo =.
# Ejemplo
Search applications... = Buscar aplicaciones...
Shutdown = Apagar
Desktop = Escritorio
Si una línea se deja vacía, PyMenuPup usará automáticamente el inglés.
Los archivos de traducción se buscan en este orden (mayor prioridad primero):
~/.config/pymenupup/locale/— Traducciones de usuario (recomendado)/usr/local/share/locale/pymenupup//usr/share/locale/pymenupup/— A nivel de sistema
Consejo: Usar la carpeta de usuario evita modificar archivos del sistema.
- Inglés (en) — Incluido por defecto (no requiere archivo)
- Español (es) —
es.langincluido - Francés (fr) —
fr.langincluido
Se pueden agregar más idiomas fácilmente.
template.lang → es.langEjemplos:
fr.lang— Francésde.lang— Alemánpt.lang— Portugués
PyMenuPup Configurator = Configurador de PyMenuPup
Window = Ventana
Colors = Colores
Font = Fuente
¡Eso es todo! 🎉 No se requieren cambios en el código Python.
Se admiten archivos de idioma regionales, por ejemplo:
es-MX.lang— Español (México)es-AR.lang— Español (Argentina)fr-CA.lang— Francés (Canadá)pt-BR.lang— Portugués (Brasil)
Si no se encuentra un archivo regional, PyMenuPup automáticamente usará el idioma base (por ejemplo es.lang).
-
Crea tu directorio de idioma:
mkdir -p ~/.config/pymenupup/locale -
Copia el template:
cp template.lang ~/.config/pymenupup/locale/es.lang -
Edita y traduce:
nano ~/.config/pymenupup/locale/es.lang -
Reinicia PyMenuPup ¡y tu idioma será detectado automáticamente!
Si creas una traducción para un nuevo idioma, considera contribuirla al proyecto:
- Haz un fork del repositorio
- Agrega tu archivo
.langal directoriolocale/ - Envía un pull request
El sistema de traducción maneja automáticamente los nombres de categorías en los menús JWM. Si tu JWM tiene categorías en tu idioma (ej. "Bureau" en francés), PyMenuPup las mapeará automáticamente a los nombres estándar en inglés internamente mientras las muestra en tu idioma.
PyMenuPup tiene diferentes versiones optimizadas para distintos entornos Linux:
La versión principal (pymenu-globicons.py y pymenu-config.py) está diseñada específicamente para Puppy Linux, que:
- Ejecuta el sistema como usuario root por defecto
- No requiere el uso de
sudopara operaciones del sistema - Tiene rutas y configuraciones específicas de Puppy Linux
Esta versión principal también es compatible con EasyOS de Barry Kauler, debido a que:
- EasyOS también se ejecuta como root por defecto
- Utiliza un sistema de archivos frugal con capas, similar al de Puppy Linux
- Las rutas del sistema y el entorno funcionan de forma muy parecida a los sistemas basados en Puppy
No se requieren modificaciones para ejecutar la versión de Puppy Linux dentro de EasyOS.
En la carpeta distro-linux/ encontrarás versiones adaptadas para otras distribuciones Linux que usan usuarios no root:
Versión modificada para distribuciones Linux estándar (Debian, Ubuntu, Arch, Fedora, etc.) con los siguientes cambios:
- Gestión de permisos: Uso apropiado de
sudopara operaciones que requieren privilegios elevados - Rutas adaptadas: Configuraciones ajustadas para estructuras de directorios de usuario estándar
- Comandos del sistema: Adaptación de comandos de apagado, reinicio y bloqueo para sistemas multiusuario
- Variables de entorno: Manejo correcto de
$HOMEy$USERpara usuarios no root
Versión especializada para Trixiepup64 (Wayland + compositor labwc) con las siguientes características:
- Compatibilidad con Wayland: Optimizado para el servidor de display Wayland en lugar de X11
- Integración con labwc: Soporte nativo para el compositor labwc (similar a Openbox para Wayland)
- Parser de menú Openbox: Lee y analiza
menu.xmldel formato Openbox/labwc - Comandos específicos de Wayland: Comandos del sistema adaptados para el entorno Wayland
- Estructura Menu.xml: Compatible con la estructura de menú estándar de Openbox usada por el generador de menús de labwc
¿Cuándo usar cada versión?
- Usa la versión principal si estás en Puppy Linux o derivados
- Usa la versión Essora si estás en Debian, Ubuntu, Arch, Fedora, Mint u otras distribuciones estándar
- Usa la versión Trixiepup64 si estás en Trixiepup64 o cualquier sistema basado en Wayland que use el compositor labwc
Python 3 (>= 3.6)
python3-gi
gir1.2-gtk-3.0
gir1.2-gdk-3.0
gir1.2-gdkpixbuf-2.0
gir1.2-pango-1.0
gir1.2-gio-2.0
gir1.2-glib-2.0
xdg-utils
Nerd Fonts
# El Gestor de Paquetes de Puppy (PPM) usualmente incluye python3-gi
# Verifica que lo tengas instalado:
python3 --version
python3 -c "import gi; print('GTK3 OK')"sudo apt update
sudo apt install python3 python3-gi python3-gi-cairo gir1.2-gtk-3.0 xdg-utilssudo pacman -S python python-gobject gtk3 xdg-utilssudo dnf install python3 python3-gobject gtk3 xdg-utilsGracias al usuario Burunduk por probar en Fossapup64. Para ejecutar PyMenu en una instalación fresca de Fossapup-9.5:
- Abre el PPM (Gestor de Paquetes de Puppy)
- Actualiza la base de datos (~16 MB de descarga)
- Busca e instala
meld_3.20.2y sus dependencias (~3 MB, usa modo auto-instalación) - Ejecuta PyMenu - ahora debería funcionar
Nota: Meld es una pequeña herramienta GUI diff que proporciona las dependencias GTK necesarias y puede ser útil por sí misma.
- Clona el repositorio:
git clone https://github.com/tu-usuario/PyMenuPup.git
cd PyMenuPup- Copia los scripts al sistema:
sudo cp pymenu-globicons.py /usr/local/bin/
sudo cp pymenu-config.py /usr/local/bin/
# Da permisos de ejecución
sudo chmod +x /usr/local/bin/pymenu-globicons.py
sudo chmod +x /usr/local/bin/pymenu-config.py- Copia los archivos de traducción:
sudo mkdir -p /usr/share/locale/pymenupup
sudo cp locale/*.lang /usr/share/locale/pymenupup/
sudo chmod 644 /usr/share/locale/pymenupup/*.lang- Crea enlaces simbólicos (opcional):
sudo ln -s /usr/local/bin/pymenu-globicons.py /usr/local/bin/pymenu
sudo ln -s /usr/local/bin/pymenu-config.py /usr/local/bin/pymenu-configEste proyecto permite compilar los scripts de Python en binarios .bin altamente optimizados utilizando Nuitka, un compilador de Python a C.
A continuación se explica qué es, dónde obtenerlo y cómo usarlo en Puppy/EasyOS.
Nuitka es un compilador real de Python escrito en C++.
Toma tus scripts .py y los convierte en:
- Ejecutables nativos (binarios)
- Mayor rendimiento
- Menor uso de CPU
- Sin necesidad de tener Python instalado para ejecutarlos
Es ideal para distribuir aplicaciones en Puppy Linux porque:
- Reduce el tamaño del programa
- Elimina dependencias externas
- Mejora la velocidad de arranque
- Protege mejor el código fuente
Puedes descargarlo directamente desde el sitio oficial:
- Sitio web: https://nuitka.net
- Descargas: https://nuitka.net/pages/download.html
- GitHub: https://github.com/Nuitka/Nuitka
En Puppy/EasyOS lo más común es descargarlo en la carpeta /root/:
Ejemplo:
/root/Nuitka-2.9rc5/
Dentro encontrarás el binario para compilar:
/root/Nuitka-2.9rc5/bin/nuitka
Para poder compilar debes activar el entorno de desarrollo.
Cargar devx.sfs:
Menú → Setup → SFS-Load-on-the-fly → devx.sfs
El devx incluye:
- gcc
- make
- libc-dev
- Python.h y otros headers necesarios
Además, instala estos paquetes:
- patchelf
- python3-zstandard
- python3-dev
Si tu Puppy/EasyOS soporta apt:
apt install patchelf python3-zstandard python3-devEjemplo de compilación para pymenu-globicons.py:
python3 /root/Nuitka-2.9rc5/bin/nuitka \
--mode=onefile \
--follow-imports \
--lto=yes \
--static-libpython=no \
--plugin-enable=gi \
--nofollow-import-to=tkinter \
--nofollow-import-to=unittest \
--nofollow-import-to=pydoc \
--nofollow-import-to=*.tests \
--experimental=use_upx \
/usr/local/bin/pymenu-globicons.pyEl ejecutable generado aparecerá como:
pymenu-globicons.bin
Puedes renombrarlo (eliminar la extensión .bin) y moverlo a /usr/local/bin:
mv pymenu-globicons.bin /usr/local/bin/pymenu-globicons
chmod +x /usr/local/bin/pymenu-globicons| Opción | Descripción |
|---|---|
--mode=onefile |
Crea un archivo ejecutable único |
--lto=yes |
Optimización de tamaño y rendimiento |
--static-libpython=no |
Produce binarios más pequeños |
--follow-imports |
Incluye dependencias necesarias |
--experimental=use_upx |
Compresión adicional (si UPX está disponible) |
- La primera compilación puede tardar varios minutos
- Los binarios compilados son significativamente más rápidos que los scripts de Python
- Asegúrate de tener todas las dependencias de Python instaladas antes de compilar
- Prueba el binario después de compilar para verificar su funcionalidad
Al ejecutar PyMenuPup por primera vez, se creará automáticamente un archivo de configuración en:
~/.config/pymenu.json
Edita tu archivo ~/.jwmrc y agrega:
<Program label="Menu" icon="applications-system">
/usr/local/bin/pymenu-globicons.py
</Program>O para usar con coordenadas específicas:
<Program label="Menu" icon="applications-system">
/usr/local/bin/pymenu-globicons.py 100 100
</Program>En PuppyLinux /root/.jwmrc:
<RootMenu label="Menu" labeled="false" height="24" onroot="3">luego /root/.jwmrc-tray
<TrayButton label="[MENU]" popup="Open menú">exec:pymenu-globicons.py</TrayButton>Si usas Tint2, edita ~/.config/tint2/tint2rc:
# Lanzador
launcher_item_app = /usr/local/bin/pymenu-globicons.pyPyMenu puede integrarse con herramientas externas para funcionalidad extendida. Estas herramientas no están incluidas en este proyecto y son completamente opcionales:
- Una herramienta personalizada para configurar tu foto de perfil
- Configura la ruta en: Ajustes > Rutas > Gestor de perfil
- PyMenu funcionará sin esta herramienta
- Una interfaz personalizada de apagado/cierre de sesión
- Configura la ruta en: Ajustes > Rutas > Comando de apagado
- PyMenu funcionará sin esta herramienta
Nota: Los usuarios pueden especificar sus propias herramientas o scripts personalizados para estas funciones. Las rutas en la configuración son ejemplos y deben ajustarse a tu sistema.
# Ejecución básica
pymenu-globicons.py
# Con posición personalizada (x, y)
pymenu-globicons.py 100 100
# Con archivo JWM personalizado
pymenu-globicons.py /ruta/a/jwmrcpymenu-config.pyO desde el menú principal, haz clic en el icono de configuración.
- Esc: Cerrar el menú
- Alt + Clic Izquierdo: Mover la ventana
- Clic Central (rueda): Cerrar el menú
- Teclas de Flecha: Navegar por las aplicaciones
- Enter: Lanzar aplicación seleccionada
- Clic Derecho en app: Menú contextual
PyMenuPup/
├── README.md # Archivo principal (inglés)
├── README-es.md # Archivo principal (español)
├── TECHNICAL.md # Documentación técnica (inglés)
├── TECHNICAL-es.md # Documentación técnica (español)
├── pymenu-globicons.py # Menú principal
├── pymenu-config.py # Configurador GTK
├── pymenupuplang.py # Sistema de traducción
├── distro-linux/ # Configuraciones específicas de cada distro
│ ├── Essora/
│ │ ├── Pymenu-essora.py
│ │ ├── pymenu-config-essora.py
│ │ └── pymenupuplang.py
│ └── Trixiepup-Wayland/
│ └── Pymenu-trixiewayland.py
├── locale/ # Traducciones
│ ├── ar.lang # Árabe
│ ├── de.lang # Alemán
│ ├── es.lang # Español
│ ├── fr.lang # Francés
│ ├── it.lang # Italiano
│ ├── ja.lang # Japonés
│ ├── pt-BR.lang # Portugués (Brasil)
│ ├── pt-PT.lang # Portugués (Portugal)
│ ├── ru.lang # Ruso
│ └── template.lang # Plantilla base
└── screenshots/ # Capturas de pantalla
├── config-tool.png
└── main-menu.png
/usr/local/bin/
├── pymenu-globicons.py # Ejecutable del menú principal
├── pymenu-config.py # Ejecutable del configurador
└── pymenupuplang.py # Módulo de traducción
/usr/share/locale/pymenupup/
├── es.lang # Traducción español
└── fr.lang # Traducción francés
~/.config/pymenupup/
├── pymenu.json # Configuración principal
└── locale/ # Traducciones personalizadas del usuario (opcional)
└── es-custom.lang
~/.config/
├── pymenu.json # Configuración principal
└── tint2/
└── tint2rc # Config de Tint2 (si aplica)
~/
├── .jwmrc # Config de JWM
├── .jwmrc-tray # Config de bandeja JWM
└── .face # Foto de perfil
El archivo ~/.config/pymenu.json tiene esta estructura:
{
"window": {
"width": 700,
"height": 850,
"decorated_window": false,
"hide_header": false,
"hide_quick_access": false,
"hide_social_networks": false,
"hide_category_text": false,
"halign": "center",
"icon_size": 32,
"category_icon_size": 16,
"profile_pic_size": 128,
"profile_pic_shape": "square",
"header_layout": "left"
},
"font": {
"family": "Sans 12",
"size_categories": 12000,
"size_names": 10000,
"size_header": 8000
},
"colors": {
"use_gtk_theme": false,
"background": "rgba(0, 0, 0, 0.7)",
"border": "rgba(255, 255, 255, 0.1)",
"text_normal": "#D8DEE9",
"text_header_os": "#D8DEE9",
"text_header_kernel": "#D0883A",
"text_header_hostname": "#88C0D0",
"hover_background": "rgba(255, 255, 255, 0.1)",
"button_normal_background": "rgba(0,0,0,0.6)",
"button_text": "#ECEFF4",
"categories_background": "rgba(0,0,0,0.6)",
"use_gtk_theme": true
},
"paths": {
"profile_pic": "/root/.face",
"profile_manager": "/usr/local/bin/ProfileManager.py",
"shutdown_cmd": "/usr/local/bin/apagado-avatar.py",
"jwmrc_tray": "/root/.jwmrc-tray",
"tint2rc": "/root/.config/tint2/tint2rc"
},
"tray": {
"use_tint2": false
},
"categories": {
"excluded": []
}
}PyMenuPup busca iconos en estas rutas:
/usr/local/lib/X11/pixmaps/usr/share/pixmaps/usr/share/icons/hicolor/*/apps/usr/share/pixmaps/puppy
Coloca tus iconos en cualquiera de estas carpetas.
Edita el archivo de configuración para ocultar categorías específicas:
"categories": {
"excluded": ["Ayuda", "Salir", "Rectificar"]
}# Verifica que Python3 esté instalado
python3 --version
# Verifica las dependencias de GTK
python3 -c "import gi; gi.require_version('Gtk', '3.0'); from gi.repository import Gtk; print('GTK OK')"# Verifica las rutas de iconos en tu .jwmrc
grep IconPath ~/.jwmrc
# Reinstala el paquete de iconos
# (en Puppy Linux usualmente viene incluido)Si tu archivo .jwmrc contiene XML mal formado, el menú puede no cargarse completamente.
Incluso las secciones comentadas pueden causar errores si las etiquetas no están correctamente cerradas.
Ejemplo de un comentario incorrecto:
\<!-- comentario sin cerrar# Asegúrate de que los scripts sean ejecutables
chmod +x /usr/local/bin/pymenu-globicons.py
chmod +x /usr/local/bin/pymenu-config.py# Ejecuta desde la terminal para ver los errores
python3 /usr/local/bin/pymenu-globicons.py# Verifica que la foto de perfil exista
ls -la ~/.face
# O verifica la ruta configurada
grep profile_pic ~/.config/pymenu.json¡Las contribuciones son bienvenidas! Si quieres mejorar PyMenuPup:
- Haz un fork del repositorio
- Crea una rama para tu característica (
git checkout -b feature/CaracteristicaAsombrosa) - Haz commit de tus cambios (
git commit -m 'Agrega alguna CaracteristicaAsombrosa') - Haz push a la rama (
git push origin feature/CaracteristicaAsombrosa) - Abre un Pull Request
Este proyecto está licenciado bajo la Licencia GPL v3. Consulta el archivo LICENSE para más detalles.
Nilson Morales
- GitHub: @woofshahenzup
- Foro: Foro de Puppy Linux
- Al equipo de Puppy Linux por crear una distribución tan ligera y eficiente
- A Joe Wingbermuehle por JWM (Joe's Window Manager)
- A las comunidades de GTK y Python
- A todos los contribuidores del proyecto

¿Te gusta PyMenuPup? ¡Dale una estrella al repositorio!

