Escritorio Terminator en OpenBox

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:

Escritorio tres veces más productivo (y sexy)
Escritorio tres veces más productivo (y sexy)

 
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.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *