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

Entornos GráficosAplicaciones

Administradores de SesionesAdministradores de VentanasEscritoriosUtilidades de Escritorio

Administradores de Ventanas - OpenboxAdministradores de Ventanas - Qlwm

Administradores de Ventanas - Pekwm




Administradores de Ventanas - Pekwm




Copyright

Copyright © José Luis Lara Carrascal  2006-2024   http://manualinux.eu



Sumario

Introducción
Características
Preliminares
Instalación
Directorio de configuración personal
Configuración de Pekwm
Hsetroot
Paquetes binarios de Hsetroot
Configurar el inicio de Pekwm
Iniciamos Pekwm
Enlaces




Introducción  

Basado en el administrador de ventanas, Aewm++, Pekwm se caracteriza por su amplio número de opciones y posibilidades igualando a otros administradores de ventanas más conocidos como Fluxbox. A diferencia de éste y al igual que sucede con Openbox no posee barra de tareas, por lo que utilizaremos un programa auxiliar. En este caso y para variar respecto al manual de Openbox me decantaré por Fbpanel, una opción muy válida escrita en GTK2.

A partir de la versión 0.2.0, se han incluido nuevos elementos que convierten a Pekwm en algo más que un simple administrador de ventanas, entre ellos, un panel, bastante más díficil de configurar que la opción rápida de recurrir a un panel de escritorio independiente, que es lo que seguiremos haciendo en este manual.



Características  

* Posibilidad de agrupar las ventanas en una sola.
* Menú configurable con soporte de iconos.
* Soporte de atajos de teclado.
* Acciones configurables del ratón.
* Posición de ventanas configurable.
* Soporte multipantalla Xinerama.
* Temas (instalables desde la web de Pekwm, con el programa pekwm_theme)
* Suavizado de fuentes.
* Posibilidad de memorizar las propiedades de las ventanas.
* Panel configurable con soporte de widgets y scripts.



Preliminares  

1) Comprobar que la ruta de instalación de los binarios del programa la tenemos en nuestro PATH


Abrimos una ventana de terminal y ejecutamos el siguiente comando:

[jose@Fedora-18 ~]$ echo $PATH
/usr/lib/qt-3.3/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/jose/bin

Si no aparece entre las rutas mostradas el directorio /usr/local/bin, abrimos un editor de texto y añadimos lo siguiente:

#!/bin/sh

export PATH=/usr/local/bin:$PATH

Lo guardamos con el nombre variables.sh, y lo instalamos en /etc/profile.d.

$ su -c "install -m755 variables.sh /etc/profile.d"

Tenemos que cerrar el emulador de terminal y volverlo a abrir para que la variable de entorno aplicada sea efectiva. Es conveniente guardar una copia de este script para posteriores instalaciones de nuestro sistema, teniendo en cuenta que es el que se va a utilizar a partir de ahora en todos los manuales de esta web, para establecer variables de entorno globales, excepto en aquellas que sólo afectan al usuario, en las que se utilizará el archivo de configuración personal, ~/.bashrc.

La ventaja de utilizar el directorio /etc/profile.d es que es común a todas las distribuciones y nos evita tener que editar otros archivos del sistema como por ejemplo, /etc/profile.

2) Desinstalar versiones anteriores del programa ubicadas en el directorio /usr

Aún en el caso de que la versión a compilar la vayamos a instalar en el mismo directorio que la que proporciona la distribución, siempre se debe desinstalar previamente la versión antigua, para evitar conflictos innecesarios.



Instalación    

Dependencias

Herramientas de Compilación


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

* GCC - (14.1.0) o Clang - (18.1.6)
* CMake - (3.29.3)
* Ninja - (1.12.0)
* Pkg-config - (0.29.2)

Librerías de Desarrollo

* Xorg - (7.7 / xorg-server 21.1.13)
   LibICE - (1.1.1)
   LibX11 - (1.8.9)
   LibXcomposite - (0.4.6)
   LibXcursor - (1.2.2)
   LibXdamage - (1.1.6)
   LibXext - (1.3.6)
   LibXfixes - (6.0.1)
   LibXft - (2.3.8)
   LibXi - (1.8.1)
   LibXinerama - (1.1.5)
   LibXpm - (3.5.17)
   LibXrandr - (1.5.4)
   LibXrender - (0.9.11)
* Fontconfig - (2.15.0)
* Freetype2 - (2.13.2)
* Libjpeg-turbo - (3.0.3)
* Libpng - (1.6.43)
* Pango - (1.52.2)
* Zlib - (1.3.1)



Descarga

pekwm-0.3.0.tar.gz

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+=' -fprofile-generate=/var/pgo/pekwm'
Configurar el paquete con las opciones -DCMAKE_BUILD_TYPE=Debug DTESTS=ON
2) Ejecutar 'ninja -C build test' en el directorio raíz del paquete.
3) Fase final de compilación e instalación del paquete.
$ export {C,CXX}FLAGS+=' -fprofile-use=/var/pgo/pekwm -Wno-error=coverage-mismatch'
Clang
Polly
$ export {C,CXX}FLAGS+=' -O3 -mllvm -polly -mllvm -polly-vectorizer=stripmine'
LTO
$ export AR=llvm-ar RANLIB=llvm-ranlib NM=llvm-nm
$ export {C,CXX}FLAGS+=' -flto'
ThinLTO
$ export AR=llvm-ar RANLIB=llvm-ranlib NM=llvm-nm
$ 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.
Unified LTO
LTO >> ThinLTO
$ export {C,CXX}FLAGS+=' -flto -funified-lto'
$ export LDFLAGS+=' -Wl,--lto=thin'
ThinLTO >> LTO
$ export {C,CXX}FLAGS+=' -flto=thin -funified-lto'
$ export LDFLAGS+=' -Wl,--lto=full'
La aplicación de esta optimización es aplicable, a partir de Clang 17, y sólo es combinable con LLD.
PGO
1) Fase inicial de compilación e instalación del paquete.
$ export {C,CXX}FLAGS+=' -fprofile-generate=/var/pgo/pekwm'
Configurar el paquete con las opciones -DCMAKE_BUILD_TYPE=Debug DTESTS=ON
2) Ejecutar 'ninja -C build test' en el directorio raíz del paquete.
3) Conversión del perfil de optimización a un formato legible por Clang.
$ PGODIR=/var/pgo/pekwm; 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/pekwm'

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/gcc14/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 Mold
$ export LDFLAGS+=' -fuse-ld=mold'

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=$(expr $(nproc) / 2)"
Optimizaciones complementarias ThinLTO de LLD
$ export LDFLAGS+=" -Wl,--thinlto-jobs=$(expr $(nproc) / 2)"

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 zxvf pekwm-0.3.0.tar.gz
$ cd pekwm-0.3.0
$ cmake -S . -B build -DCMAKE_INSTALL_SYSCONFDIR=/etc -G Ninja

Explicación de los comandos

-S . -B build : Establece el directorio del código fuente y crea de forma automática el directorio de compilación.

-DCMAKE_INSTALL_SYSCONFDIR=/etc : Instala los archivos de configuración en /etc/pekwm.

-G Ninja : Utiliza Ninja en lugar de GNU Make para compilar el paquete (opcional).

Compilación

$ ninja

Parámetros de compilación opcionales 

-v : 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 -c "ninja install-strip"

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

$ cp -rf /etc/pekwm ~/.pekwm
$ rm -f ~/.pekwm/{mouse_{click,sloppy,system},config_system}
$ mkdir -p ~/.pekwm/{themes,icons}
$ chmod +x ~/.pekwm/start

Activación del panel de Pekwm añadiendo el ejecutable al script de inicio de aplicaciones (opcional)

$ sed -i '$a\\npekwm_panel &' ~/.pekwm/start

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

Estadísticas de Compilación e Instalación de Pekwm
CPU AMD Ryzen 5 5500
MHz 3600 (BoostMax=4457)
RAM 32 GB
Sistema de archivos XFS
Versión del Kernel 6.9.3-ml SMP PREEMPT_DYNAMIC x86_64
Modo de frecuencia de la CPU powersave (balance performance)
Planificador de CPU BMQ
Versión de Glibc 2.39
Enlazador dinámico LLD 18.1.6
Compilador Clang 18.1.6
Parámetros de optimización -03 -march=znver3 -mtune=znver3 -mllvm -polly -mllvm -polly-vectorizer=stripmine -flto -funified-lto -Wl,--lto=thin -Wl,--thinlto-jobs=6 -fprofile-use=/var/pgo/pekwm -Wl,--lto-aa-pipeline=globals-aa -Wl,--lto-newpm-passes=pgo-memop-opt
Parámetros de compilación -v -j12
Tiempo de compilación 6"
Archivos instalados 99
Mostrar/Ocultar la lista de archivos instalados
Ocupación de espacio en disco 3,0 MB

Consumo inicial de CPU y RAM de Pekwm

Consumo inicial de CPU y RAM de Pekwm
Programa
CPU RAM
pekwm_wm 0 % 24,0 MB
pekwm_panel 0 % 9,1 MB
pekwm_bg 0 % 4,6 MB
pekwm 0 % 1,2 MB
TOTAL 0 % 38,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.

Aplicaciones instaladas
Ejecutable
Descripción
pekwm
Es el binario ejecutable lanzador del administrador de ventanas.
pekwm_bg Utilidad encargada de colocar una imagen en el fondo de la pantalla. Es similar a Wallpaperd pero más simple, del mismo autor de Pekwm. Para más información ejecutar "man pekwm_bg".
Opciones de línea de comandos de pekwm_bg (traducidas al español)
[jose@localhost ~]$ pekwm_bg -h
uso: pekwm_bg [-hl] textura
  -d --display dpy    Establece el fondo de una determinada pantalla.
  -D --daemon         Se ejecuta en segundo plano
  -h --help           Muestra esta información
  -l --load-dir ruta  Ruta de búsqueda de las imágenes
  -s --stop           Detiene la ejecución de pekwm_bg
pekwm_ctrl Utilidad inspirada en el programa wmctrl con la que podremos controlar las ventanas de Pekwm, desde línea de comandos. Para más información ejecutar "man pekwm_ctrl".
Opciones de línea de comandos de pekwm_ctrl (traducidas al español)
[jose@localhost ~]$ pekwm_ctrl -h
usage: pekwm_ctrl [-acdhs] [comando]
  -a --action [run|focus|list|util] Acción a controlar
  -c --client patrón  Patrón cliente
  -d --display dpy    Pantalla
  -h --help           Muestra esta información
  -w --window ventana Ventana cliente
pekwm_dialog Utilidad inspirada en el programa xmessage que muestra un cuadro de diálogo cuando algún tema de Pekwm produce un cuelge del mismo.
pekwm_panel Un panel de escritorio, aunque el término correcto sería barra de herramientas, de características similares a la barra de herramientas de Fluxbox, pero bastante más complicado de configurar.
pekwm_screenshot Utilidad de captura de pantalla muy simple y sin cuadro de diálogo, que podemos ejecutar desde el menú de aplicaciones de Pekwm. 
pekwm_theme Utilidad de gestión de los temas de Pekwm, permite descargarlos desde la web de Pekwm. Para más información ejecutar "man pekwm_theme".
Opciones de línea de comandos de pekwm_theme (traducidas al español)
[jose@localhost ~]$ pekwm_theme -h
uso: /usr/local/bin/pekwm_theme [install|uninstall|show|search|new|update]

  install [-a] nombre   instalar un tema
  uninstall nombre      desinstalar un tema (suprime los cambios locales)
  show nombre           mostrar la vista previa de un tema
  search [patrón]       búsqueda de un tema
  new nombre            crear un nuevo tema
  update                actualizar el indíce de los temas

Directorio de configuración personal  

~/.pekwm Es el directorio de configuración personal de Pekwm en nuestro home.
~/.pekwm/themes Es el subdirectorio donde podemos colocar los temas que nos bajemos de internet y los que queramos personalizar de los ya existentes.
~/.pekwm/icons Es el subdirectorio donde colocaremos los iconos que se muestren en el menú de Pekwm.
~/.pekwm/autoproperties Es el archivo de configuración que permite modificar las propiedades de las ventanas de una aplicación específica, para ello se vale de la información proporcionada por xprop. Para concretar, si quiero que una determinada aplicación se muestre sin los bordes de la ventana, lo configuro en este archivo. También contiene opciones de autoagrupramiento de ventanas, similar a las que utiliza Fluxbox, es decir, una sóla ventana para 2 aplicaciones o más, o una sóla ventana para todas las ventanas nuevas que se abran en una aplicación y el título de la ventana para poder cambiar de una a otra.
~/.pekwm/autoproperties_typerules Este archivo de configuración es nuevo desde la versión 0.1.17, y contiene la configuración global de comportamiento de las ventanas predefinido, que antes estaba incluida en el archivo de configuración, autoproperties. Su edición no es necesaria.
~/.pekwm/config Es el archivo de configuración principal de Pekwm.
~/.pekwm/history Es el archivo que almacena el historial del cuadro de diálogo de ejecución de comandos de Pekwm.
~/.pekwm/keys Es el archivo de configuración de los atajos de teclado de Pekwm.
~/.pekwm/menu Es el archivo de configuración del menú de Pekwm.
~/.pekwm/mouse Es el archivo de configuración de los eventos y atajos del ratón de Pekwm.
~/.pekwm/panel Es el archivo de configuración del panel de Pekwm (nuevo a partir de la versión 0.2.0).
~/.pekwm/start Es el script que permite añadir aplicaciones para que se ejecuten en el inicio de Pekwm.
~/.pekwm/vars Es el archivo de configuración de las variables de entorno a utilizar en los archivos de configuración de Pekwm.
~/.pekwm/themes-v1.csv Es el archivo que se crea de forma automática cuando se ejecuta por primera vez, el gestor de temas de Pekwm, pekwm_theme.

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.

pekwm-0.3.0-scripts.tar.gz

$ su
# tar zxvf pekwm-0.3.0-scripts.tar.gz
# cd pekwm-0.3.0-scripts
# ./Desinstalar_pekwm-0.3.0

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 pekwm-0.3.0-scripts.tar.gz
# cd pekwm-0.3.0-scripts
# ./Respaldar_pekwm-0.3.0

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_pekwm-0.3.0



Configuración de Pekwm  Nota importante

1) ~/.pekwm/autoproperties
2) ~/.pekwm/config
3) ~/.pekwm/menu
4) ~/.pekwm/start
5) ~/.pekwm/mouse

6) ~/.pekwm/panel



1) ~/.pekwm/autoproperties  Bloc de Notas


Con la edición de este archivo, personalizamos el comportamiento de las ventanas de las aplicaciones que ejecutemos cuando estemos en una sesión de este administrador de ventanas, es decir, posición, tamaño, ubicación en un determinado escritorio virtual, título, con decoración o sin decoración, que las ventanas nuevas se abran todas en una misma ventana, etc. y por último, autoagrupamiento, o lo que es lo mismo, en una misma ventana juntamos dos o el número que creamos conveniente de aplicaciones.

Respecto a esto último decir que procuremos autoagrupar aplicaciones con tamaños similares de ventanas, porque la ventana fija el tamaño de la aplicación más pequeña a la más grande. Y el resultado puede ser desproporcionado en el sentido de que muchas aplicaciones guardan el tamaño de la ventana al ser cerradas, y si las ejecutamos en otro entorno nos aparecerán totalmente descuadradas respecto a su tamaño original.

Para poder configurar las ventanas necesitaremos el uso del programa xprop para poder utilizar la información que nos proporciona de identificación de la ventana. Un ejemplo con El Gimp, ejecuto el programa, luego abro una terminal y lanzo el comando xprop, el puntero del ratón se convertirá en una cruz, y con la misma hago clic sobre la caja de herramientas de Gimp, de la información que me aparezca en la ventana de terminal, hay que coger lo siguiente:

WM_WINDOW_ROLE(STRING) = "gimp-toolbox"
WM_CLASS(STRING) = "gimp", "Gimp"

No aparecen juntos, yo los junto para ahorrar espacio y no perdernos en el tema. El parámetro WM_WINDOW_ROLE(STRING) sirve para identificar a la ventana respecto a las otras del programa, cuando éste tiene más de una abierta, en este caso "gimp-toolbox", el parámetro WM_CLASS(STRING) sirve para identificar al programa, en este caso "Gimp", "Gimp".

Trasladamos esta información al archivo autoproperties para que en el menú de lista de ventanas sólo aparezca una de todas las que tiene abiertas El Gimp, para evitar confusiones y una saturación del menú. (Este ejemplo viene comentado # en el mismo)

Property = "^gimp,^Gimp" {
    Role = "gimp-toolbox"
    ApplyOn = "Start New"
}

Property = ".gimp,^Gimp" {
     ApplyOn = "Start New"
     Skip = "Menus";
}


Creo que en lo que se refiere a la identificación de las ventanas y su traslación al archivo de configuración queda bastante claro,

xprop autoproperties
WM_CLASS(STRING) = "gimp", "Gimp" Property = "^gimp,^Gimp"
WM_WINDOW_ROLE(STRING) = "gimp-toolbox" Role = "gimp-toolbox"

Los parámetros que admite este archivo de configuración son los siguientes (Recordar que "True o False" pueden ser sustituidos por "1 o 0" para activar o desactivar el parámetro correspondiente):

Sticky = "True o False" La ventana se muestra en todos los escritorios virtuales.
Shaded = "True o False" La ventana se inicia enrollada.
MaximizedVertical = "True o False" La ventana se inicia maximizada de forma vertical.
MaximizedHorizontal = "True o False" La ventana se inicia maximizada de forma horizontal.
Iconified = "True o False" La ventana se inicia minimizada.
Border = "True o False" La ventana se inicia con borde.
Titlebar = "True o False" La ventana se inicia con la barra del título.
ClientGeometry = "geometría" Define el tamaño y la posición del cliente de la ventana, excluyendo el tamaño de los bordes y la decoración de la misma. Ejemplo: 100x100+0-0
FrameGeometry = "geometría" Define el tamaño y la posición de la ventana, incluyendo el tamaño de los bordes y la decoración de la misma. Si el parámetro ClientGeometry está presente, éste será sobreescrito por el parámetro FrameGeometry. Ejemplo: 100x100+0-0
Workspace = "número" Define en qué escritorio se iniciará el programa.
PlaceNew = "True o False" Activa el uso de reglas de ubicación para este cliente.
FocusNew = "True o False" Define si este cliente seguirá estando enfocado al iniciarse una nueva ventana emergente.
Focusable = "True o False" Define si este cliente podrá ser enfocado cuando esté corriendo.
Opacity = "100, 50" Define el nivel de opacidad de la ventana cuando recibe el enfoque ("100, 50") y cuando no lo tiene ("100, 50"). Un valor de 0 equivale a una transparencia total, y un valor de 100 a una opacidad total. El valor tiene que estar comprendido entre 0 y 100.

Para poder hacer uso de esta característica, se requiere de la ejecución al inicio de Xcompmgr o un programa de características similares.
CfgDeny = "parámetro" Una lista de condiciones de denegación de llamadas por parte del programa cliente. Si añadimos más de una, irán separadas por espacios y las comillas abrirán y cerrarán la lista. Pueden ser:
"Position" Ignora la petición de cambio de posición de la ventana.
"Size" Ignora la petición de cambio de tamaño de la ventana.
"Stacking" Ignora la petición de cambio del apilado de la ventana.
"ActiveWindow" Ignora la petición de cambio del enfoque de la ventana.
"MaximizedVert" Ignora la petición de cambio a maximizado vertical de la ventana.
"MaximizedHorz" Ignora la petición de cambio a maximizado horizontal de la ventana.
"Hidden" Ignora la petición de cambio para mostrar/ocultar la ventana.
"Fullscreen" Ignora la petición de cambio para poner la ventana a pantalla completa.
"Above" Ignora la petición de cambio para poner la ventana por encima de las otras.
"Bellow" Ignora la petición de cambio para poner la ventana por debajo de las otras.
ApplyOn = "parámetro" Una lista de condiciones para aplicar a la configuración (Property) de una determinada aplicación en este archivo. Si añadimos más de una, irán separadas por espacios y las comillas abrirán y cerrarán la lista. Pueden ser:
"Start" Aplicar si la ventana ya existe antes del inicio/reinicio de Pekwm. Reseñar que si utilizamos el parámetro grouping, Start no tendrá en cuenta los escritorios virtuales.
"Reload" Aplicar cuando los archivos de configuración de Pekwm sean recargados.
"New" Aplicar cuando la aplicación se inicie por primera vez.
"Workspace" Aplicar cuando la ventana sea enviada a otro escritorio virtual.
"Transient" Aplicar a las ventanas transitorias así como a las ventanas normales. Las cajas de diálogo son normalmente ventanas transitorias.
"TransientOnly" Aplicar sólo a las ventanas transitorias. Las cajas de diálogo son normalmente ventanas transitorias.
Skip = "parámetro" Una lista de situaciones en las que será ignorada la aplicación definida y permitirá al usuario omitir determinadas acciones. Si añadimos más de una, irán separadas por espacios y las comillas abrirán y cerrarán la lista. Pueden ser:
"Snap" No captura esta ventana cuando se muevan las ventanas.
"Menus" No muestra esta ventana en los menús de Pekwm.
"FocusToggle" No enfoca esta ventana cuando se alterne el enfoque entre las ventanas abiertas.
Layer = "parámetro" La capa de ventanas. Hace que la ventana esté debajo o encima de las otras ventanas. La capa por defecto es "Normal". Los posibles parámetros de posición son (ordenados desde la posición más inferior hacia la más superior) :
"Desktop"
"Below"
"Normal"
"OnTop"
"Harbour"
"AboveHarbour"
"Menu"
Title = "nombre" Aplicar esta autopropiedad en los clientes cuyo título de ventana sea igual al texto definido en el parámetro. El texto tiene que ser de tipo regex, un ejemplo: "^Guardando"
Role = "nombre" Aplicar esta autopropiedad en los clientes cuyo WM_WINDOW_ROLE(STRING) sea igual al texto definido en el parámetro.  El texto tiene que ser de tipo regex, un ejemplo: "^gimp-toolbox"
Group = "nombre" Define el nombre del grupo. Esta sección contiene todas las opciones posibles de agrupamiento de ventanas.
Size = "número" Cuántos clientes deben agruparse en un grupo de ventanas.
Behind = "True o False" Si se pone en True los nuevos clientes de un grupo de ventanas nunca estarán activos en el mismo.
Global = "True o False" Si se pone en True los nuevos clientes de un grupo de ventanas se iniciarán siempre aunque este grupo esté en otro escritorio virtual o minimizado.
Raise = "True o False" Si se pone en True los nuevos clientes de un grupo de ventanas elevarán el marco en el que se abran.
FocusedFirst = "True o False" Si se pone en True y hay más de un marco en dónde la ventana podría ser autoagrupada dentro, el marco actualmente enfocado es considerado la primera opción.

Un ejemplo de autoagrupamiento sería éste, 

Property = ".*,^Firefox" {
        Group = "netwin" {
                Size = "0"
        }
        ApplyOn = "New Start Reload"
}
Property = ".*,^Claws-mail" {
        Group = "netwin" {
                Size = "0"
        }
        ApplyOn = "New Start Reload Transient"
}

En la 1ª regla todas las ventanas iguales a ".*,^Firefox" serán agrupadas en un grupo con el nombre netwin y esto será aplicado (ApplyOn) en el inicio (Start) y en la recarga (Reload) de Pekwm y al abrir nuevas ventanas (New) de Firefox, pero no incluirá las ventanas de diálogo.

En la 2ª regla lo mismo que en la primera pero esta vez para Claws-mail, en este caso las ventanas de diálogo (Transient) si serán incluidas en el grupo de ventanas junto a Firefox. Para un número ilimitado de ventanas agrupadas se utiliza siempre el valor "0" en el parámetro "Size".

El resultado lo podemos ver en las capturas de pantalla siguientes, un dato, si cerramos la ventana y Firefox no tiene el enfoque en esos momentos, en la siguiente ejecución del mismo, nos saldrá el cuadro de diálogo de cierre incorrecto de la sesión anterior. Para cambiar de una ventana a otra con hacer clic en el título de cada una es suficiente.

Captura - Pekwm - Grupo - 1

Captura - Pekwm - Grupo - 2




2) ~/.pekwm/config  Bloc de Notas

Éste es el archivo de configuración principal de Pekwm y se divide en 5 secciones diferenciadas.

2a) Files

Esta sección contiene las rutas por defecto de los archivos de configuración de Pekwm y la ruta al tema que se esté utilizando en estos momentos. En este último caso, si tuvieramos problemas de inicio por culpa de algún tema siempre tendríamos la posibilidad de cambiarlo desde este archivo.

Files {
    Keys = "~/.pekwm/keys"
    Mouse = "~/.pekwm/mouse"
    Menu = "~/.pekwm/menu"
    Start = "~/.pekwm/start"
    AutoProps = "~/.pekwm/autoproperties"
    Theme = "~/.pekwm/themes/MilkyLeopard"
    Icons = "~/.pekwm/icons/"
}
 


2b) MoveResize

En esta sección se definen los parámetros de movimiento y redimensionado de las ventanas.
 
MoveResize {
    EdgeAttract = "10"
    EdgeResist = "10"
    WindowAttract = "5"
    WindowResist = "5"
    OpaqueMove = "True"
    OpaqueResize = "False"
}

Definición de los elementos de la sección MoveResize
EdgeAttrack = "número" La distancia mínima en píxeles entre el borde de la pantalla y la ventana nueva abierta más cercana.
EdgeResit = "número" La distancia mínima en píxeles entre el borde de la pantalla y la ventana al moverla.
WindowAttract = "número" La distancia mínima en píxeles entre las ventanas.
WindowResist = "número" La distancia mínima en píxeles entre las ventanas al moverlas.
OpaqueMove = "True o False" Si se pone en True activa el movimiento opaco de la ventana.
ResizeMove = "True o False" Si se pone en True activa el redimensionado opaco de la ventana.


2c) Screen

Sección principal de configuración del archivo ~/.pekwm/config y en la que configuramos todo lo relacionado con los escritorios virtuales y el comportamiento de las ventanas.

Screen {
    Workspaces = "4"
    WorkspacesPerRow = "2"
    WorkspaceNames = "Main;Web;E-mail;Music"
    ShowFrameList = "True"
    ShowStatusWindow = "True"
    ShowStatusWindowCenteredOnRoot = "False"
    ShowClientID = "False"
    ShowWorkspaceIndicator = "500"
    PlaceNew = "True"
    FocusNew = "True"

    TrimTitle = "..."
    FullscreenAbove = "True"
    FullscreenDetect = "True"
    HonourRandr = "True"
    HonourAspectRatio = "True"
    EdgeSize = "1"
    EdgeIndent = "False"
    PixmapCacheSize = "20"
    DoubleClickTime = "250"

    Placement {
        Model = "CenteredOnParent Smart MouseNotUnder"
        Smart {
            Row = "True"
            TopToBottom = "True"
            LeftToRight = "True"
            OffsetX = "0"
            OffsetY = "0"
        }
    }

    UniqueNames  {
        SetUnique = "False";
        Pre = " #";
        Post = "";
    }
}

Definición de los elementos de la sección Screen
ThemeBackground = "True o False" Define si se cargará el fondo de escritorio proporcionado por el tema correspondiente de Pekwm.
Workspaces = "número" Define el número de escritorios virtuales a utilizar. En la versión 0.2.0 de Pekwm, se ha aumentado a 9 el número predefinido de escritorios virtuales.
WorkspacesPerRow = "número" Define el número de escritorios por fila del indicador de escritorios que se muestra en el centro de la pantalla cuando cambiamos de escritorio.
WorkspacesNames = "nombres" Define el nombre de cada escritorio virtual de los que se muestran en el indicador de escritorios, separados por ;
ShowFrameList = "True o False" Define si una lista de todas las ventanas abiertas en el escritorio será desplegada al ejecutar las acciones NextFrame/PrevFrame.
ShowStatusWindow = "True o False" Define si se mostrará la información de tamaño y posición al mover o redimensionar una ventana.
ShowStatusWindowCenteredOnRoot = "True o False"  Si se pone en True el antiguo comportamiento del estado de la ventana será usado.
ShowClientID = "True o False" Si se pone en True se mostrará la identificación del cliente de la ventana mediante los valores estándar EWMH.
ShowWorkspaceIndicator = "número" Define el tiempo en milisegundos en el que será mostrado el indicador de escritorios.
WorkspaceIndicatorScale = "número" Define el tamaño del indicador de escritorios. Un valor más alto significa un tamaño más pequeño.
WorkspaceIndicatorOpacity = "50" Define el nivel de opacidad del indicador de escritorios. Un valor de 0 equivale a una transparencia total, y un valor de 100 a una opacidad total. El valor tiene que estar comprendido entre 0 y 100.

Para poder hacer uso de esta característica, se requiere de la ejecución al inicio de Xcompmgr o un programa de características similares.
PlaceNew = "True o False" Activa el uso de reglas de ubicación para todos los clientes.
FocusNew = "True o False" Define si las ventanas nuevas siempre reciben el enfoque.
FocusNewChild = "True o False" Define si la ventana transitoria recibe siempre el enfoque.
PlaceNew = "True o False" Activa el uso de reglas de ubicación para todos los clientes.
ReportAllClients = "True o False" Define si las ventanas abiertas deben de mostrarse en elementos como un paginador de escritorio o, si sólo debe de hacerlo la ventana activa.
TrimTitle = "texto" Define el texto que usará Pekwm para recortar los títulos de ventana muy largos. Si se deja vacío no se realizará ningún recorte.
FullScreenAbove= "True o False" Si se pone en True las ventanas que se pongan a pantalla completa se situarán por encima de los paneles o cualquier otra utilidad de escritorio que esté corriendo junto a Pekwm
FullScreenDetect= "True o False" Si se pone en True, Pekwm intentará detectar las pantallas completas de los programas que no sean compatibles con EWHM y adaptará la ventana al estado requerido por la aplicación en cuestión.
HonourRandr= "True o False" Si se pone en True fuerza a Pekwm a interpretar la información proporcionada por Xinerama en detrimento de Xrandr.
HonourAspectRatio= "True o False" Si se pone en False no se respetará la proporción de las ventanas cuando sean redimensionadas.
EdgeSize = "número" Define el tamaño en píxeles del borde de la pantalla que será considerado como borde de la pantalla virtual de Pekwm. Un valor de 0 desactiva los bordes.
EdgeIndent = "True o False" Si se pone en True se reservará espacio donde esté el borde de la pantalla.
PixmapCacheSize = "número" Determina el número de archivos de imagen sin usar que serán almacenados en la caché de Pekwm para un uso futuro.
DoubleClickTime = "número" Tiempo en milisegundos para que un clic se cuente como un doble clic.
CurrHeadSelector = "texto" Controla las operaciones relativas a la pantalla actual, como ubicación, enfoque, selección de cursor, etc. Las operaciones afectadas incluyen la ubicación y posición del cuadro de diálogo de ejecución de aplicaciones, diálogo de búsqueda, estado de las ventanas y la lista de ventanas enfocadas. No se proporciona un ejemplo de configuración de este elemento.
Definición de los elementos de la subsección Placement
TransientOnParent = "True o False" Si se establece en True, las ventanas transitorias serán mapeadas en su ventana padre.
Model = "parámetro" Define el modelo de comportamiento de las ventanas en su ubicación en la pantalla. Que puede ser:
"Smart" Intenta colocar la ventana donde no haya otra presente.
"MouseCentered" Coloca la ventana centrada debajo de la posición actual del puntero del ratón.
"MouseTopLeft" Coloca la esquina superior izquierda de la ventana debajo del puntero del ratón.
"MouseNotUnder" Coloca la ventana en las esquinas de la pantalla evitando la posición actual del puntero del ratón.
"CenteredOnParent" Coloca las ventanas transitorias en el centro de la ventana padre.
WorkspacePlacements = "texto" Lista de los modelos de comportamiento de las ventanas separados por punto y coma para los escritorios virtuales. Sirven las mismas definiciones de arriba de esta fila.
Definición de los elementos de la subsección Smart de la subsección Placement
Row = "True o False" Si se pone en True se usarán filas en vez de columnas para la ubicación de las ventanas.
TopToBottom = "True o False" Si se pone en False la ventana es ubicada empezando desde abajo.
LeftToRight = "True o False" Si se pone en False la ventana es ubicada empezando desde la derecha.
OffSetX = "número" Espacio horizontal en píxeles que se reservará entre las ventanas nuevas y viejas, y el borde de la pantalla. Un valor de 0 no deja ningún espacio.
OffSetY = "número" Espacio vertical en píxeles que se reservará entre las ventanas nuevas y viejas, y el borde de la pantalla. Un valor de 0 no deja ningún espacio.
Definición de los elementos de la subsección UniqueNames
SetUnique = "True o False" Define si esta característica es usada o no. En aquellos clientes que utilizan el mismo título de ventana podemos añadirles un prefijo o sufijo para diferenciarlos unos de otros. Ejemplo: terminal, terminal [2]
Pre = "texto" Texto a colocar antes del número único de cliente.
Post = "texto" Texto a colocar después del número único de cliente.


2d) Menu

En esta sección se configura el comportamiento del menú relacionado con la forma de apertura de los submenús y el modo de ejecución de los programas que lo componen.

Menu {
    DisplayIcons = "True"

    Icons = "DEFAULT" {
        Minimum = "16x16"
        Maximum = "16x16"
    }

    # To enable make separate window have other icon size restrictions,
    # for example wallpaper menu found in pekwm_menu_tools, set the following
    # for each menu you want to "free".

    # Icons = "Wallpaper" {
    #     Minimum = "64x64"
    #     Maximum = "64x64"
    # }

    # Defines how menus act on mouse input.
    # Possible values are: "ButtonPress ButtonRelease DoubleClick Motion"
    # To make submenus open on mouse over, comment the default Enter,
    # uncomment the alternative, and reload pekwm.
    
    Select = "Motion"
#    Enter = "ButtonPress"
      Enter = "Motion"
    Exec = "ButtonRelease"
}

Definición de los elementos de la sección Menu
DisplayIcons = "True o False" Habilita el uso de iconos en el menú, por defecto estos tienen que estar ubicados en el subdirectorio ~/.pekwm/icons.
FocusOpacity = "100" Define el nivel de opacidad de la ventana del menú seleccionada. Un valor de 0 equivale a una transparencia total, y un valor de 100 a una opacidad total. El valor tiene que estar comprendido entre 0 y 100.

Para poder hacer uso de esta característica, se requiere de la ejecución al inicio de Xcompmgr o un programa de características similares.
UnfocusOpacity = "50" Define el nivel de opacidad de la ventana del menú no seleccionada. Un valor de 0 equivale a una transparencia total, y un valor de 100 a una opacidad total. El valor tiene que estar comprendido entre 0 y 100.

Para poder hacer uso de esta característica, se requiere de la ejecución al inicio de Xcompmgr o un programa de características similares.
Icons = "DEFAULT" Estos son los iconos que se utilizan por defecto, y tienen que estar ubicados en el subdirectorio ~/.pekwm/icons. Con este parámetro y los valores que vienen a continuación se puede crear un menú de fondos de escritorio, con el tamaño de miniatura definido por el tamaño del icono.
Minimum = "16x16" Define el tamaño mínimo de los iconos.
Maximun = "16x16" Define el tamaño máximo de los iconos.
Select = "parámetro" Define el tipo de evento del ratón para seleccionar una entrada del menú a elegir entre "ButtonPress", "ButtonReleased", "DoubleClick", "Motion" o "MotionPressed". 
Enter = "parámetro" Define el tipo de evento del ratón para la apertura de los submenús a elegir entre "ButtonPress", "ButtonReleased", "DoubleClick", "Motion" o "MotionPressed". En este caso, si queremos que se haga de forma automática es recomendable elegir "Motion".
Exec = "parámetro" Define el tipo de evento del ratón para ejecutar una entrada a elegir entre "ButtonPress", "ButtonReleased", "DoubleClick", "Motion" o "MotionPressed". 


2e) CmDialog

En esta sección configuramos las opciones del cuadro de diálogo de ejecución de programas de Pekwm, entre otras cosas el tamaño del historial, la ruta al archivo de configuración y el intervalo de tiempo en el que el historial será guardado en el archivo de configuración.

CmdDialog {
    HistoryUnique = "True"
    HistorySize = "1024"
    HistoryFile = "~/.pekwm/history"
    HistorySaveInterval = "16"
}


2f) Harbour

Harbour es el equivalente al Slit de Fluxbox o Blackbox, y en menor medida guarda un cierto parecido con el Wharf de AfterStep, es decir, un contenedor transparente donde se ubicarán las conocidas dockapps en el caso de que deseemos utilizarlas con Pekwm, en esta sección se configura todo lo relacionado con el mismo.

Harbour {
    OnTop = "True"
    MaximizeOver = "False"
    Placement = "Right"
    Orientation = "TopToBottom"
    Head = "0"

    DockApp {
        SideMin = "64"
        SideMax = "0"
    }
}

Definición de los elementos de la sección Harbour
Placement = "parámetro" Define el lugar de la pantalla donde se ubicará el Harbour, a elegir entre: "Right" (a la derecha), "Left" (a la izquierda), "Top" (arriba) o "Bottom" (abajo).
Orientation = "parámetro" Define la orientación hacia la que el Harbour se expandirá, a elegir entre: TopToBottom (de arriba hacia abajo), BottomToTop (de abajo hacia arriba), RightToLeft (de derecha a izquierda) o LeftToRight (de izquierda a derecha).
OnTop = "True o False" Define si el Harbour estará siempre por encima de todas las ventanas. 
MaximizeOver = "True o False" Define si las ventanas al ser maximizadas cubrirán el Harbour ("True") o se quedarán en el borde del mismo ("False").
Head = "número" Si está activado Xinerama, con este parámetro definimos en el que pantalla estará ubicado el Harbour.
Opacity = "50" Define el nivel de opacidad del Harbour. Un valor de 0 equivale a una transparencia total, y un valor de 100 a una opacidad total. El valor tiene que estar comprendido entre 0 y 100.

Para poder hacer uso de esta característica, se requiere de la ejecución al inicio de Xcompmgr o un programa de características similares.
Definición de los elementos de la subsección Dockapp de la sección Harbour
Sidemin = "número" Define el tamaño mínimo del dockapp ubicado en el Harbour, si el tamaño del dockapp es inferior al establecido en este parámetro, el mismo será redimensionado al valor establecido.
SideMax = "número" Define el tamaño máximo del dockapp ubicado en el Harbour. si el tamaño del dockapp es superior al establecido en este parámetro, el mismo será redimensionado al valor establecido.



3) ~/.pekwm/menu  Bloc de Notas

Este es el archivo de configuración del menú de Pekwm, incluye también los menús de las ventanas, y he aprovechado para crear un script que traduce al español de forma automática el mismo. A partir de la versión 0.2.0 de Pekwm, el menú no soporta otro formato de codificación de caracteres que no sea UTF-8.

traducir_menu_pekwm.zip

Lo descomprimimos y lo ejecutamos, se creará una copia de seguridad del menú original y traducirá todas las entradas en inglés.

$ unzip traducir_menu_pekwm.zip
$ ./traducir_menu_pekwm

Ejemplo recortado del menú
# Variables
INCLUDE = "vars"

RootMenu = "Pekwm" {
  Entry = "Terminal" { Actions = "Exec $TERM" }
  Entry = "Ejecutar.." { Actions = "ShowCmdDialog" }

  Separator {}

  Entry = "Navegador web" { Actions = "Exec $BROWSER" }
  Entry = "Editor de texto" { Actions = "Exec $EDITOR" }
  Entry = "Explorador de archivos" { Actions = "Exec $FILEMANAGER" }

  Separator {}

  Entry = "Capturar pantalla" { Actions = "Exec pekwm_screenshot" }

  Separator {}

  Submenu = "Ir a" {
    SubMenu = "Escritorio" {

Definición de los elementos del Menú Raíz
Submenu = "nombre" Comienzo de un submenú. El "nombre" es la entrada que aparecerá en el menú raíz.
Name = "nombre" Alternativa al uso de Submenu = "nombre" {. Iniciar el submenú con Submenu { Name = "nombre" para usar esta característica.
Entry = "nombre" Crea una entrada en el menú. "nombre" es el texto que se mostrará en el menú para esta entrada.
Icon = "nombre" Define el icono a utilizar para la entrada del menú, dicho icono tiene que estar ubicado en el subdirectorio ~/.pekwm/icons. Un ejemplo:

Entry = "Firefox" { Icon="firefox.png"; Actions="Exec firefox &" }
Actions = "acción" Ejecuta una acción, "acción" es la acción o acciones a ejecutar, las que son propias de Pekwm vienen definidas en los archivos de configuración de los atajos del teclado y del ratón, keys y mouse.
Separator {} Añade un separador al menú.
Definición de las Acciones del Menú
Exec  Es la que se utiliza para lanzar las aplicaciones, si queremos que se ejecuten en 2º plano, añadir & al final del comando a ejecutar. 
Reload Hace que Pekwm vuelva a leer los archivos de configuración sin necesidad de salir del mismo.
Restart Reinicia Pekwm
RestartOther Termina Pekwm e inicia otro administrador de ventanas o aplicación.
Exit Termina Pekwm y cierra la sesión X.

Pekwm admite un número ilimitado de submenús, lo que tenemos que tener siempre en cuenta, es el cierre oportuno con la correspondiente llave '}', de lo contrario el menú no se mostrará. Un ejemplo:

    Submenu = "Multimedia" {
        Entry = "Amarok" { Actions = "Exec amarok &" }
        Entry = "Quod Libet" { Actions = "Exec quodlibet &" }
        Entry = "Xmms" { Actions = "Exec xmms &" }
        Entry = "MPlayer" { Actions = "Exec gmplayer &" }
        Entry = "Xine" { Actions = "Exec xine &" }
        Entry = "xawtv" { Actions = "Exec xawtv &" }
        Entry = "Ogle" { Actions = "exec ogle &" }
        Entry = "alsamixer" { Actions = "Exec $TERM -title alsamixer -e alsamixer &" }
    }

Ahora lo que hago es crear un submenú "Vídeo" dentro del submenú "Multimedia" y queda así,

    Submenu = "Multimedia" {
    Submenu = "Vídeo" { 
        Entry = "MPlayer" { Actions = "Exec gmplayer &" }
        Entry = "Ogle" { Actions = "exec ogle &" }
        Entry = "Xine" { Actions = "Exec xine &" } 
        }      
        Entry = "Amarok" { Actions = "Exec amarok &" }
        Entry = "Quod Libet" { Actions = "Exec quodlibet &" }
        Entry = "Xmms" { Actions = "Exec xmms &" }
        Entry = "xawtv" { Actions = "Exec xawtv &" }
        Entry = "alsamixer" { Actions = "Exec $TERM -title alsamixer -e alsamixer &" }
    }

No olvidarlo nunca, llave '{' que abre, llave '}' que cierra el submenú. Es recomendable añadir el símbolo & al final del comando, para evitar problemas de ejecución en algunos programas. Decir también que Pekwm soporta menús dinámicos al igual que Openbox pero la información al respecto no es muy extensa, así que me remito a la documentación del programa.

Si tenemos pensado probar el funcionamiento de la transparencia real en Pekwm, y lo hemos compilado con ese soporte, podemos añadir al menú, la siguiente entrada, que nos permitirá activar y desactivar la transparencia real de una ventana determinada. Lo que está en rojo:

WindowMenu = "Menú de ventana" {
    Entry = "(Des)Pegar" { Actions = "Toggle Sticky" }
    Entry = "(Des)Enrollar" { Actions = "Toggle Shaded" }
    Entry = "Minimizar" { Actions = "Set Iconified" }
    Entry = "Activar/Desactivar transparencia" { Actions = "Toggle Opaque" }
    Entry = "Comando.." { Actions = "ShowCmdDialog" }

Una alternativa a la edición manual del menú a tener en cuenta es Xdgmenumaker, un generador de menú de aplicaciones automático, que escanea todos los archivos desktop que tengamos en nuestro sistema.



4) ~/.pekwm/start

Si tenemos pensado añadir aplicaciones al inicio de Pekwm, éste el archivo en el que tendremos que añadir los comandos de ejecución de éstas, recordar que tiene que tener permisos de ejecución. 

#!/bin/sh
# PekWM start file
# This file is a simple shell script; It gets run on pekwm startup, after
# the theme and all config has loaded if it is set executable
# (chmod +x start).
#
# This is different from ~/.xinitrc because a normal configuration of
# .xinitrc you'll run all commands, then launch the window manager last.
#
# It also gets re-run every time pekwm is restarted.
#
# As for it's usefulness, well, it's up to you. I actually set my background
# from my start file; since it runs after the theme gets loaded, this
# effectively overrides whatever's in the theme.
#
# There's probably a few other good uses for it, too. I mainly pushed for it
# because when I was doing fluxbox's docs, people used to complain that there
# wasn't one, and I wanted to avoid that for pekwm. ;) --eyez

numlockx &
xbindkeys &
fbpanel &
wmix &
wmnetload &
gai-bgswitcher &
idesk &
bluecombo &
hsetroot -fill /home/jose/Fondos/371874,103.jpg -gamma 1.5 -sharpen 1.5 -blur 1.0



5) ~/.pekwm/mouse

En este archivo podemos modificar el modo de enfocar las ventanas con el ratón además de los atajos del mismo, la primera vez que iniciamos Pekwm lo primero que comprobaremos es que el enfoque de las ventanas sigue al puntero del ratón. Para utilizar el modo clásico de toda la vida, clic para enfocar, tendremos que dejar el archivo tal y como aparece en el ejemplo de abajo.

# Swap comments on the two folling lines to switch between
# sloppy and click to focus
# INCLUDE = "$_PEKWM_ETC_PATH/mouse_sloppy"
INCLUDE = "$_PEKWM_ETC_PATH/mouse_click"



El resto de archivos de configuración no tienen ninguna complicación y como también he puesto la documentación original del programa, lo mejor para cualquier duda es consultarla.

En cuanto a los temas, un inciso, he comprobado que muchos no utilizan un tamaño específico de fuente, con lo que ésta se muestra en un tamaño proporcional al ancho de la ventana y resulta demasiado grande. Para solucionar esto o cambiar la fuente a utilizar tendremos que editar el tema que tengamos en uso. Como suelen utilizar variables de entorno para definir las fuentes, la edición es bastante sencilla. Un ejemplo con el tema AguaLemon que ha sido adaptado del original de Xfvwm4.

# Agualemon v1.0
# (prepared for pekwm version 1.6)
# Ported from the XFWM theme, Agualemon
# Last modification date: 05/16/08

# set up the font
$FONT = "DejaVu Sans-10"

La original que llevaba era la Tahoma sin número para definir el tamaño y yo la he sustituido por la DejaVu Sans con un tamaño de 10 píxeles, que es la que se muestra en las capturas de pantalla del manual.

En aquellos temas en los que aparece la sección del Harbour de esta forma,

Harbour {
    Texture = "EMPTY"
}

resulta conveniente editar el parámetro "EMPTY" y añadir un color similar al que utilize el tema, lo podemos coger con el gotero de color del Gimp y copiar los valores a este archivo, dejándolo del modo que pongo a continuación,

Harbour {
    Texture = "Solid #E1E0E1"
}

¿Por qué todo esto? Porque he comprobado que en aquellos temas que no tienen definido este parámetro, el fondo del Harbour y borde de las dockapps, tiende a corromper los colores del mismo, creando un efecto visual muy desagradable.



6) ~/.pekwm/panel

Incluido a partir de la versión 0.2.0, en este archivo podemos configurar todas las opciones relacionadas con el panel de Pekwm. El archivo de configuración se divide en tres secciones: Panel, Commands y Widgets. Reseñar que su configuración resulta bastante compleja en lo que se refiere a los comandos relacionados con los widgets. Si estamos utilizando un panel de escritorio independiente con Pekwm, mi consejo personal es que sigamos con él.

# pekwm_panel configuration

Panel {
  Placement = "Top"
}

Commands {
  Command = "uptime | sed 's/.*:/load/'" {
    Interval = "15"
  }
  # battery percent (works on OpenBSD)
  # Command = "apm | head -1 | awk '{print \"battery \" $4}'" {
  #   Interval = "60"
  # }
}

Widgets {
  Text = "%:WORKSPACE_NUMBER:" {
    Size = "TextWidth _00_"
  }
  Text = "%load" {
    Size = "TextWidth _0.00, 0.00, 0.00_"
  }
  # Text = "battery" {
  #   Size = "TextWidth _100%_"
  # }
  ClientList {
    Size = "*"
  }
  DateTime = "%Y-%m-%d %H:%M" {
    Size = "Required"
    Interval = "60"
  }
}

En este enlace podemos encontrar la descripción de los elementos de la configuración del panel, que no incluyo en este manual, al seguir utilizando en el mismo, un panel de escritorio independiente.



Hsetroot  

Aunque existen muchos programas que nos permiten colocar una imagen en el fondo de la pantalla, Hsetroot va más allá y además de esa función nos permite componer una imagen personalizada de la original sin necesidad de tener que editar ésta. Teniendo en cuenta que la mayoría de los fondos de escritorio que circulan por la red están en formato JPEG, y que éste cada vez que se graba de nuevo va degradando progresivamente la imagen original, Hsetroot evita todo esto y nos permite jugar con las posibilidades que nos ofrece de composición de imágenes, obteniendo unos resultados bastante espectaculares y sobre todo personalizables.



Características

* Soporte de pseudotransparencias 
* Ajuste de brillo, contraste y gamma
* Soporte de gradientes sólidos (rectángulos)
* Soporte de mezcla de colores en las imágenes
* Enfoque y desenfoque de las imágenes
* Soporte de reflejo (horizontal, vertical y diagonal)



Instalación

Dependencias

Herramientas de Compilación


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

* GCC - (14.1.0) o Clang - (18.1.6)
* Gawk - (5.3.0)
* Make - (4.4.1)
* Automake - (1.16.5)
* Autoconf - (2.72)
* Pkg-config - (0.29.2)

Librerías de Desarrollo

* Xorg - (7.7 / xorg-server 21.1.13)
   LibX11 - (1.8.9)
   LibXext - (1.3.6)
* Imlib2 - (1.12.2)



Descarga

hsetroot-1.0.2.tar.xz

Firma Digital  Clave pública PGP

hsetroot-1.0.2.tar.xz.asc

Verificar la firma digital del paquete

$ gpg --import manualinux.asc
$ gpg --verify hsetroot-1.0.2.tar.xz.asc hsetroot-1.0.2.tar.xz

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.
Unified LTO
LTO >> ThinLTO
$ export {C,CXX}FLAGS+=' -flto -funified-lto'
$ export LDFLAGS+=' -Wl,--lto=thin'
ThinLTO >> LTO
$ export {C,CXX}FLAGS+=' -flto=thin -funified-lto'
$ export LDFLAGS+=' -Wl,--lto=full'
La aplicación de esta optimización es aplicable, a partir de Clang 17, y sólo es combinable con LLD.

Parámetros adicionales

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/gcc14/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 Mold
$ export LDFLAGS+=' -fuse-ld=mold'

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=$(expr $(nproc) / 2)"
Optimizaciones complementarias ThinLTO de LLD
$ export LDFLAGS+=" -Wl,--thinlto-jobs=$(expr $(nproc) / 2)"

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 hsetroot-1.0.2.tar.xz
$ cd hsetroot-1.0.2
$ sh autogen.sh
$ ./configure

Compilación

$ make

Instalación como root

$ su -c "make install-strip"

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

Estadísticas de Compilación e Instalación de Hsetroot
CPU AMD Ryzen 5 5500
MHz 3600 (BoostMax=4457)
RAM 32 GB
Sistema de archivos XFS
Versión del Kernel 6.9.3-ml SMP PREEMPT_DYNAMIC x86_64
Modo de frecuencia de la CPU powersave (balance performance)
Planificador de CPU BMQ
Versión de Glibc 2.39
Enlazador dinámico LLD 18.1.6
Compilador Clang 18.1.6
Parámetros de optimización -03 -march=znver3 -mtune=znver3 -mllvm -polly -mllvm -polly-vectorizer=stripmine -flto -funified-lto -Wl,--lto=thin -Wl,--thinlto-jobs=6 -Wl,--lto-aa-pipeline=globals-aa -Wl,--lto-newpm-passes=memcpyopt
Tiempo de compilación 1"
Archivos instalados /usr/local/bin/hsetroot
Ocupación de espacio en disco 20 KB

Desinstalación como root

1) MODO TRADICIONAL

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

$ su -c "make uninstall"

2) MODO MANUALINUX  

hsetroot-1.0.2-scripts.tar.gz

$ su
# tar zxvf hsetroot-1.0.2-scripts.tar.gz
# cd hsetroot-1.0.2-scripts
# ./Desinstalar_hsetroot-1.0.2

Copia de Seguridad como root

$ su
# tar zxvf hsetroot-1.0.2-scripts.tar.gz
# cd hsetroot-1.0.2-scripts
# ./Respaldar_hsetroot-1.0.2

Restaurar la Copia de Seguridad como root

$ su
# cd /var/copibin/restaurar_copias
# ./Restaurar_hsetroot-1.0.2

Un ejemplo de uso

$ hsetroot -fill /home/jose/Fondos/371874,103.jpg -gamma 1.5 -sharpen 1.5 -blur 1.0

Ahora sólo nos queda añadirlo al script de inicio start :

#!/bin/sh
# PekWM start file
# This file is a simple shell script; It gets run on pekwm startup, after
# the theme and all config has loaded if it is set executable
# (chmod +x start).
#
# This is different from ~/.xinitrc because a normal configuration of
# .xinitrc you'll run all commands, then launch the window manager last.
#
# It also gets re-run every time pekwm is restarted.
#
# As for it's usefulness, well, it's up to you. I actually set my background
# from my start file; since it runs after the theme gets loaded, this
# effectively overrides whatever's in the theme.
#
# There's probably a few other good uses for it, too. I mainly pushed for it
# because when I was doing fluxbox's docs, people used to complain that there
# wasn't one, and I wanted to avoid that for pekwm. ;) --eyez

fbpanel &
hsetroot -fill /home/jose/Fondos/371874,103.jpg -gamma 1.5 -sharpen 1.5 -blur 1.0

En el manual de Utilidades del Fondo del Escritorio se explica de una forma más extendida las opciones de uso de este programa.



Configurar el inicio de Pekwm  

1) Para los que inician X desde terminal con el comando startx

Editamos el archivo ~/.xinitrc que se encuentra en nuestro home, si no existe lo creamos, y añadimos lo siguiente:

exec /usr/local/bin/pekwm


2) XDM

Editamos el archivo ~/.xsession que se encuentra en nuestro home, si no existe lo creamos, y añadimos lo siguiente:

exec /usr/local/bin/pekwm


3) GDM/LightDM/SDDM

Abrimos un editor de texto y añadimos lo siguiente:

[Desktop Entry]
Name=Pekwm
Comment=
Exec=/usr/local/bin/pekwm
Terminal=False
TryExec=/usr/local/bin/pekwm

Lo guardamos con el nombre pekwm.desktop y lo instalamos en /usr/share/xsessions.

$ su -c "install -m644 pekwm.desktop /usr/share/xsessions"


4) Qingy

Abrimos un editor de texto y añadimos lo siguiente:

exec /usr/local/bin/pekwm

Lo guardamos con el nombre Pekwm, y lo instalamos en /etc/qingy/Xsessions.

$ su -c "install -m755 Pekwm /etc/qingy/Xsessions"


5) SLiM
   
Primero editamos el archivo /etc/slim.conf y añadimos el nombre del entorno a la lista de los que tengamos en el sistema instalados, si queremos que sea el entorno que se inicie por defecto hay que colocarlo en el primer lugar de la lista.

# Sesiones disponibles (la primera es la predefinida).
# El actual nombre de sesión es reemplazado en el login_cmd
# anterior, para que su comando de acceso pueda manejar diferentes sesiones.
# vea el archivo xinitrc.ejemplo proporcionado con el código fuente de slim.
sessions            Fluxbox,WindowMaker,Blackbox,XFce4,E17,E16,IceWM,Openbox,ROX,Pekwm,AfterStep

Para finalizar editamos el archivo .xinitrc de nuestro home y añadimos la configuración del mismo, la variable DEFAULT_SESSION sobreescribe el entorno gráfico de inicio predefinido que pueda existir en el archivo /etc/slim.conf, permitiendo añadir el ejecutable de otro entorno que no esté configurado en el apartado anterior para ser iniciado por defecto, si queremos que sea Pekwm, añadimos su script de ejecución, aunque si lo tenemos configurado el primero de la lista, esto no es necesario.

# La siguiente variable define la sesión que será iniciada si el usuario
# no elige de forma explícita una sesión
DEFAULT_SESSION=pekwm

case $1 in
XFce4)
    exec startxfce4
    ;;
IceWM)
    exec icewm-session
    ;;
WindowMaker)
    exec wmaker
    ;;
Blackbox)
    exec startblackbox
    ;;
Fluxbox)
    exec startfluxbox
    ;;
E17)
    exec enlightenment_start
    ;;
E16)
    exec starte16
    ;;
Openbox)
    exec openbox-session
    ;;
Pekwm)
    exec pekwm
    ;;

ROX)
    exec rox-session
    ;;
AfterStep)
    exec afterstep
    ;;
*)
    exec $DEFAULT_SESSION
    ;;
esac

Con pulsar F1 ya podremos seleccionarlo de la lista e iniciarlo, si es el predefinido no es necesario seleccionarlo de la lista, se iniciará por defecto.
 



Iniciamos Pekwm


Captura Pekwm


Captura - Pekwm - 2


Captura - Pekwm - 3




Enlaces  


https://www.pekwm.se >> La web de Pekwm.

https://www.pekwm.se/themes >> Temas.

Box-Look.org - Pekwm >> Temas.

Utilidades de Escritorio - Xdgmenumaker >> Manual de Xdgmenumaker, un generador automático de menús de aplicaciones para administradores de ventanas, entre los que se encuentra Pekwm.


Foro Galería Blog


Actualizado el 31-05-2024

Administradores de Ventanas - Pekwm

Administradores de Ventanas - OpenboxAdministradores de Ventanas - Qlwm