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.
