Notxor tiene un blog

Defenestrando la vida


Probando el gestor de ventanas awesome

Me he aficionado a los entornos de escritorio de estilo mosaico. Mi favorito i3wm ha tenido la culpa. Sin embargo, hace unos días que vengo probando awesomewm, otro entorno de ese tipo, del que voy a hablar en este artículo. No demasiado profundamente, pues llevo utilizándolo tan sólo tres días y he gastado prácticamente uno entero en acondicionarlo un poco a mis gustos --algo que considero importante en cualquier herramienta que utilizo--. El problema es que he gastado bastante tiempo en pegarme con la configuración, incluso antes de saber muy bien cómo funciona el sistema, así que empecé con algunos palos de ciego de los que prefiero ahorrarme el esfuerzo de contarlos aquí para centrarme en el meollo.

Instalación

La instalación fue fácil: tiré de zypper y OpenSuse hizo el resto; en cada distribución tirarán de su herramienta de instalación, en la mía me bastó con escribir un escueto:

sudo zypper install awesome

Sólo tuve un problema con el paquete de awesome que viene con OpenSuse, la configuración por defecto. Lo digo o escribo así, tal cual, con cursivas porque efectivamente es un defecto: no he visto cosa más fea, ya me perdonará quien lo hiciera, pero el tema ese es... feo. No encuentro otra palabra más políticamente correcta porque lo primero que vino a la mente tras ver ese diseño es que el que lo hizo tenía el gusto en el mismo sitio que las avispas su gracia. Esto me llevó directamente al siguiente punto: la configuración.

Configuración

Antes de que mi ordenador agarrara un virus, o algo más gordo por tamaño despropósito, me decidí a ponerme con la configuración del chismático. Algo sencillo en cuanto encontré algunos themes que llevar al disco duro. Cuando los abrí me encontré un montón de código escrito en lua. Algo debí haber sospechado, porque quien me recomendó este entorno es un fan de ese lenguaje.

El entorno busca el archivo de configuración ~/.config/awesome/rc.lua en nuestro disco duro, por eso utilicé la plantilla que viene con los themes que he mencionado arriba con la idea de modificarlo --siempre es más sencillo que empezar uno desde cero--. Además, la plantilla de la que partí está bastante bien estructurada y genera algunas características que me han resultado curiosas y útiles.

Lo primero que hice fue probar todos los themes que me había descargado, uno a uno. Algunos más bonitos, otros más feos, pero eso va en gustos. Más o menos, todos funcionaban de manera similar y cualquiera de ellos era infinitamente mejor que el que viene por defecto con OpenSuse. El funcionamiento es parecido, como digo, porque la mayoría de la funcionalidad está situada en el fichero rc.lua mientras que saca todos los temas de color, fondo de pantalla, iconos, etc., al directorio themes donde cada uno de ellos tiene su correspondiente theme.lua.

Como era de esperar, lo primero que eché de menos al arrancar awesome fueron las combinaciones de teclas que tengo configuradas en i3wm y a las que estoy más que acostumbrado. Mis atajos para las aplicaciones más habituales no funcionaban (todas), aunque sí algunas como mod-Enter para lanzar el terminal. Encontré además que viene con un pichorro para lanzar el menú de aplicaciones --en la configuración por defecto de OpenSuse además lo colocan en la barra de widgets--; sin embargo, estoy acostumbrado a los que proporciona rofi. Eso fue de las cosas que primero configuré. Aún así, muchas combinaciones me salen automáticamente como las de i3wm, la memoria muscular es lo que tiene.

Después de trastearlo un poco la configuración me ha quedado como muestro en la imagen:

captura-awesome-1.png

En el punto 1, en el centro de la imagen, se puede ver el menú de acceso a las aplicaciones. Es el menú de escritorio que puedes ver en otros entornos como XFce o Gnome o Plasma.

En el 2 marco los escritorios, bueno, en realidad sus etiquetas, porque se pueden mover independientemente de la combinación de teclas. A ver si lo explico mejor: si utilizo la combinación de teclas para intercambiar las etiquetas-escritorios, digamos por ejemplo 2 y 3, dejando las etiquetas tal que «1 3 2 4...» tendré que acceder al escritorio con la etiqueta «3» con la combinación «mod-2». En algunos de los themes se utilizan iconos o textos, pero yo he seguido con la inercia de i3wm de nombrarlos por números.

Además, en su propia página web hablan no de desktops sino de tags por screen, con lo que parece que el soporte multipantalla es bastante aceptable, --no lo puedo afirmar con conocimiento de causa, porque no lo he probado en modo XRandR--, pero al menos eso parece.

En algunos themes he visto que configuran varias barras, algunas con aspecto de dockers, laterales, que desaparecen cuando el cursor se aleja. En fin, muchas posibilidades que lo hacen muy flexible.

En el 3, marco un pichorro que me indica el tipo de configuración del escritorio. En i3wm las ventanas se distribuían básicamente de tres manera y mantiene estable el tamaño una vez distribuidas. Esto es muy similar a cómo funciona, casi siempre, el asunto en awesome, sin embargo, hay algunos modos como el magnifier que centra en pantalla la ventana que tenga el foco y distribuye en el fondo el resto de ventanas abiertas. Además, como se puede ver en la captura, se puede poner un pichorro para que nos lo diga. Aparte de eso, cada ventana se puede colocar como «flotante», «maximizada» u otras opciones que ahora veremos. Los iconos también dependen del theme así que puedes ajustarlos a tu gusto.

Con el 4 marco la barra de información. Como se puede apreciar es bastante más sencillo que mi barra de bumblebee-status. Sin embargo, resulta que eso también aligera la carga de memoria, porque no necesito una herramienta externa que dibuje dicha barra. A esto le achaco que awesomewm sea ligeramente más ligero en memoria (unos 16Kb, comprobados con free), que i3wm.

Las partes que añadido al código han sido mínimas. Por ejemplo, como ya dije, estoy tan acostumbrado a utilizar los menús de rofi, que me lo he metido también en este entorno, con las mismas combinaciones de teclas:

-- rofi
awful.key({ modkey }, "d", function ()
     os.execute(string.format("rofi -modi %s -show %s", 'run', 'run'))
		      end,
     {description = "menu rofi", group = "launcher"}),
awful.key({ modkey }, "i", function ()
     os.execute(string.format("rofi -modi %s -show %s -show-icons", 'run', 'drun'))
		      end,
     {description = "show rofi", group = "launcher"}),
awful.key({ modkey }, "Tab", function ()
     os.execute(string.format("rofi -show %s -show-icons", 'window'))
		      end,
     {description = "show windows", group = "launcher"}),

He cambiado algunas cosas más: por ejemplo, todo parecía configurado para utilizar vim y lo he cambiado a emacs y algunas otras manías, como cambiar el formato de fecha al estilo ISO año-mes-día, añadir etiquetas hasta el «0» en lugar de hasta el «5» que venían por defecto.

Características

En mi caso, acostumbrado ya a i3wm el funcionamiento de awesome no me ha sorprendido. Resulta un entorno tipo mosaico bastante flexible y parecido al que estoy acostumbrado, exceptuando que, en ocasiones, el modo de distribución del escritorio me sorprende situando una ventana donde no espero. En i3wm cuando abres una ventana nueva, por defecto divide la pantalla en horizontal y la sitúa a la derecha de la actual. Sin embargo, aquí depende de qué modo tengamos activado y la puede poner horizontal abajo, horizontal arriba, vertical a la izquierda, centrada en la pantalla, etc.

De las características generales y de diseño de software no puedo hablar mucho, aparte de lo ya dicho sobre el lenguaje lua. Quizá, lo más destacable que he encontrado por su página web es el tema de que está basado en la librería asíncrona XCB en lugar de la síncrona Xlib.

Desde el punto de vista del usuario, muchas de las características son definidas por el mismo theme, pero aún así las voy a destacar en el artículo, porque me parecen interesantes.

captura-awesome-ayuda.png

Una que estoy aún empleando más de lo que debiera en la que muestro en la pantalla. La combinación mod-s me muestra una ventana modal con las combinaciones de tecla definidas en el entorno y alguna información extra, como teclas de funciones para tmux.

Todo lo demás es muy similar, --incluso en cuanto a atajos--, a lo que viene siendo i3wm.

Las ventanas, además, tienen una definición que también depende del theme. Por ejemplo, el modo en el que está configurando el título de las ventanas es el siguiente:

-- Add a titlebar if titlebars_enabled is set to true in the rules.
client.connect_signal("request::titlebars", function(c)
    -- Custom
    if beautiful.titlebar_fun then
	beautiful.titlebar_fun(c)
	return
    end

    -- Default
    -- buttons for the titlebar
    local buttons = my_table.join(
	awful.button({ }, 1, function()
	    c:emit_signal("request::activate", "titlebar", {raise = true})
	    awful.mouse.client.move(c)
	end),
	awful.button({ }, 2, function() c:kill() end),
	awful.button({ }, 3, function()
	    c:emit_signal("request::activate", "titlebar", {raise = true})
	    awful.mouse.client.resize(c)
	end)
    )

    awful.titlebar(c, {size = dpi(16)}) : setup {
	{ -- Left
	    awful.titlebar.widget.iconwidget(c),
	    buttons = buttons,
	    layout  = wibox.layout.fixed.horizontal
	},
	{ -- Middle
	    { -- Title
		align  = "center",
		widget = awful.titlebar.widget.titlewidget(c)
	    },
	    buttons = buttons,
	    layout  = wibox.layout.flex.horizontal
	},
	{ -- Right
	    awful.titlebar.widget.floatingbutton (c),
	    awful.titlebar.widget.maximizedbutton(c),
	    awful.titlebar.widget.stickybutton   (c),
	    awful.titlebar.widget.ontopbutton    (c),
	    awful.titlebar.widget.closebutton    (c),
	    layout = wibox.layout.fixed.horizontal()
	},
	layout = wibox.layout.align.horizontal
    }
end)

Podemos analizar el resultado del código en la siguiente imagen:

captura-awesome-ventana.png

La captura de pantalla se ha realizado con el modo magnifier que hace flotar la ventana activa al centro de la pantalla mientras el resto de las ventanas abiertas forman un mosaico tras ella.

Los nombres de los botones creo que son suficientemente descriptivos:

  • floatingbutton hace que si está activado, la ventana se comporte de modo flotante independientemente del modo en que esté configurado el escritorio.
  • maximizedbutton hace que una ventana esté maximizada independientemente del modo configurado.
  • stickybuttom hace que cuando esté activado, la ventana se muestre en todos los escritorios, haciéndola omnipresente.
  • ontopbutton hace que la ventana marcada permanezca encima del resto de las ventanas.
  • closebutton cierra la ventana.

Además, podemos observar que en la barra de estado, entre las etiquetas de los escritorios y la información que hemos configurado, aparecen dos botones o chismáticos con el título de las ventanas activas. Funcionan también como un atajo para activar la ventana correspondiente si utilizamos el ratón, o si utilizamos el teclado, también nos indica cuál está activa --por si no quedara claro con su posición y/o colores en la pantalla--.

Conclusión

La verdad es que lo instalé y lo probé sin muchas expectativas. Estoy contento con i3wm y su rendimiento, pero en estos pocos días que lo llevo utilizando el awesomewm me ha sorprendido gratamente. De momento lo seguiré utilizando unos días, dándole una oportunidad. En realidad, es más complejo de configurar que i3wm porque hay que dominar lua. Sin embargo, el mismo hecho le da potencia y flexibilidad. Literalmente en un fichero rc.lua puedes hacer realmente lo que quieras1.

Si alguien tiene alguna duda y quiere preguntar de manera específica: están abiertos los comentarios. Quizá mi brevedad en la entrada deje en el aire más dudas que certidumbres.

Nota al pie de página:

1

Lo que me recuerda por temas de seguridad, no deberías confiar en ninguna configuración que no hayas escrito tú mismo, o por lo menos revisado de forma concienzuda.


Comentarios