Hace algunos días cambié de distribución a !#. Aprovechando que la distro no tiene DE y que mi escritorio siempre terminaba con basura decidí poner ahí algo más productivo y ligeramente geek: un Terminator. Con algo de información en los foros de la distro e insipiración he obtenido esto:

La siguiente guía explica como conseguir el Terminator de escritorio en OpenBox, aunque seguramente se puede hacer en otros gestores de ventanas sin mucho problema. La primera parte es definir un perfil específico para el Terminator del escritorio y agregar procedimientos para mostrarlo y ocultarlo. Esto es independiente del gestor de ventanas.
El siguiente es un ejemplo de configuración con un perfil para el escritorio:
[global_config] title_inactive_bg_color = "#000000" title_transmit_bg_color = "#000000" borderless = True handle_size = 0 focus = system [keybindings] [profiles] [[default]] scrollbar_position = hidden palette = "#000000:#cc0000:#4e9a06:#c4a000:#3465a4:#75507b:#06989a:#d3d7cf:#555753:#ef2929:#8ae234:#fce94f:#729fcf:#ad7fa8:#34e2e2:#eeeeec" background_darkness = 0.8 scrollback_lines = 5000 background_type = transparent use_system_font = False cursor_color = "#d8d8d8" foreground_color = "#d8d8d8" color_scheme = custom font = Monospace 10 background_color = "#2e3436" scrollback_infinite = True [[desktop]] scrollbar_position = hidden palette = "#000000:#cc0000:#4e9a06:#c4a000:#3465a4:#75507b:#06989a:#d3d7cf:#555753:#ef2929:#8ae234:#fce94f:#729fcf:#ad7fa8:#34e2e2:#eeeeec" scrollback_lines = 5000 background_darkness = 0.0 background_type = transparent use_system_font = False cursor_color = "#d8d8d8" foreground_color = "#d8d8d8" show_titlebar = False color_scheme = custom font = DejaVu Sans Mono 10 scrollback_infinite = True [layouts] [[default]] [[[child1]]] type = Terminal parent = window0 profile = default [[[window0]]] type = Window parent = "" [plugins]
Para simular la función de mostrar escritorio/ventanas (Spr+D) hice un script que puede realizar la tarea usando alguna de las siguientes estrategias:
1) Guardar una referencia a la ventana activa, mostrar escritorio, y enfocar el Terminator de escritorio. Muy responsivo pero al traer las ventanas de nuevo, sólo traerá la que estaba activa.
2) Guardar referencias de todas las ventanas no minimizadas, mostrar escritorio y enfocar. Algo menos responsivo, puede traer de vuelta todas las ventanas guardadas y enfocar la que estaba activa pero el orden de las ventanas se pierde.
3) Mininizar una a una las ventanas para almacenar las referencias ordenadas y enfocar el Terminator. Menos responsivo al mostrar escritorio/ventanas pero conserva el orden de las ventanas.
La ubicación del script showTDesktop la he puesto en /usr/bin.
#!/bin/bash termWinName='TerminatorAsDesktop' strategy=3 isRunning=$(wmctrl -l -x | grep $termWinName) # execute terminator for desktop if [ "$isRunning" = "" ] then wmctrl -k on $(terminator --profile=desktop --borderless --geometry=1120x0 -T$termWinName) else # Ids in decimal curWinId=$(xdotool getactivewindow) termWinId=$(xdotool search --name $termWinName | head -1) ### show desktop ### if [ "$curWinId" != "$termWinId" ] then if [ $strategy = 1 ] then echo $curWinId > /tmp/$termWinName wmctrl -k on elif [ $strategy = 2 ] then host=$(hostname) curWS=$(xdotool get_desktop) # cur win id in hex curWinIdX=$(printf "0x%0*x" 8 $curWinId) echo $curWinIdX > /tmp/$termWinName while read aWindow; do winInWS=`expr match "$aWindow" "^.......... *$curWS $host "` if [ $winInWS != "0" ] then #winTitle=${aWindow:$winInWS} # win id in hex winId=${aWindow:0:10} winState=$(xwininfo -id $winId | grep 'Map State:') winState=${winState:13} # window not minimized if [ "$winState" != "IsUnMapped" ] then #echo "$winId $winState $winTitle" if [ "$curWinIdX" != "$winId" ] then echo $winId >> /tmp/$termWinName #else # echo "main win already saved" fi fi fi done < <( wmctrl -l ) wmctrl -k on elif [ $strategy = 3 ] then cat /dev/null > /tmp/$termWinName curWin=$curWinId while [ "$curWin" != "" ] do echo $curWin >> /tmp/$termWinName xdotool windowminimize $curWin curWin="" ; curWin=$(xdotool getactivewindow) ; done fi wmctrl -a $termWinName ### Restore windows ### else if [ $strategy = 1 ] then lastWinId=$(cat /tmp/$termWinName) if [ $lastWinId = "" ] then lastWinId=$termWinId fi xdotool windowmap $lastWinId elif [ $strategy = 2 ] || [ $strategy = 3 ]; then for winId in $(sed '1!G;h;$!d' /tmp/$termWinName) do xdotool windowmap $winId done fi fi fi exit 0
La segunda parte es la integración en OpenBox.
Dentro de ~/.config/openbox/rc.xml se definen el juego de teclas para llamar el script y las reglas para el despliegue del Terminator.
Activación de juego de teclas:
true Determinator showTDesktop
Despliegue de la ventana de Terminator para escritorio:
yes left 0 below All yes yes vertical no no
Para terminar sólo falta quitar los bordes de las ventanas y remover la sombra del Terminator para hacer que no parezca una aplicación en ventana y reiniciar OpenBox y Compositor.
Los bordes de las ventanas se remueven editando el themerc del tema activo, modificando la siguiente propiedad:
border.width: 0
La sombra se desactiva editando ~/.config/compton.conf, modificando la siguiente propiedad:
shadow-exclude = [ ..., "n:e:TerminatorAsDesktop" ];
Y es todo. Ahora puedes ver tus fondos de pantalla en todo su explendor mientras haces commit.