martes, 27 de julio de 2010

gestor de ventana DWM


Aunque de normal siempre uso el terminal de comandos (especialmente desde que tengo un ordenador de recursos limitados), hay veces que no queda más remedio que entrar en modo gráfico (véase, cuando quiero navegar por Internet a este blog, o cualquier pagina que requiera java, imágenes, o vídeos). Entonces es cuando se hace necesario un gestor de ventanas, y entonces es cuando me planteo uno que no asesine los recursos de mi sistema, y se pueda controlar totalmente por comandos de consola. La solución fue DWM (dinamic window manager). Dwm es un gestor de ventanas mínimo, que no tiene scripts de configuración, sino que se especifica sus características estéticas antes de compilarlo, proceso que no tarda más que unos pocos segundos, y se puede repetir en cualquier momento.Se le pueden ir añadiendo módulos, con funcionalidades, como conky, para visualizar información de sistema. No manejas ventanas, ni iconos, sino que las aplicaciones se abren a pantalla completa, o si lo prefieres, en mosaico, ocupando secciones de pantalla.

Para instalar necesitaras el código fuente (seleccionar el más reciente)
Si quieres poder usar el lanzador de ejecutables, descarga aquí la ultima versión de dmenu
Si quieres información de sistema, como temperatura de cpu, carga de procesador.. descarga conky
Y por ultimo, si quieres tener un fondo de pantalla, tienes que instalar Esetroot de aquí

Descomprime el código fuente de DWM (tar xvf), y entra en el directorio. Dentro, hay que hacer un ./configure && make && make install. Después de hacer el make, se crea una librería llamada config.h a partir de ahora, cualquier modificación en DWM, se reflejará ahí (por ejemplo, el color de la barra superior, o la consola empleada para trabajar). Tras guardar, harás de nuevo un make install. Para mi escritorio, tuve que editar esta parte:

/* See LICENSE file for copyright and license details. */

/* appearance */
static const char font[] = "-*-terminus-medium-r-*-*-16-*-*-*-*-*-*-*";
static const char normbordercolor[] = "#36ff00";
static const char normbgcolor[] = "#000000";
static const char normfgcolor[] = "#36ff00";
static const char selbordercolor[] = "#0066ff";
static const char selbgcolor[] = "#36ff00";
static const char selfgcolor[] = "#000000";

(los colores tienen que estar en valor hexadecimal, yo usé gimp para sacarlos. 36ff00 es el verde radioactivo, 000000 es negro). Como veis se puede dar distintos colores para el borde, fondo y letras de los elementos seleccionados o no. Yo solo quise usar esta gama, pero sois muy libres de dejarlo como os plazca

Para usar aterm en vez de la predeterminada xterm, tuve que modificar la entrada correspondiente. aterm me gusta más porque soporta transparencias y colores.

/* commands */
(...)
static const char *termcmd[] = { "aterm", NULL };
(...)

jugad como queráis con config.h No es muy complicado intuir para que sirve cada cosa.

Es buen momento para instalar el dmenu, esetroot, conky. Todos ellos son un simple descomprimir, ./configure, make, make install, si hay problemas de dependencias, ya sabéis, a buscar y cumplirlas, que para eso si alguien ha leído hasta aquí es que no es novato en Linux.

tras hacerlo, hay que editar el archivo .xinitrc si iniciáis el modo gráfico con startx. Si lo hacéis automáticamente mediante GDM, XDM, o lo que sea, entonces googlead, porque yo no lo he hecho de ese modo, y no lo he probad. Recordar que .xinitrc se encuentra en el directorio $HOME

Lo mínimo sería comentar todo, y añadir

Esetroot -c
conky | while read -r; do xsetroot -name "$REPLY"; done &
sleep 1
done | /usr/local/bin/dwm

si, el sleep 1 es necesario para ir actualizando la pantalla. De todos modos, si os fijáis, en mi screenshot, tengo información en la barra de mi wifi, volumen, fecha y hora. Para lograrlo hay que poner más opciones en el .xinitrc. Dejo aquí mi .xinitrc al completo, para que trasteéis con él

-------------------------------------------------------------------------------------------

#!/bin/sh
# $XConsortium: xinitrc.cpp,v 1.4 91/08/22 11:41:34 rws Exp $
Esetroot -c /root/Miscelanea/fotos/SE-Bathory1024.jpg
conky | while read -r; do xsetroot -name "$REPLY"; done &
#conky
userresources=$HOME/.Xresources
usermodmap=$HOME/.Xmodmap
sysresources=/etc/X11/xinit/.Xresources
sysmodmap=/etc/X11/xinit/.Xmodmap

# merge in defaults and keymaps

if [ -f $sysresources ]; then
xrdb -merge $sysresources
fi

if [ -f $sysmodmap ]; then
xmodmap $sysmodmap
fi

if [ -f $userresources ]; then
xrdb -merge $userresources
fi

if [ -f $usermodmap ]; then
xmodmap $usermodmap
fi

if [ ! -x /usr/bin/cpp ]; then
NOCPP="--no-cpp"
fi

wifi(){
STADO="X`/sbin/iwgetid`"
if test "$STADO" != "X" ; then
ESSID="`/sbin/iwgetid |awk -F ":" '{print $2}'|sed -e 's/"//g'`"
LINK="`awk '/wlan0:/ {print $3}' /proc/net/wireless |sed -e 's/\.//g'`"
echo "$ESSID Link: $LINK/70"
else
echo "Sin conexion"
fi
}

volumen(){
ESTADO="`amixer get PCM |awk '/Front\ Left:/ {print $7}'`"
if test "$ESTADO" != "[on]" ; then
echo " Mudo"
else
echo " `amixer get PCM |awk '/Front\ Left:/ {print $5}' | sed -e 's/\[//g'|sed -e 's/%\]//g'`%"
fi
}

# Start the window manager:

while true
do
xsetroot -name "[ Vol: `volumen` ] [ `wifi` ] `date +"[ %a %d %b %Y ] [ %H:%M:%S ]"`"
sleep 1
done | /usr/local/bin/dwm

ahora a editar .conkyrc (también en $HOME)

# --- Window Layout & Options --- #
own_window yes
own_window_colour brown
own_window_transparent yes
own_window_type override
own_window_transparent yes
own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager
double_buffer yes
use_spacer false
use_xft yes
alignment top_right
#alignment top_left
gap_x 0
gap_y 30

# --- Colours, Sizes, Fonts & Margins --- #
update_interval 2.0
minimum_size 400 0
stippled_borders 3
border_margin 2
border_width 2
default_color 8f8f8f

# --- Text --- #
draw_outline no
draw_borders no
font MgOpenModata:size=8
uppercase no
draw_shades yes



TEXT

${color grey} | ${color grey}Uptime:${color 6795ae} $uptime ${color grey} | ${color grey}CPU:${color red} $cpu% ${color grey} | ${color grey}RAM:${color 6795ae}$mem/$memmax ${color grey} | Swap:${color 6795ae} $swap/$swapmax ${color grey} | HDD:${color 6795ae} ${fs_used /bin/bash}/${fs_size /bin/bash} ${color grey} | Down:${color 6795ae}${downspeed eth0} k/s ${totaldown eth0} ${color grey} | Up:${color 6795ae} ${upspeed eth0} k/s ${totalup eth0}
${offset 240}${color slate grey}UpTime: ${color }$uptime
${offset 240}${color slate grey}Kern:${color }$kernel
${offset 240}${color slate grey}CPU:${color } $cpu% ${acpitemp}C
${offset 240}${cpugraph 20,130 000000 ffffff}
${offset 240}${color slate grey}Processes: ${color }$processes
${offset 240}${color slate grey}Running: ${color }$running_processes

${offset 240}${color slate grey}Highest CPU:
${offset 240}${color #ddaa00} ${top name 1}${top_mem cpu 1}
${offset 240}${color lightgrey} ${top name 2}${top cpu 2}
${offset 240}${color lightgrey} ${top name 3}${top cpu 3}
${offset 240}${color lightgrey} ${top name 4}${top cpu 4}

${offset 240}${color slate grey}Highest MEM:
${offset 240}${color #ddaa00} ${top_mem name 1}${top_mem mem 1}
${offset 240}${color lightgrey} ${top_mem name 2}${top_mem mem 2}
${offset 240}${color lightgrey} ${top_mem name 3}${top_mem mem 3}
${offset 240}${color lightgrey} ${top_mem name 4}${top_mem mem 4}

${offset 240}${color slate grey}MEM: ${color } $memperc% $mem/$memmax
${offset 240}${membar 3,100}
${offset 240}${color slate grey}SWAP: ${color }$swapperc% $swap/$swapmax
${offset 240}${swapbar 3,100}

${offset 240}${color slate grey}ROOT: ${color }${fs_free /}/${fs_size /}
${offset 240}${fs_bar 3,100 /}
${offset 240}${color slate grey}NET:
${offset 240}${color}Up: ${color }${upspeed eth0} k/s
${offset 240}${upspeedgraph wlan0 20,130 000000 ffffff}
${offset 240}${color}Down: ${color }${downspeed wlan0}k/s${color}
${offset 240}${downspeedgraph wlan0 20,130 000000 ffffff}

Bueno, lo dejais como queraís. sin ello, el conky no funcionará. Puede sacaros cualquier informacion, inclido de todos los procesadores (no necesito para mi pobre monoprocesador de 866mhz). Este archivo tiene las rutas de mi equipo, entonces tendréis que modificalras a vuestras características.

Por fin, para ejecutar a partir de ahora, solo hay que hacer startx, o lo que hagais para iniciar servidor gráfico. El esfuerzo merece la pena

uso

alt+shift+enter ==> abre la consola, o varias
alt+m ==> abre el modo monoculo, el programa activo en ese escrotorio al pasar el ratón por encima, ocupa pantalla ocmpleta
alt+t ==> todos los programas activos en ese escritorio comparten la pantalla en mosaico
alt+ ==> cambia al escritorio especificado por el numero. Hay 9 escritorios simulatáneos
alt+p ==> (solo funciona con dmenu) abre la lanzadera de ejecutables. Empiezas a escribir el nombre, y en el menu aparecen todas las posibilidades. Usa las flechas y enter para seleccionar y ejecutar
alt+shift+c ==> mata el proceso seleccionado, es lo que se usa para cerrar programas también

recuerda que para seleccionar entre los programas, el que esté en primer plano es el que tenga el ratón encima.

En fin, que lo disfrutéis

2 comentarios: