lunes, 15 de marzo de 2010

Reconfigurando mi DWM


Hace tiempo que vego utilizando DWM como mi Gestor de Ventanas predeterminado... pero nunca me había dado el tiempo para poder "adornarlo" y ponerle cosillas para que se viera un poco más "bonito".

Pero decidí hacerlo y aquí pongo lo que conseguí...

Requerimientos: Xlib header.

Paso 1. Conseguir las fuentes.

Me fui a la página del proyecto y me descargué la versión actual de dwm (dwm-5.7.2) y también del dmenu (dmenu-4.0)...

Web Official de DWM

Paso 2. Extraer las fuentes.

Descomprimir los ficheros .tar.gz, me dirijo desde la terminal a la ruta donde descargué los ficheros y hago lo siguiente:
$ tar xzf dwm-5.7.2.tar.gz
$ tar xzf dmenu-4.0.tar.gz
Paso 3. Configuración.

Primero accedemos al directorio que se creó al descomprimir el dwm-5.7.2.tar.gz:
$ cd dwm-5.7.2/
A continuación abro el archivo config.def.h con un editor de texto:
$nano config.def.h
Aquí lo único que modifico es la configuración de colores para la barrita de que aparece en la parte superior y los bordes de las ventanas, les pongo los colores a un lado por si quieren hacer sus propias combinaciones:
/* appearance */
static const char font[] = "-*-*-medium-*-*-*-14-*-*-*-*-*-*-*";
static const char normbordercolor[] = "#ff0000"; //rojo
static const char normbgcolor[] = "#000000"; //negro
static const char normfgcolor[] = "#ffffff"; //blanco
static const char selbordercolor[] = "#ff0000"; //rojo
static const char selbgcolor[] = "#ff0000"; //rojo
static const char selfgcolor[] = "#ffffff"; //blanco
Guardamos cambios y cerramos (en nano es Ctrl+o para guardar y Ctrl+x para cerrar).

A mí en lo particular no me gusta ponerle nombres a las areas de trabajo o "tags" como le quieran llamar... así que esto no lo pondré =P.

Paso 4. Instalación.

Bien ahora desde el directorio dwm-5.7.2 hacemos lo siguiente como root:
# make clean install
Por defecto dwm se instala en /usr/local y ya debe de estarlo después del paso anterior... Ahora salgo del directorio dwm-5.7.2 y me dirijo al directorio dmenu-4.0:
# cd ..
# cd dmenu-4.0/
Bien ahora instalamos el dmenu, de la misma forma que dwm:
# make clean install
Listo instalado!....

Paso 5. Preparación para arrancar DWM.

Yo uso GDM para iniciar el entorno gráfico... pero no se preocupen que pondré ambas formas...

Arrancar con GDM.

Primero vamos a crear un archivo .desktop para que el GDM nos lo reconozca como un tipo de sesión... como root:
# nano /usr/share/xsessions/dwm.desktop
Y le agregamos la siguiente información:
[Desktop Entry]
Encoding=UTF-8
Name=dwm
Comment=This session starts dwm a very minimalist Window Manager
Exec=/home/usuario/.dwminit
Type=Application
Guardan y cierran... ojo con la ruta del directorio personal. Ahora nos vamos a nuestro directorio personal como usuario normal:
$ cd ~
Si se fijan en la información que agregamos al dwm.desktop en la parte Exec hacemos referencia a un fichero llamado .dwminit pues bien aquí es donde pondremos unas cosillas interesantes, y es donde radica lo vistoso de la configuración... como usuarios normales creamos el archivo así:
#nano .dwminit
y agregamos la siguiente iformación:
Esetroot -c /home/usuario/wallpaper.png
conky

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
}

cancion(){
if test "X`pgrep mocp`" != "X"; then
TITULO="`mocp -i|awk '/SongTitle/ {print $2}'`"
ARTISTA="`mocp -i|awk '/Artist/ {print $2}'`"
TRANSCURRIDO="`mocp -i|awk '/CurrentTime/ {print $2}'`"
TOTAL="`mocp -i|awk '/TotalTime/ {print $2}'`"
echo "$TITULO ($ARTISTA) $TRANSCURRIDO/$TOTAL"
else
if test "X`pgrep xmms2`" != "X"; then
ARTISTA="`xmms2 info|awk '/artist/ {print $4}'`"
TITULO="`xmms2 info|awk '/title/ {print $4}'`"
echo "$TITULO ($ARTISTA)"
else
echo "No Musica"
fi
fi
}

while true
do
xsetroot -name "[ Vol: `volumen` ] [ `cancion` ] [ `wifi` ] `date +"[ %a %d %b %Y ] [ %H:%M:%S ]"`"
sleep 1
done | /usr/local/bin/dwm
Bien ahora guardamos y cerramos el fichero y le damos permisos de ejecución:
$ chmod a+x .dwminit
Lean la sección que está al final y dice NOTA

Arrancar con startx

Tenemos que editar el fichero .xinitrc ubicado en el directorio personal... primero nos vamos al directorio personal...
$ cd ~
Ahora con un editor de texto abrimos el fichero...
$ nano .xinitrc

Simplemente agregamos la siguiente información:
Esetroot -c /home/akino/Imagenes/Debian_bloody.png
conky

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
}

cancion(){
if test "X`pgrep mocp`" != "X"; then
TITULO="`mocp -i|awk '/SongTitle/ {print $2}'`"
ARTISTA="`mocp -i|awk '/Artist/ {print $2}'`"
TRANSCURRIDO="`mocp -i|awk '/CurrentTime/ {print $2}'`"
TOTAL="`mocp -i|awk '/TotalTime/ {print $2}'`"
echo "$TITULO ($ARTISTA) $TRANSCURRIDO/$TOTAL"
else
if test "X`pgrep xmms2`" != "X"; then
ARTISTA="`xmms2 info|awk '/artist/ {print $4}'`"
TITULO="`xmms2 info|awk '/title/ {print $4}'`"
echo "$TITULO ($ARTISTA)"
else
echo "No Musica"
fi
fi
}

while true
do
xsetroot -name "[ Vol: `volumen` ] [ `cancion` ] [ `wifi` ] `date +"[ %a %d %b %Y ] [ %H:%M:%S ]"`"
sleep 1
done | /usr/local/bin/dwm
Guardamos y cerramos el fichero... ahora sólo queda leer la siguiente sección.

NOTA

Bien... Tengo que pararme a explicar esto un poco... empecemos desde arriba:
Esetroot -c /home/usuario/wallpaper.png
conky
Bien.. Esetroot es para poder poner el fondo de pantalla y para poder usarlo tenemos que instalar Eterm... y el conky es para monitorear el estado de nuestro sistema y hay que instalar conky... si no quieren usar las estas aplicaciones simplementen eliminen esas lineas...

Sigamos con la función wifi():
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
}
Yo me conecto por medio de una tarjeta inalambrica que es la wlan0 en mi caso... con esa función obtengo el nombre el Essid al que estoy conectado y la potencia de la señal... si no la quieren usar simplemente eliminen toda la función..

Sigamos con la función volumen()...
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
}
Aquí obtengo el volumen actual del PCM... si está en modo mute nos arroja Mudo.. si no quieren usar esta opción eliminen la función..

Ahora la función cancion()...
cancion(){
if test "X`pgrep mocp`" != "X"; then
TITULO="`mocp -i|awk '/SongTitle/ {print $2}'`"
ARTISTA="`mocp -i|awk '/Artist/ {print $2}'`"
TRANSCURRIDO="`mocp -i|awk '/CurrentTime/ {print $2}'`"
TOTAL="`mocp -i|awk '/TotalTime/ {print $2}'`"
echo "$TITULO ($ARTISTA) $TRANSCURRIDO/$TOTAL"
else
if test "X`pgrep xmms2`" != "X"; then
ARTISTA="`xmms2 info|awk '/artist/ {print $4}'`"
TITULO="`xmms2 info|awk '/title/ {print $4}'`"
echo "$TITULO ($ARTISTA)"
else
echo "No Musica"
fi
fi
}
Bien, yo uso dos reproductores... el xmms2 y el mocp (nombre real moc)... bien con el moc no hubo problemas... porque si puedo obtener el tiempo de duracion y tiempo transcurrido de las canciones así como el título y el artista... pero con el xmms2 no fue así, sólo pude obtener el titulo y el artista... cuando no estamos reproduciendo nada nos dice No Musica... cuando cualquiera de los dos reproductores se activa cambia el mensaje por los datos que antes les mencioné... bueno otro problema más con el xmms2... cuando lo cierro se queda corriendo un tipo demonio llamado xmms2d y por lo tanto no cambia el estado a No Musica... tengo que matar manualmente el proceso para que el estado cambie... con el moc todo bien... si no quieren usar estas funciones ya saben.. borrenlas.

La sección final:
while true
do
xsetroot -name "[ Vol: `volumen` ] [ `cancion` ] [ `wifi` ] `date +"[ %a %d %b %Y ] [ %H:%M:%S ]"`"
sleep 1
done | /usr/local/bin/dwm
Bien con este bucle estamos revisando constantemente las funciones... para ser exactos cada segundo (sleep 1).. y ejecuta al dwm... bien, si anteriormente eliminaron alguna funcion también tienen que eliminar las llamadas a dichas funciones en la línea xsetroot, xsetroot sirve en este caso para colocar texto en la barra del dwm, en la parte derecha superior... el modo básico del xsetroot donde sólo mostramos fecha y hora sería de la siguiente forma:
xsetroot -name "`date +"[ %a %d %b %Y ] [ %H:%M:%S ]"`"
Creo que eso es todo.

Bien espero que disfruten de este gestor de ventanas tanto como yo... aquí les dejo una captura pantalla de como quedó al final mi dwm...



6 comentarios:

Ramón on 6 de abril de 2010, 3:13 dijo...

Te ha quedado muy bien!

Solo como comentario/pregunta: ¿conoces conky y dzen?

Saludos!

Pyr0S-9889 on 6 de abril de 2010, 12:48 dijo...

Que tal @Ramón

Conky si lo uso.. si notas en la imagen final que pongo en esta entrada aparece el conky, pero del dzen no se nada...

Saludos!

Ramón on 6 de abril de 2010, 21:05 dijo...

Claro que vi Conky en el fondo =P

A lo que me refería era a que puedes por ejemplo (con conky-cli, olvidé mencionar esto) "incrustar" con ayuda de dzen2 información en la parte de la barra de dwm y así evitarte todos esos scripts. No te quito mérito pero pienso que con conky el asúnto es más ágil y en mucho menos tiempo tal vez =)

Sin ánimos de spam: http://cyb3rpunk.wordpress.com/2010/04/06/mi-escritorio-16/

Saludos!

Pyr0S-9889 on 6 de abril de 2010, 21:27 dijo...

Ramon dijo:

Claro que vi Conky en el fondo =P

A lo que me refería era a que puedes por ejemplo (con conky-cli, olvidé mencionar esto) "incrustar" con ayuda de dzen2 información en la parte de la barra de dwm y así evitarte todos esos scripts. No te quito mérito pero pienso que con conky el asúnto es más ágil y en mucho menos tiempo tal vez =)

Sin ánimos de spam: http://cyb3rpunk.wordpress.com/2010/04/06/mi-escritorio-16/

Saludos!


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

@Ramon disculpa man andaba baboseando y en ves de publicar el comentario le di en rechazar creo... jaja xD... y lo que me comentas sobre dzen y el conky-cli eso no lo sabía tendré que checarlo bien... y la verdad prefiero ver lo del wifi, rolas y otras cosillas en la barrita superior porque se veia muy solitaria :)

Saludos y disculpa lo del comentario...

Pyr0S-9889 on 6 de abril de 2010, 21:31 dijo...

WTF ò_ó

por más que presioné F5 no me apareció el comment... y apenas le di en publicar (el comment anterior) y apareció tu comment jajajajajaja ¬.¬"!... tons si había dado en publicar el comment XD

Ramón on 7 de abril de 2010, 3:15 dijo...

haha Todos nos metemos algo de vez en cuando =P Ok, no...

Me gusta mucho tu blog. Hace ya algunos mesesillos me lo leí casi todo y aprendí unas cosas interesantes, nmap sobre todo.

Publicar un comentario

 

Pyr0S-9889 © 2008 Business Ads Ready is Designed by Ipiet Supported by Tadpole's Notez