Manualinux
http://www.nvu.com http://www.gimp.org InicioPresentaciónActualizacionesManualesDescargasNoticiasAgradecimientoEnlaces

Entornos GráficosAplicaciones

Administradores de SesionesAdministradores de VentanasEscritoriosUtilidades de Escritorio

Administradores de Ventanas - JWMAdministradores de Ventanas - Pekwm

Administradores de Ventanas - Openbox

Página - 1Página - 2




Administradores de Ventanas - Openbox




Copyright

Copyright © José Luis Lara Carrascal  2006-2023   http://manualinux.es



Sumario

Introducción
Características
Instalación
Directorio de configuración personal
PyPanel
XbindKeys
Fondo de Escritorio
Añadir aplicaciones al inicio de Openbox
Configurar el inicio de Openbox
Iniciamos Openbox
ObConf
Traducción al Español alternativa de ObConf
Obmenu
Personalizar el comportamiento de las ventanas
Enlaces




Introducción  

Openbox es otro administrador de ventanas basado en el código de Blackbox, a diferencia de éste no tiene barra de tareas, por lo que necesitaremos un programa auxiliar que funcione como panel y barra de tareas. Además, instalaremos también todos los programas auxiliares expresamente desarrollados para este minimalista entorno gráfico, no muy conocido por la mayoría de usuarios de GNU/Linux.



Características    

* Cumple las normas ICCCM y EWMH
* Rápido y ligero.
* Soporte de atajos de teclado.
* Acciones configurables del ratón.
* Resistencia de ventanas.
* Soporte multipantalla Xinerama.
* Soporte de scripts ejecutables en los menús (pipemenús).



Instalación  

Dependencias

Herramientas de Compilación


Entre paréntesis la versión con la que se ha compilado Openbox para la elaboración de este documento.

* GCC - (13.1.0) o Clang - (16.0.6)
* Gawk - (5.2.2)
* M4 - (1.4.19)
* Libtool - (2.4.7)
* Make - (4.4.1)
* Automake - (1.16.5)
* Gettext - (0.22)
* Autoconf - (2.71)
* Pkg-config - (0.29.2)

Librerías de Desarrollo

* Xorg - (7.7 / xorg-server 21.1.8)
   LibICE - (1.1.1)
   LibSM - (1.2.4)
   LibX11 - (1.8.6)
   LibXau - (1.0.11)
   LibXcursor - (1.2.1)
   LibXext - (1.3.5)
   LibXft - (2.3.8)
   LibXinerama - (1.1.5)
   LibXrandr - (1.5.3)
* Fontconfig - (2.14.2)
* GLib - (2.74.7)
* Imlib2 - (1.11.1)
* Librsvg - (2.56.2)
* Libxml2 - (2.11.4)
* Pango - (1.50.14)
* Startup-Notification - (0.12)



Descarga

openbox-3.6.1.tar.xz

Optimizaciones

$ export {C,CXX}FLAGS='-O3 -march=znver3 -mtune=znver3'

Donde pone znver3 se indica el procesador respectivo de cada sistema seleccionándolo de la siguiente tabla:
Nota informativa sobre las optimizaciones para GCC
* La opción '-march=' establece el procesador mínimo con el que funcionará el programa compilado, la opción '-mtune=' el procesador específico para el que será optimizado. 

* Los valores separados por comas, son equivalentes, es decir, que lo mismo da poner '-march=k8' que '-march=athlon64'.

* En versiones de GCC 3.2 e inferiores se utiliza la opción '-mcpu=' en lugar de '-mtune='.
Nota informativa sobre las optimizaciones para Clang
* La opción '-mtune=' está soportada a partir de la versión 3.4 de Clang.

* Los valores de color azul no son compatibles con Clang.

* Las filas con el fondo de color amarillo son valores exclusivos de Clang y, por lo tanto, no son aplicables con GCC.
Valores CPU
Genéricos
Intel
AMD

Optimizaciones adicionales

Optimizaciones adicionales
GCC
Graphite
$ export {C,CXX}FLAGS+=' -ftree-loop-linear -floop-strip-mine -floop-block'
IPA
$ export {C,CXX}FLAGS+=' -fipa-pta'
LTO
$ export {C,CXX}FLAGS+=' -fuse-linker-plugin -flto=auto'
En versiones inferiores a GCC 10, sustituir auto por el número de núcleos que tenga nuestro procesador. Si sólo tiene uno, utilizar el parámetro -flto
PGO
1) Fase inicial de compilación e instalación del paquete.
$ export {C,CXX}FLAGS+=' -O2 -g1 -fprofile-generate=/var/pgo/openbox'
2) Ejecución y testeo del programa.
3) Fase final de compilación e instalación del paquete.
$ export {C,CXX}FLAGS+=' -fprofile-use=/var/pgo/openbox -Wno-error=coverage-mismatch'
Clang
Polly
$ export {C,CXX}FLAGS+=' -O3 -mllvm -polly -mllvm -polly-vectorizer=stripmine'
LTO
$ export {C,CXX}FLAGS+=' -flto'
ThinLTO
$ export {C,CXX}FLAGS+=' -flto=thin'
La aplicación de esta optimización es alternativa a la tradicional LTO, a partir de Clang 3.9 y, por lo tanto, no es combinable con la misma.
PGO
1) Fase inicial de compilación e instalación del paquete.
$ export {C,CXX}FLAGS+=' -O2 -g1 -fprofile-generate=/var/pgo/openbox'
2) Ejecución y testeo del programa.
3) Conversión del perfil de optimización a un formato legible por Clang.
$ PGODIR=/var/pgo/openbox; llvm-profdata merge $PGODIR/default_*.profraw --output=$PGODIR/default.profdata
4) Fase final de compilación e instalación del paquete.
$ export {C,CXX}FLAGS+=' -fprofile-use=/var/pgo/openbox'

Parámetros adicionales

Parámetros adicionales de eliminación de avisos en el proceso de compilación
$ export {C,CXX}FLAGS+=' -w'

Establecer la ruta de búsqueda de directorios de librerías en sistemas de 64 bits multiarquitectura
$ export LDFLAGS+=" -L/usr/lib64 -L/usr/local/lib64 -L/opt/gcc13/lib64"
Cada usuario tendrá que establecer la ruta de búsqueda de directorios, en función de la distribución que utilice.

Establecer el uso de enlazador dinámico para LLD
Clang
$ export LDFLAGS+=' -fuse-ld=lld'
Optimizaciones complementarias LTO/ThinLTO/PGO de LLD
$ export LDFLAGS+=' -Wl,--lto-aa-pipeline=globals-aa -Wl,--lto-newpm-passes=pgo-memop-opt'
Optimizaciones complementarias LTO de LLD
$ export LDFLAGS+=" -Wl,--lto-partitions=$(nproc)"
Optimizaciones complementarias ThinLTO de LLD
$ export LDFLAGS+=" -Wl,--thinlto-jobs=$(nproc)"

Establecer la variable de entorno de uso de compilador para Clang
$ export CC=clang CXX=clang++

Extracción y Configuración  Bloc de Notas Información general sobre el uso de los comandos

$ tar Jxvf openbox-3.6.1.tar.xz
$ cd openbox-3.6.1
$ ./configure --prefix=/usr --sysconfdir=/etc --disable-static --libdir=/usr/lib64

Explicación de los comandos

--prefix=/usr : Necesario si queremos que Openbox encuentre los temas al iniciarse.

--sysconfdir=/etc
: Instala los archivos de configuración en /etc/xdg/openbox.
--disable-static : Desactiva la compilación de las librerías estáticas, al no ser necesarias para la ejecución del programa.

--libdir=/usr/lib64 : Instala las librerías en /usr/lib64, en sistemas de 64 bits multiarquitectura. La ubicación y el nombre de este directorio, puede variar en función de la distribución que cada usuario use.

Compilación

$ make

Parámetros de compilación opcionales  

V=1 : Muestra más información en el proceso de compilación.

-j$(nproc): Establece el número de procesos de compilación en paralelo, en función del número de núcleos e hilos que tenga nuestro procesador, tomando como referencia la información mostrada por el sistema con el comando correspondiente. Si nuestro procesador es mononúcleo de un solo hilo, no añadir esta opción.

Instalación como root

$ su
# make install-strip
# ldconfig -v

Borrar las locales adicionales instaladas con la utilidad BleachBit  

# bleachbit -c system.localizations

Instalación de los archivos de configuración personal en nuestro home

$ cp -rf /etc/xdg/openbox ~/.config

Si ya tenemos instalado Openbox con el menú configurado sólo habrá que copiar el archivo rc.xml para actualizar la configuración a la nueva versión que se instale. Para cerciorarnos de que el nuevo archivo de configuración tiene algo nuevo respecto al que nosotros tenemos podemos copiar el archivo a un directorio temporal, abrirlo con un editor de texto y compararlo con el rc.xml que tenemos en nuestro home. BeeDiff es un excelente programa para la comparación de archivos, y en la web se encuentra disponible la versión en español del mismo.

Estadísticas de Compilación e Instalación de Openbox

Estadísticas de Compilación e Instalación de Openbox
CPU AMD Ryzen 5 5500
MHz 3593.250 (BoostMax=4457.000)
RAM 32 GB
Sistema de archivos XFS
Versión del Kernel 6.4.2-ml SMP PREEMPT_DYNAMIC x86_64
Modo de frecuencia de la CPU powersave (balance performance)
Versión de Glibc 2.37
Enlazador dinámico LLD 16.0.6
Compilador Clang 16.0.6
Parámetros de optimización -03 -march=znver3 -mtune=znver3 -mllvm -polly -mllvm -polly-vectorizer=stripmine -flto=thin -fprofile-use=/var/pgo/openbox -Wl,--lto-aa-pipeline=globals-aa -Wl,--lto-newpm-passes=pgo-memop-opt
Parámetros de compilación V=1 -j12
Tiempo de compilación 4"
Archivos instalados 113
Mostrar/Ocultar la lista de archivos instalados
Enlaces simbólicos creados 4
Mostrar/Ocultar la lista de enlaces simbólicos creados
Ocupación de espacio en disco 1,2 MB

Consumo inicial de CPU y RAM de Openbox
 
Consumo inicial de CPU y RAM de Openbox
Programa
CPU RAM
openbox 0 % 8,7 MB
Para medir el consumo de CPU se utiliza el programa top, y para medir el consumo de RAM se utiliza el script de Python, ps_mem.py, creado por Pádraig Brady, que podemos encontrar en este enlace.

Directorio de configuración personal   

~/.config/openbox Es el directorio de configuración personal de Openbox en nuestro home.
~/.config/openbox/autostart Es el script de inicio automático de aplicaciones. La forma de añadirlas la explico en este apartado del manual. Desde la versión 3.5.0, se le ha quitado la extensión ".sh", y pasa a tener permisos de ejecución.
~/.config/openbox/environment Desde la versión 3.5.0, se incluye este archivo de configuración, mediante el cual podemos establecer variables de entorno personalizadas.
~/.config/openbox/rc.xml Es el archivo de configuración de Openbox y se edita con ObConf.
~/.config/openbox/menu.xml Es el archivo de configuración del menú de Openbox y se edita con Obmenu. Desde la versión 3.5.0, soporta iconos de las aplicaciones (y desde la 3.5.1, también en formato SVG). Un ejemplo:

<item label="VLC media player" icon="/usr/share/icons/hicolor/32x32/apps/vlc.png">
 <action name="Execute">
  <execute>
   vlc
  </execute>
 </action>
</item>

openbox-icono

ObMenu no soporta iconos de las aplicaciones, por lo que las entradas de los mismos las tendremos que incluir de forma manual.
~/.themes Openbox utiliza el mismo directorio para los temas que GTK+

Desinstalación como root

1) MODO TRADICIONAL

En el directorio de compilación ejecutamos el siguiente comando:

$ su -c "make uninstall"

2) MODO MANUALINUX

El principal inconveniente del comando anterior es que tenemos que tener el directorio de compilación en nuestro sistema para poder desinstalar el programa. En algunos casos esto supone muchos megas de espacio en disco. Con el paquete de scripts que pongo a continuación logramos evitar el único inconveniente que tiene la compilación de programas, y es el tema de la desinstalación de los mismos sin la necesidad de tener obligatoriamente una copia de las fuentes compiladas.

openbox-3.6.1-scripts.tar.gz

$ su
# tar zxvf openbox-3.6.1-scripts.tar.gz
# cd openbox-3.6.1-scripts
# ./Desinstalar_openbox-3.6.1

Copia de Seguridad como root

Con este otro script creamos una copia de seguridad de los binarios compilados, recreando la estructura de directorios de los mismos en un directorio de copias de seguridad (copibin) que se crea en el directorio /var. Cuando se haya creado el paquete comprimido de los binarios podemos copiarlo como usuario a nuestro home y borrar el que ha creado el script de respaldo, teniendo en cuenta que si queremos volver a restaurar la copia, tendremos que volver a copiarlo al lugar donde se ha creado.

$ su
# tar zxvf openbox-3.6.1-scripts.tar.gz
# cd openbox-3.6.1-scripts
# ./Respaldar_openbox-3.6.1

Restaurar la Copia de Seguridad como root

Y con este otro script (que se copia de forma automática cuando creamos la copia de respaldo del programa) restauramos la copia de seguridad como root cuando resulte necesario.

$ su
# cd /var/copibin/restaurar_copias
# ./Restaurar_openbox-3.6.1



PyPanel 

Openbox no tiene barra de tareas, así que lo mejor es añadirle un panel, podríamos usar fbpanel, pero elijo uno más desconocido escrito en Python, se llama PyPanel.

Características

* Soporte de transparencias con sombreado y tintado.
* Configuración de tamaño, colocación y diseño.
* Soporte de fuentes truetype con coloreado y sombreado.
* Botón de eventos/acciones.
* Reloj y nombre de Escritorio.
* Ocultado automático.
* Lanzador de aplicación.
* Soporte de iconos de aplicaciones.

Instalación

Dependencias

Herramientas de Compilación


Entre paréntesis la versión con la que se ha compilado PyPanel para la elaboración de este documento.

* GCC - (13.1.0)
* Pkg-config - (0.29.2)

Librerías de Desarrollo

* Xorg - (7.7 / xorg-server 21.1.8)
   LibX11 - (1.8.6)
   LibXft - (2.3.8)
* Freetype2 - (2.13.1)
* Imlib2 - (1.11.1)
* Python - (2.7.18)
* Python Xlib - (0.33)
* Zlib - (1.2.13)



Descarga

PyPanel-2.4.tar.gz  |  PyPanel_imlib2.diff

Optimizaciones

Optimizaciones adicionales

Optimizaciones adicionales
Graphite
$ export {C,CXX}FLAGS+=' -ftree-loop-linear -floop-strip-mine -floop-block'
IPA
$ export {C,CXX}FLAGS+=' -fipa-pta'
LTO
$ export {C,CXX}FLAGS+=' -fuse-linker-plugin -flto=auto'
En versiones inferiores a GCC 10, sustituir auto por el número de núcleos que tenga nuestro procesador. Si sólo tiene uno, utilizar el parámetro -flto

Extracción y Compilación

$ tar zxvf PyPanel-2.4.tar.gz
$ cd PyPanel-2.4
$ patch -Np1 -i ../PyPanel_imlib2.diff
$ chmod a+x *-config
$ sed -i "18s:/usr/lib:$(pkg-config --variable=libdir imlib2):" setup.py
$ python2 setup.py build


Explicación de los comandos

patch -Np1 -i  ../PyPanel_imlib2.diff : Aplicamos este parche personal para poder compilar el paquete con las últimas versiones de Freetype2 e Imlib2. El parche lo que hace es, añadir dos versiones reducidas de los eliminados archivos freetype-config e imlib2-config, adaptados para que se utilice el comando pkg-config para buscar las dependencias del paquete.

chmod a+x *-config : Otorga permisos de ejecución a los nuevos archivos añadidos.

sed -i "18s:/usr/lib:$(pkg-config --variable=libdir imlib2):" setup.py : Modifica el archivo setup.py para añadir la ruta correcta a la librería imlib2, utilizando pkg-config para obtener la información.

Instalación como root

$ su -c "python setup.py install"

Estadísticas de Compilación e Instalación de PyPanel

Estadísticas de Compilación e Instalación de PyPanel
CPU AMD Ryzen 5 5500
MHz 3593.246 (BoostMax=+500)
RAM 32 GB
Sistema de archivos XFS
Versión del Kernel 6.4.2-ml SMP PREEMPT_DYNAMIC x86_64
Modo de frecuencia de la CPU powersave (balance performance)
Versión de Glibc 2.37
Enlazador dinámico GNU gold (Binutils 2.40) 1.16
Compilador GCC 13.1.0
Parámetros de optimización -03 -march=znver3 -mtune=znver3 -ftree-loop-linear -floop-strip-mine -floop-block -fipa-pta -fuse-linker-plugin -flto=auto
Tiempo de compilación 1"
Archivos instalados 6
Mostrar/Ocultar la lista de archivos instalados
Ocupación de espacio en disco 96 KB

Consumo inicial de CPU y RAM de PyPanel

Consumo inicial de CPU y RAM de PyPanel
Programa
CPU RAM
python-64 0 % 15,1 MB
pypanel 0 % 116,5 KB
TOTAL 0 % 15,2 MB
Para medir el consumo de CPU se utiliza el programa top, y para medir el consumo de RAM se utiliza el script de Python, ps_mem.py, creado por Pádraig Brady, que podemos encontrar en este enlace.

Archivo de configuración personal

~/.pypanelrc Es el archivo de configuración personal de PyPanel en nuestro home.

Desinstalación como root

1) MODO TRADICIONAL

*************************

2) MODO MANUALINUX  

PyPanel-2.4-scripts.tar.gz

$ su
# tar zxvf PyPanel-2.4-scripts.tar.gz
# cd PyPanel-2.4-scripts
# ./Desinstalar_PyPanel-2.4

Copia de Seguridad como root

$ su
# tar zxvf PyPanel-2.4-scripts.tar.gz
# cd PyPanel-2.4-scripts
# ./Respaldar_PyPanel-2.4

Restaurar la Copia de Seguridad como root

$ su
# cd /var/copibin/restaurar_copias
# ./Restaurar_PyPanel-2.4



Configuración de PyPanel >> ~/.pypanelrc  Bloc de Notas Nota importante

A continuación pongo un ejemplo del archivo de configuración de PyPanel con los comentarios traducidos al español

#------------------------------------------------------------------------------
#
#                         Configuración de PyPanel v2.4
#
# Este archivo de configuración es un script de Python que es ejecutado cuando
# PyPanel es iniciado. Para que PyPanel se inicie propiamente, compruebe que este
# archivo esté correctamente formateado en Python y no contenga errores de sintaxis.
#------------------------------------------------------------------------------
VERSION         = 2.4           # Versión del archivo de configuración

#------------------------------------------------------------------------------
# Colores: El formato es hexadecimal triplicado - 0xrrggbb
#------------------------------------------------------------------------------
BG_COLOR        = "0xd6d6d6"    # El color del fondo del Panel y el del tintado.
TASK_COLOR      = "0x000000"    # El color del nombre de la ventana cuando no está enfocada.
FOCUSED_COLOR   = "0x1826de"    # El color del nombre de la ventana cuando está enfocada.
SHADED_COLOR    = "0x808080"    # El color del nombre de la ventana cuando está enrollada.
MINIMIZED_COLOR = "0x808080"    # El color del nombre la ventana cuando está minimizada.
DESKTOP_COLOR   = "0x000000"    # El color del nombre del Escritorio.
CLOCK_COLOR     = "0x000000"    # El color del texto del Reloj.
LINE_COLOR      = "0x606060"    # El color de la línea vertical.

# Colores de la sombra arrojada del texto
TASK_SHADOW_COLOR      = "0xffffff"
FOCUSED_SHADOW_COLOR   = "0xffffff"
SHADED_SHADOW_COLOR    = "0xffffff"
MINIMIZED_SHADOW_COLOR = "0xffffff"
DESKTOP_SHADOW_COLOR   = "0xffffff"
CLOCK_SHADOW_COLOR     = "0xffffff"

#------------------------------------------------------------------------------
# Opciones de ubicación y espaciado del Panel: Medidas en píxeles
#------------------------------------------------------------------------------
P_LOCATION      = 1             # Posición del Panel: 0 = arriba, 1 = abajo
P_WIDTH         = 944           # Anchura del Panel: 0 = Usa toda la pantalla completa a lo ancho
P_START         = 40            # Coordenada X de inicio del Panel
P_SPACER        = 6             # Espacio entre los objetos del Panel
P_HEIGHT        = 24            # Altura del Panel

#------------------------------------------------------------------------------
# Opciones de tamaño de los iconos: Medidas en píxeles
#------------------------------------------------------------------------------
I_HEIGHT        = 16            # Altura del icono de la aplicación que se muestra en el Panel
I_WIDTH         = 16            # Anchura del icono del la aplicación que se muestra en el Panel
APPL_I_HEIGHT   = 24            # Altura de icono lanzador de la aplicación
APPL_I_WIDTH    = 24            # Anchura de icono lanzador de la aplicación

TRAY_I_HEIGHT   = 24            # Altura del icono mostrado en la bandeja del sistema (normalmente 16 o 24)
TRAY_I_WIDTH    = 24            # Anchura del icono mostrado en la bandeja del sistema (normalmente 16 o 24)

                                # Si TRAY_I_WIDTH está ajustado a 0, se utilizará la anchura especificada por
                                # la aplicación que se ubique en la bandeja del sistema
                               
#------------------------------------------------------------------------------
# Formato del reloj del Panel: 'man strftime' para una detallada información acerca del formato.
#------------------------------------------------------------------------------
CLOCK_FORMAT    = "%d-%m-%Y %H:%M"    # Ejemplo: 2004-09-25 17:45
                       
#------------------------------------------------------------------------------
# Retardo del reloj: Los segundos entre cada actualización del reloj durante los periodo de inactividad
#------------------------------------------------------------------------------
CLOCK_DELAY     = 20

#------------------------------------------------------------------------------
# Listado de aplicaciones a ocultar: Las aplicaciones listadas aquí no serán mostradas en el panel.
# El nombre de la aplicación es el nombre WM_CLASS,usar 'xprop' para averiguar WM_CLASS
# Ejemplo: ["xmms", "xine", "gDesklets"]
#------------------------------------------------------------------------------
HIDE_LIST       = []           
                  
#------------------------------------------------------------------------------
# Tamaño del Panel cuando está oculto: Tamaño del panel cuando está minimizado/oculto
#------------------------------------------------------------------------------
HIDDEN_SIZE     = 2

#------------------------------------------------------------------------------
# Fuente del texto del Panel: Esta opción acepta cualquiera: tradicional o Xft
# Ejemplo: "-schumacher-clean-medium-r-normal-*-12-*-*-*-*-*-*-*"
#     "aquafont-8"
#------------------------------------------------------------------------------
FONT            = "DejaVuSans-10"

#------------------------------------------------------------------------------
# Mostrar todas las aplicaciones: Muestra las aplicaciones en todos los escritorios o sólo en el actual
# 0: Desactivado - Sólo las aplicaciones del escritorio actual serán mostradas
# 1: Activado  - Las aplicaciones seleccionadas son movidas al escritorio actual. 
# 2: Activado  - El escritorio actual es cambiado al escritorio donde están las aplicaciones seleccionadas.
#------------------------------------------------------------------------------
SHOWALL         = 0             # 0, 1 or 2 - vea las descripciones anteriores

#------------------------------------------------------------------------------
# Mostrar las aplicaciones Minimizadas/Iconificadas: Muestra sólo las aplicaciones minimizadas
# o todas las aplicaciones
# 0: Desactivado - Muestra todas las aplicaciones en el panel
# 1: Activado  - Muestra sólo las aplicaciones minimizadas en el panel
#------------------------------------------------------------------------------
SHOWMINIMIZED   = 0

#------------------------------------------------------------------------------
# Listado de icono de aplicación: Listado de iconos personalizados para aplicaciones específicas
# El nombre de la aplicación es el nombre WM_CLASS,usar 'xprop' para averiguar WM_CLASS

#
# La entrada "default" es usada para las aplicaciones que no tienen icono. Si a la izquierda está "",
# PyPanel usará el icono predefinido distribuido con el código fuente.
#
# Añadir entradas usando el siguiente formato -
#     "<nombre de la aplicación>" : "<ruta completa al icono>",
#------------------------------------------------------------------------------
ICON_LIST       = {
                   "default" : "",
                   "example" : "/usr/share/imlib2/data/images/audio.png",
                  }
                 
#------------------------------------------------------------------------------
# Listado del lanzador de aplicación: Lista ordenada de los iconos y las aplicaciones
# para el lanzador de aplicación.
#                      
#
# Añadir entradas usando el siguiente formato -

#     ("<ejecutable>", "<ruta completa al icono>")
#------------------------------------------------------------------------------
LAUNCH_LIST     = [
                   ("gimp", "/usr/share/imlib2/data/images/paper.png"),
                   ("mrxvt","/usr/local/share/pixmaps/mrxvt.png"),
                   ("firefox", "/usr/share/icons/firefox.png"),
                  ]

#------------------------------------------------------------------------------
# Nivel de transparencia del Fondo del Panel: 0 (Totalmente translúcido) -> 255 (Totalmente opaco)
# BG_COLOR es usado para el tintado
#------------------------------------------------------------------------------
SHADE           = 220

#------------------------------------------------------------------------------
# Opciones varias: 1 = Activado/Si, 0 = Desactivado/No
#------------------------------------------------------------------------------
ABOVE           = 1             # El Panel está siempre por encima de las otras aplicaciones
APPICONS        = 1             # Muestra los iconos de la aplicación
AUTOHIDE        = 0             # El ocultado automático usa el cronómetro de CLOCK_DELAY 
SHADOWS         = 0             # Muestra sombras en el texto
SHOWLINES       = 0             # Muestra líneas de separación del objeto
SHOWBORDER      = 0             # Muestra un borde alrededor del panel

#------------------------------------------------------------------------------
# Nombres de los Escritorios: Configura los nombres de sus escritorios
# Si la opción es[], PyPanel intentará usar el nombre especificado por
# el servidor X, si eso falla usará el número del escritorio como un nombre
# Ejemplo. ["Uno", "Dos", "Tres", "Cuatro", "Cinco", "Seis", "Siete", "Ocho"]
#------------------------------------------------------------------------------
DESKTOP_NAMES   = ["Uno", "Dos", "Tres", "Cuatro"]

#------------------------------------------------------------------------------
# Disposición del Panel:       -----------------------------------
#                     [  1  ][  2  ][  3  ][  4  ][  5  ]
#                     -----------------------------------
#
# La disposición del Panel está dividida en 5 secciones numeradas: 1, 2, 3, 4 o 5 cómo se
# muestra en el diagrama anterior. Cada uno de los objetos siguientes puede habilitarse 
# asignándole un número de la sección o deshabilitarse asignándole 0:
#------------------------------------------------------------------------------
DESKTOP         = 1             # Sección del nombre del Escritorio
TASKS           = 4             # Sección de los nombres de las Tareas
TRAY            = 3             # Sección de la bandeja del sistema
CLOCK           = 5             # Sección del Reloj
LAUNCHER        = 2             # Sección del lanzador de aplicación

#------------------------------------------------------------------------------
#                       Definiciones de la función de eventos del Botón
#------------------------------------------------------------------------------
# Clic izquierdo   - botón 1
# Clic central     - botón 2
# Clic derecho     - botón 3
# Rueda arriba     - botón 4
# Rueda abajo      - botón 5
#
# changeDesktop(x)
# - Cambia de Escritorio: Incrementa o disminuye el escritorio actual por una cantidad "x"
#
# toggleShade(task)
# - Enrolla o Desenrrolla la ventana de una aplicación
#
# toggleHidden()
# - Minimiza el panel arriba o abajo en función de la posición de inicio
#
# toggleMinimize(task, traise=1)
# - Minimiza o No la ventana de una aplicación y opcionalmente la eleva 

#
# taskRaise(task, focus=1)
# - Eleva la ventana de una aplicación a la cabeza de la lista de ventanas y opcionalmente la enfoca
#
# taskLower(task, focus=0)
# - Desciende la ventana de una aplicación a la cola de la lista de ventanas y opcionalmente la enfoca
#
# taskFocus(task)
# - Da el enfoque a la aplicación seleccionada, si tiene el enfoque, entonces la minimiza
#
# showDesktop()
# - Alterna entre ocultar y mostrar las ventanas de todas las aplicaciones
#------------------------------------------------------------------------------

#----------------------------------
def desktopButtonEvent(pp, button):
#----------------------------------
    """ Secuencias de eventos del botón para el objeto escritorio del Panel """
       
    if button == 1:
        pp.changeDesktop(-1)
    elif button == 2:
        pp.changeDesktop(2)
    elif button == 3:
        pp.changeDesktop(1)
    elif button == 4:
        pp.changeDesktop(1)
    elif button == 5:
        pp.changeDesktop(-1)
       
#--------------------------------
def clockButtonEvent(pp, button):
#--------------------------------
    """ Secuencias de eventos del botón para el objeto reloj del Panel """
   
    if button == 1:
        os.system("xclock &")
    elif button == 2:
        pass
    elif button == 3:
        pp.toggleHidden() 
    elif button == 4:
        pp.showDesktop()
    elif button == 5:
        pp.showDesktop()
       
#--------------------------------
def panelButtonEvent(pp, button):
#--------------------------------
    """ Secuencias de eventos del botón para el Panel con las tareas desactivadas """
   
    if button == 1:
        pass
    elif button == 2:
        pass
    elif button == 3:
        pass
    elif button == 4:
        pass
    elif button == 5:
        pass
       
#-------------------------------------
def taskButtonEvent(pp, button, task):
#-------------------------------------
    """ Secuencias de eventos del botón para las tareas del Panel  """
   
    if button == 1:
        pp.taskFocus(task)
    elif button == 2:
        # Destroy the application
        task.obj.destroy()
    elif button == 3:
        # Ejemplo. - La ventana de XMMS no se enrolla, para que nosotros queramos minimizarla en lugar de y
        # aún use el botón 3 para enrollar las ventanas de otras aplicaciones
        # task.tclass es el nombre de la clase de tarea (WM_CLASS)
        if "xmms" in task.tclass:
            pp.toggleMinimize(task)
        else:
            pp.toggleShade(task)
    elif button == 4:
        pp.taskRaise(task, focus=1)
    elif button == 5:
        pp.taskLower(task, focus=0)
       

Si se va a utilizar este archivo de configuración con los comentarios traducidos al español, como archivo de configuración personal de PyPanel, en sistemas con las locales en es_ES.UTF-8, añadir al comienzo del mismo, en el editor de texto donde copiemos el contenido, lo siguiente:

# -*- coding: utf-8 -*-

Si queremos añadirle un menú de inicio y un control de volumen a PyPanel, conviene leerse el manual de myGtkMenu, y el manual de Volume Icon.



XbindKeys    

Este programa es un gestor de atajos de teclado y nos permite de una manera muy sencilla añadir los atajos de teclado de las aplicaciones o comandos que queramos configurar para que se inicien a través del teclado. Permite la combinación del teclado con el ratón, con lo que aumenta de manera considerable las posibilidades de configuración.

Instalación

Dependencias

Herramientas de Compilación


Entre paréntesis la versión con la que se ha compilado XbindKeys para la elaboración de este documento.

* GCC - (13.1.0) o Clang - (16.0.6)
* M4 - (1.4.19)
* Libtool - (2.4.7)
* Make - (4.4.1)
* Automake - (1.16.5)
* Autoconf - (2.71)
* Pkg-config - (0.29.2)

Librerías de Desarrollo

* Xorg - (7.7 / xorg-server 21.1.8)
   LibICE - (1.1.1)
   LibX11 - (1.8.6)
* Guile - (2.2.7)
* Tk - (8.6.13)



Descarga

xbindkeys-1.8.7.tar.gz

Optimizaciones

Optimizaciones adicionales

Optimizaciones adicionales
GCC
Graphite
$ export {C,CXX}FLAGS+=' -ftree-loop-linear -floop-strip-mine -floop-block'
IPA
$ export {C,CXX}FLAGS+=' -fipa-pta'
LTO
$ export {C,CXX}FLAGS+=' -fuse-linker-plugin -flto=auto'
En versiones inferiores a GCC 10, sustituir auto por el número de núcleos que tenga nuestro procesador. Si sólo tiene uno, utilizar el parámetro -flto
Clang
Polly
$ export {C,CXX}FLAGS+=' -O3 -mllvm -polly -mllvm -polly-vectorizer=stripmine'
LTO
$ export {C,CXX}FLAGS+=' -flto'
ThinLTO
$ export {C,CXX}FLAGS+=' -flto=thin'
La aplicación de esta optimización es alternativa a la tradicional LTO, a partir de Clang 3.9 y, por lo tanto, no es combinable con la misma.

Parámetros adicionales

Parámetros adicionales de eliminación de avisos en el proceso de compilación
$ export {C,CXX}FLAGS+=' -w'

Establecer la ruta de búsqueda de directorios de librerías en sistemas de 64 bits multiarquitectura
$ export LDFLAGS+=" -L/usr/lib64 -L/usr/local/lib64 -L/opt/gcc13/lib64"
Cada usuario tendrá que establecer la ruta de búsqueda de directorios, en función de la distribución que utilice.

Establecer el uso de enlazador dinámico para LLD
Clang
$ export LDFLAGS+=' -fuse-ld=lld'
Optimizaciones complementarias LTO/ThinLTO de LLD
$ export LDFLAGS+=' -Wl,--lto-aa-pipeline=globals-aa -Wl,--lto-newpm-passes=memcpyopt'
Optimizaciones complementarias LTO de LLD
$ export LDFLAGS+=" -Wl,--lto-partitions=$(nproc)"
Optimizaciones complementarias ThinLTO de LLD
$ export LDFLAGS+=" -Wl,--thinlto-jobs=$(nproc)"

Establecer la variable de entorno de uso de compilador para Clang
$ export CC=clang CXX=clang++

Extracción y Configuración  Bloc de Notas

$ tar zxvf xbindkeys-1.8.7.tar.gz
$ cd xbindkeys-1.8.7
$ ./configure

Compilación

$ make

Parámetros de compilación opcionales

Instalación como root

$ su -c "make install-strip"

Estadísticas de Compilación e Instalación de XbindKeys

Estadísticas de Compilación e Instalación de XbindKeys
CPU AMD Ryzen 5 5500
MHz 3593.250 (BoostMax=4457.000)
RAM
32 GB
Sistema de archivos XFS
Versión del Kernel 6.4.2-ml SMP PREEMPT_DYNAMIC x86_64
Modo de frecuencia de la CPU powersave (balance performance)
Versión de Glibc 2.37
Enlazador dinámico LLD 16.0.6
Compilador Clang 16.0.6
Parámetros de optimización -03 -march=znver3 -mtune=znver3 -mllvm -polly -mllvm -polly-vectorizer=stripmine -flto=thin -Wl,--lto-aa-pipeline=globals-aa -Wl,--lto-newpm-passes=memcpyopt
Parámetros de compilación -j12
Tiempo de compilación > 1"
Archivos instalados 4
Mostrar/Ocultar la lista de archivos instalados
Ocupación de espacio en disco 60 KB

Consumo inicial de CPU y RAM de XbindKeys

Consumo inicial de CPU y RAM de XbindKeys
Programa
CPU RAM
xbindkeys 0 % 2,9 MB
Para medir el consumo de CPU se utiliza el programa top, y para medir el consumo de RAM se utiliza el script de Python, ps_mem.py, creado por Pádraig Brady, que podemos encontrar en este enlace.

Archivo de configuración personal

~/.xbindkeysrc Es el archivo de configuración personal de XbindKeys en nuestro home

Desinstalación como root

1) MODO TRADICIONAL

En el directorio de compilación ejecutamos el siguiente comando como root:

$ su -c "make uninstall"

2) MODO MANUALINUX

xbindkeys-1.8.7-scripts.tar.gz

$ su
# tar zxvf xbindkeys-1.8.7-scripts.tar.gz
# cd xbindkeys-1.8.7-scripts
# ./Desinstalar_xbindkeys-1.8.7

Copia de Seguridad como root

$ su
# tar zxvf xbindkeys-1.8.7-scripts.tar.gz
# cd xbindkeys-1.8.7-scripts
# ./Respaldar_xbindkeys-1.8.7

Restaurar la Copia de Seguridad como root

$ su
# cd /var/copibin/restaurar_copias
# ./Restaurar_xbindkeys-1.8.7



Para crear el archivo de configuración ejecutamos el siguiente comando:

xbindkeys --defaults > ~/.xbindkeysrc

 Lo abrimos con un editor de texto y añadimos los atajos de teclado que creamos oportuno, un ejemplo:

# For the benefit of emacs users: -*- shell-script -*-
###########################
# xbindkeys configuration #
###########################
#
# Version: 1.8.7
#
# If you edit this file, do not forget to uncomment any lines
# that you change.
# The pound(#) symbol may be used anywhere for comments.
#
# To specify a key, you can use 'xbindkeys --key' or
# 'xbindkeys --multikey' and put one of the two lines in this file.
#
# The format of a command line is:
#    "command to start"
#       associated key
#
#
# A list of keys is in /usr/include/X11/keysym.h and in
# /usr/include/X11/keysymdef.h
# The XK_ is not needed.
#
# List of modifier:
#   Release, Control, Shift, Mod1 (Alt), Mod2 (NumLock),
#   Mod3 (CapsLock), Mod4, Mod5 (Scroll).
#

# The release modifier is not a standard X modifier, but you can
# use it if you want to catch release events instead of press events

# By defaults, xbindkeys does not pay attention with the modifiers
# NumLock, CapsLock and ScrollLock.
# Uncomment the lines above if you want to pay attention to them.

#keystate_numlock = enable
#keystate_capslock = enable
#keystate_scrolllock= enable

# Examples of commands:

"xbindkeys_show"
  control+shift + q

# set directly keycode (here control + f with my keyboard)
"xterm"
  c:41 + m:0x4

# specify a mouse button
"xterm"
  control + b:2
"sylpheed-claws"
Mod1+s
"rox ~/"
Mod1+j
"mrxvt"
Mod1+z
"fpm"
Mod1+p
"firefox"
Mod1+f
"xrefresh"
Mod1+F5
"aterm -tr -sh 70"
Mod1+a
"sudo halt"
Control+Mod1+h
"sudo reboot"
Control+Mod1+r
"rxvt -e tor"
Control+Mod1+t
"/usr/apps/System/AppRun"
Control+Mod1+s
"opera"
Mod1+o
"import ~/Capturas/screenshot.png"
Mod1+Mod4+p
"gftp"
Mod1+Mod4+g
"leafpad"
Mod1+Mod4+l
#"xterm -geom 50x20+20+20"
#   Shift+Mod2+alt + s
#
## set directly keycode (here control+alt+mod2 + f with my keyboard)
#"xterm"
#  alt + c:0x29 + m:4 + mod2
#
## Control+Shift+a  release event starts rxvt
#"rxvt"
#  release+control+shift + a
#
## Control + mouse button 2 release event starts rxvt
#"rxvt"
#  Control + b:2 + Release

##################################
# End of xbindkeys configuration #
##################################

El modo de añadirlo es el siguiente, entre comillas el comando a ejecutar y debajo sin comillas la combinación de las teclas a usar o el ratón.

"opera"
Mod1+o

Si lo ejecutamos en combinación con el botón derecho del ratón sería lo siguiente:

"opera"
Mod1+b:2

Recordar también que la rueda del ratón desplazada hacia abajo es 'b:4' y hacia arriba, 'b:5'. En el manual de Xcompmgr viene una configuración específica de XbindKeys para poder activar y regular las transparencias de las ventanas, utilizando la rueda del ratón, con la utilidad Transset, que nos puede servir de ejemplo.
 
La lista de modificadores a usar es la siguiente:

Release, Control, Shift, Mod1 (Alt), Mod2 (NumLock), Mod3 (CapsLock), Mod4 (Windows), Mod5 (Scroll)


Dónde NumLock, CapsLock y ScrollLock están desactivados por defecto en cuanto a usar en las combinaciones de teclado. Para activarlos hay que descomentar las siguientes líneas:

#keystate_numlock = enable
#keystate_capslock = enable
#keystate_scrolllock= enable

Por último ejecutando control+mayúsc +q, o xbindkeys_show en una terminal, nos saldrá una pantalla con la información de los atajos que tengamos configurados.

Captura - XbindKeys



Fondo de Escritorio  

Para poner una imagen en el fondo de la pantalla voy a usar Esetroot, si buscamos algo más sofisticado con soporte de alternancia de imágenes y además nos gustan los iconos en la pantalla lo mejor es usar Idesk pero esto es sólo una idea, existen más programas en GNU/Linux que permiten la alternancia de imágenes, lo comento porque es el que suelo usar a diario, cuestión de comodidad. La forma de lanzar Esetroot al inicio la explico en la sección de abajo. Para más información sobre Esetroot y otros setters me remito a este manual.



Añadir aplicaciones al inicio de Openbox  

Al igual que sucede en Fluxbox o Pekwm, a partir de la versión 3.4, Openbox incluye un script de ejecución para aquellas aplicaciones que queremos que se inicien junto con el administrador de ventanas. Cogemos el archivo ~/.config/openbox/autostart y añadimos todos los programas que se van a iniciar al mismo tiempo que Openbox, con lo que evitamos tener que crear un script tipo startopenbox como sucedía con las anteriores versiones de Openbox. Podemos sin ningún problema borrar el contenido por defecto que tiene y añadir los comandos siguientes, por ejemplo:

sleep 5 && pypanel &
xbindkeys &
Esetroot -scale ~/Fondos/2163.jpg

No olvidar nunca cerrar los comandos de ejecución de las aplicaciones contenidas en este archivo (excepto las que se encargan de colocar una imagen de fondo, en éstas no es necesario) con el símbolo '&', de lo contrario, Openbox no podrá iniciarse nunca.


Foro Galería Blog


Página - 1Página - 2

Actualizado el 06-07-2023

Administradores de Ventanas - Openbox

Administradores de Ventanas - JWMAdministradores de Ventanas - Pekwm