Awesome WM [Instalación + configuración]

ArchLinux+Awesome WM en acción!

Hace meses, por razones que desconozco me aburrí de usar openbox + tint2 (que por cierto es una buena combinación también) después de ver un hilo en los foros de arch quedé maravillada por awesome.

Esta guía esta pensada para aquellos usuarios que quieran instalar Awesome  y no sepan por donde empezar, y mas puntualmente, guiar con la configuración que actualmente tengo en mi laptop, no creo que yo sea una luminaria en cuanto el tema pero pongámoslo de esta manera, si al final de la entrada has logrado entender algo de  awesome significa que eres genial y yo también xD.

Advertencia: Awesome esta pensado para usuarios algo experimentados interesados en entornos de escritorio tipo mosaico, para entusiastas y curiosos que quieran aumentar su conocimiento y para todo aquel que se crea capaz de lograrlo (*mirada desafiante*).

NOTA!: esta guía esta hecha en base a Arch Linux, pero salvo la instalación de paquetes , todos los pasos son exactamente los mismos es cualquier distro.

Preparación

Instalación de los componentes

pacman -S awesome vicious xcompmgr nitrogen lxappearance xorg-setxkbmap

estos son los componentes que básicos que necesitaremos, veamos las funciones de los paquetes que instalamos:

  • awesome: gestor de ventanas
  • vicious: libreria modular para los widgets de awesome
  • xcompmgr: para usar la composición
  • nitrogen: se encarga de los wallpaper
  • lxappearance: selector de temas gtk
  • xorg-setxkbmap: (opcional) para ejecutar el cambiador de localización de teclado

para iniciar awesome agregamos a nuestro ~/.xinitrc:

exec awesome

Después de instalar awesome, creamos una carpeta donde guardar el rc.lua, seguidamente copiamos dicho  archivo de configuración que se incluye por defecto con el siguiente comando:

mkdir ~/.config/awesome && cp /etc/xdg/awesome/rc.lua ~/.config/awesome/

rc.lua guarda toda la configuración de awesome, pero no así los temas, estos son creador aparte y se almacenan en /usr/share/awesome/themes , los veremos mas adelante.

El archivo principal de configuración, rc.lua, los archivos de temas y algunos widgets estan escritos en lua, un lenguaje de programación imperativo, estructurado y muy ligero, basado en C y Perl…… pero no te espantes por eso, es mas sencillo de lo que parece, ademas usas Linux,  hay peores cosas como compilar jajaja.

Lo que si debes tener claro es una cosa En Lua: El Orden Es Importante! . Así que si abres una llave { debes cerrar esa llave } . una vez mas, El Orden Es Fundamental!.

También debemos entender algunos conceptos básicos que tal vez te puedan parecer inusuales:

Cliente
Una ventana cualquiera.
Tag
Un tag vendría a ser un espacio de trabajo. Difiere de este en algunos aspectos, como poder mostrar un cliente en varios tags, o mostrar el contenido de mas de un tag a la vez.
Master window (Ventana maestra o principal)
La ventana maestra (o principal) es la que usualmente requiere mas atención. Este concepto fue tomado de dwm, las otras ventanas simplemente se llaman no-maestras o no principales xD.
Floating window (Ventana Flotante)
usualmente las ventanas no se sobreponen unas sobre otras, pero algunas aplicaciones no funcionan bien bajo el paradigma de mosaico, por lo que es posible hacerlas flotantes.
los clientes flotantes pueden ser movidos y ser redimensionas libremente al igual que las ventanas no flotantes.
Wibox
Es lo que podríamos llamar como “panel” , se pueden agregar tantos wibox como deseemos, estos contienen los widgets.
Widget
Los widgets son los objetos que proveen varias funciones desde menús, barra de tags, lista de ventanas, información del sistema, reloj, área de notificación y muchas mas, son simples y de gran flexibilidad.
Screen (pantalla)
Indica en que pantalla se desplegará la o las ventanas. Útil solo si tenemos mas de un monitor.
Layout (Disposición)
Un layout es la manera en que se organizan las ventanas. Awesome ofrece los siguientes layouts (unos mas útiles que otros), estos se representan como el icono en la parte derecha de nuestra barra de widgets:

  • colums (columnas) – La ventana maestra es mostrada en la columna izquierda (o derecha, hay 2 layouts de este) y las de mas ventanas en la columna contraria.
  • rows (filas)  – igual que el anterior pero filas en vez de columnas.
  • magnificado – La ventana principal se posiciona en el centro de la pantalla y the master window (only one in this layout) is drawn in the middle of the screen, the other ones are stacked under it in columns.
  • maximizado – la ventana principal usa todo el espacio de la ventana, dejando a las otras detrás.
  • espiral – la ventana principal a la izquierda, en la derecha superior 2 ventanas en la derecha inferior 4 ventanas y así….. (a ver quien utiliza ese :P).
  • zig-zag – igual que el anterior pero en sentido inverso (madre mia xD).
  • floating (flotante) – las ventanas pueden ser movidas y redimensionadas libremente, también se pueden superponer y así…

Awesome Esta pensado para utilizar de manera mas activa el teclado, por lo cual se utilizan una serie de combinaciones con la tecla Mod4 (o tecla windows) aqui una util tabla de combinaciones:Estas combinaciones pueden ser personalizadas en rc.lua.

Modificando el archivo rc.lua

Todo claro hasta aquí? bien, ahora si! a por el rc.lua, podemos usar cualquier editor de texto, aunque recomiendo alguno que remarque la sintaxis, así te será mas fácil guiarte dentro del código.

A primera vista es desconcertante, el fichero de configuración esta escrito en Lua, que por decir de alguna manera….. no es amigable de buenas a primeras. Pero verás que es mas funcional y claro de lo que parece, si has configurado alguna vez conky, pues es parecido pero mas complejo xD. ojo!, para comentar se utiliza el doble guión (- -)

Para ilustrarse un poco pueden examinar el rc.lua que uso actualmente.

para activar la composición (p. ej. transparencia en ventanas), colocamos al principio del archivo, justo debajo de require(“naughty”) esta linea, añadimos también vicious para usar los widgets que aparecerán mas adelante:

-- aquí pondremos nuestros agregados
awful.util.spawn_with_shell("xcompmgr &")
vicious = require("vicious")

Si vamos mas abajo nos encontramos con las siguientes lineas, aquí podemos declarar algunos parámetros como el tema, alias y la terminal predeterminada :

.....
terminal = "xterm"

indicaré sakura como terminal, de aquí en adelante , cada vez que se invoque la variable terminal se ejecutará sakura.

....
terminal = "sakura"

podemos indicar que layouts queremos , para deshabilitar comentamos la linea con doble guión:

.........
{
    awful.layout.suit.floating,
    awful.layout.suit.tile,
    awful.layout.suit.tile.left,
    awful.layout.suit.tile.bottom,
    awful.layout.suit.tile.top,
    awful.layout.suit.fair,
    awful.layout.suit.fair.horizontal,
--  awful.layout.suit.spiral,
--  awful.layout.suit.spiral.dwindle,
    awful.layout.suit.max,
--  awful.layout.suit.max.fullscreen,
--  awful.layout.suit.magnifier
 }
 .........

Tags

En el apartado tags podemos modificar la etiqueta de cada tag, también el layout por defecto en cada tag :

tags[s] = awful.tag({ 1, 2, 3, 4, 5, 6, 7, 8, 9 }, s, layouts[1])

en el miose mira así:

tags[s] = awful.tag({ "(*^▽^)", "へ(^∇^)", "(ノ^_^)ノ", "(・_・ )" }, s, layouts[1])

Menú

Awesome consta de un widget tipo menú, donde podemos ordenar todas las aplicaciones instaladas en diferentes secciones, configurarlo es sencillo, pero requiere orden. Primero declaramos el nombre del menú y luego su contenido. p.ej., para crear el menú “gráficos” lo he hecho de esta manera:

menugraphics = {
   { "Djview4", "djview4" },
   { "GIMP", "gimp" },
   { "Inkscape", "inkscape" },
   { "Mcomix", "mcomix" },

Noten que la primera parte es el nombre que aparecerá (GIMP), lo segundo es el comando de ejecución (gimp), para dejarlo  más claro, aquí esta el menú “editores” en donde he colocado editores de texto como vi y nano:

menueditors = {
 { "Leafpad", "leafpad" },
 { "Medit", "medit" },
 { "Nano", terminal .. " -e nano" },
 { "Vim", terminal .. " -e vim" },
 { "Vi", terminal .. " -e vi" },
 { "Zim", "zim" },

como verán la orden para Vim es “Vim”, terminal .. ” -e vim” lo que ejecuta  “sakura -e vim“.

una vez creados los sub-menus, procedemos a crear el menú principal, declarado su nombre y su contenido, al igual que los sub-menus:

mymainmenu = awful.menu({ items = { { "Archlinux" },
                                    { "Editores", menueditors },
                                    { "Graficos", menugraphics },
                                    { "Internet", menuweb },
                                    { "cloud", submenucloud },
                                    { "Multimedia", menumultimedia },
                                    { "Oficina", menuoffice },
                                    { "Desarrollo", menudevelop },
                                    { "Shells", menushells },
                                    { "Utilities", menuutil },
                                    { "Sistema" },
                                    { "Awesome", myawesomemenu },
                                    { "Configurar", menuconf },
                                    { "Sistema", menusys },
                                    { "Terminal", terminal },
                                    { "Anki", "anki" },
                                    { "Firefox", "firefox" },
                                    { "Spacefm", "spacefm" },
                                    { "Reiniciar", "sudo systemctl reboot" },
                                    { "Apagar", "sudo systemctl poweroff" }
                                  }
                        })
mylauncher = awful.widget.launcher({ image = image(beautiful.awesome_icon),
                                     menu = mymainmenu })

en esta ultima linea se puede especificar el icono que deberá estar declarado previamente como beautiful.awesome_icon en el tema utilizado.

El resultado de todo lo anterior sería algo así:

Tema y wallpaper

Ahora vamos con el tema, este se define en un archivo llamado theme.lua, y se almacena en /usr/share/awesome/themes , donde se encuentra en un directorio con el nombre del tema, junto a los iconos y demás imágenes que podemos utilizar.

El tema de mi configuración se llama dot (creado por mi :D) no es la gran cosa, pero es simple y limpio a la vista, minimalismo puro! puedes tomarlo como base para crear tu propio tema si lo deseas, (porque puede resultar un poco femenino para los caballeros), hecha un vistazo al código aqui o puedes  descargarlo aquí junto a los iconos. Una vez bajado, copia la carpeta “dot” a /usr/share/awesome/themes , luego busca beautiful.init en el rc.lua y cambias la ruta del tema:

-- el tema define colores, iconos y wallpaper
beautiful.init("/usr/share/awesome/themes/dot/theme.lua")

Una recomendación, siempre revisa los temas que bajes , pues la mayor parte del tiempo requiere configuración personalizada en cuanto a rutas de archivos y mas….

En cuanto al wallpaper usaremos nitrogen, una liviana aplicación para gestionar los wallpapers, le indicamos a awesome con la siguiente linea en nuestro theme.lua:

-- Nitrogen maneja los wallpapers
theme.wallpaper_cmd = { "/usr/bin/nitrogen --restore" }

Widgets y Wibox

Como dije antes, los widgets son simples objetos que cumplen diversas funciones, por defecto, awesome provee un wibox en la parte superior con un lanzador de menú, una barra de tags, una lista de ventanas, una bandeja del sistema, un reloj  y un selector de layouts. Pero claro que existen muchos mas widgets que podemos usar y quizás esta es la parte mas interesante de awesome.

Al igual que los menus, primero declaramos el widget y luego lo agregamos al wibox, no se preocupen por esto, yo les proveeré algunos widgets geniales y muy utiles! simplemente copien y peguen el código de cada widget justo debajo de la sesión de tags.

En mi configuración tengo dos wibox, el de la parte superior lo dejaremos tal como esta,quitando el reloj nada mas , en el wibox de abajo ubicaremos los widgets de información del sistema, y un calendario escrito en lua.para empezar declaremos los widgets:

Información del nucleo y SO:http://pastebin.com/gXuqGZzm

Separador y espacios

http://pastebin.com/mYftqVaa

Monitor de redhttp://pastebin.com/a5s2rcQB

Bateria

al hacer la captura estaba usando mi laptop sin la bateria, pero este widget muesta el tiempo de carga y también el tiempo de descarga.
http://pastebin.com/d2jd8xUB

Uso de memoria RAM
http://pastebin.com/e5fvmxhx

Sistema de Archivos

Tengo como unico sistema operativo Arch Linux, y 4 particiones (/boot, /, swap, /home),  ustedes pueden agregar las particiones correspondientes a su sistema.
http://pastebin.com/AmNQbD8L

Indicador de Volumenhttp://pastebin.com/eGErSG8n

Monitor de CPU http://pastebin.com/guEWBCvu

Cambiar localización del teclado

Este ingenioso widget te permite cambiar la localización de tu teclado al darle click sobre el, utiliza setxkbmap, y deben especificar las localizaciones deseadas, p. ej. yo tengo us = teclado USA, es = teclado español, gb = teclado UK, latam =teclado latinoamericano

http://pastebin.com/jz77yJej

 Reloj y calendario

El reloj por defecto no muestra los segundos, si deseamos esto, reemplazamos el widget texclock por este

http://pastebin.com/smiSB49g

Este calendario  al pasar el puntero sobre el reloj se nos mostrará un calendario, al dar click izquierdo retrocede un mes y click derecho avanza un mes.

guardamos el código en un archivo llamado calendar2.lua en ~/.config/awesome y agregamos en nuestro rc.lua require(‘calendar2′) debajo de nuestros agregados.

http://pastebin.com/4PTKKZZP

Configuración del wibox

ya con los widgets declarados nos resta crear el wibox y llenarlo con los widgets :D

entre sus opciones podemos especificar posición, pantalla, grosor y opacidad. mi configuración es la siguiente:

...........................
    -- wibox superior
    mywibox[s] = awful.wibox({ position = "top", screen = s, height=19, opacity = 0.65})
    -- Add widgets to the wibox - order matters
    mywibox[s].widgets = {
        {
            mylauncher,
            mytaglist[s],
            mypromptbox[s],
            layout = awful.widget.layout.horizontal.leftright
        },
        mylayoutbox[s],
        separator, -- mytextclock, separator,
        s == 1 and mysystray or nil,
        separator, kbdcfg.widget, separator,
        mytasklist[s],
        layout = awful.widget.layout.horizontal.rightleft
    }
-- wibox inferior
     mywibox[s] = awful.wibox({ position = "bottom", screen = s, height=19, opacity = 0.79})
      mywibox[s].widgets = {
        {
            space, sysicon, space, sys, separator,
            neticonup, espace, netwidgetup, space,
            neticondown, espace, netwidgetdown, separator,
            baticon, space, battpct, space, battbar, separator,
            ramicon, space, memwidget, space, membar, separator,
            fshomeicon, space, fshbar, space, fsh, separator,
            fsrooticon, space, fsrbar, space, fsr, separator,
            volicon, space, volwidget, separator,    
  --          cpuicon, space, cpu1, space, cpubar, space, space,  
  --          cpuicon, space, cpu2, space, cpubar2, separator,
            cpuicon, space, cpu1, separator, cpuicon, space, cpu2, separator,
            mytextclock,
            layout = awful.widget.layout.horizontal.leftright
        },
        layout = awful.widget.layout.horizontal.rightleft
     }
.....................

NOTA: deberán configurar los espacios y separadores para un aspecto acorde al tamaño de su pantalla.

Reglas

podemos indicar que algunos programas se abran en determinados tags, p. ej., que firefox aparezca sólo en el tag #3, que GIMP aparezca en el tag #4, etc…. nos dirigimos al apartado rules de nuestro rc.lua y modificamos los programas y sus reglas, el primer número indica la pantalla y el segundo indica el tag, aquí un ejemplo:

........
{ rule = { class = "Spacefm" }, properties = { tag = tags[1][2] } },
{ rule = { class = "Gimp" }, properties = { tag = tags[1][4] } },
{ rule = { class = "Firefox" }, properties = { tag = tags[1][3] } },
.......

Según estas reglas, spacefm aparecerá en el tag #2, Gimp en el #4 y firefox en el #3 de la pantalla 1, sencillo no?

posibles problemas

resolución de pantalla

no tuve problemas al indicar la resolución de pantalla (por el “magnifico” driver SiS solo tengo 1280×800 en mi laptop) pero en mi desktop no pude mantener la resolución 1280×1024 , asi que lo solucioné  agregando estas lineas al ~/.xinitrc:

xrandr --output DVI-0 --mode 1280x1024

donde DVI-0 es la salida de video y --mode es la resolución deseada.

Aplicaciones Qt

si se desconfigurara la aparencia de aplicaciones Qt  al cambiar a awesome prueben a modificar el perfil tecleando en la consola qtconfig y seleccionan gtk, en practicamente todos los casos esto lo soluciona.

woooow si has llegado hasta aquí… Felicidades!!! (T▽T*)(*T▽T), jajaja,  este artículo salio mas extenso de lo que pensé, pero creo que es el artículo en español mas completo sobre la configuración de awesome. Espero que se animen a usar awesome, que realmente es magnifico. un saludo! ((o>ω<))o

Fuentes

Iconos Retina (cc by-sa 3.0)

La wiki de awesome (configuración)

Blog de jasonmaur (widgets)