Notxor tiene un blog

Defenestrando la vida


Configuración de awesomewm y conky

Normalmente me gusta escribir los artículos y tenerlos un tiempo en cuarentena, releerlos y corregirlos, antes de publicarlos. Hoy voy a hacer una excepción y este artículo está escrito el mismo día de su publicación y con una relectura básica que puede hacer pensar al lector que se me ha olvidado toda regla básica de la gramática. Me lo han pedido hoy y hoy voy a complacer la demanda, también por experimentar un poco el modo «blog-kamicace».

Pido disculpas anticipadas si algo no se entiende correctamente o encuentran alguna falta gramatical (o de «horrografía»).

Configuración de awesomewm y conky

Llevo ya un tiempo utilizando awesomewm como mi gestor de ventanas. Aquí, en este mismo blog ya hablé de ello hace un par de meses. Ayer en Mastodon salió la conversación de escritorios y el amigo Victorhck pidió una captura de pantalla de mi escritorio. Subí a esa red social una captura de mi escritorio para la etiqueta #unixporn, --que es una forma de agrupar nuestras capturas de pantalla en esa red--. La pongo aquí también para no obligar a quien lea esto a buscarla por una red que lo mismo no utiliza.

captura-awesome.png

En cuanto a Conky

En el hilo de Mastodon me piden el código del Conky que se aprecia a la derecha con un resumen de toda la información de la máquina. El conky no aparecía en capturas anteriores, quizá porque lo rescaté después de no utilizarlo durante el tiempo que usaba i3wm, porque acababa siempre sepultado por las ventanas. En la captura que muestro de mi escritorio podéis ver que eso en awesomewm no tiene por qué ser así. De hecho, tengo reservado (mentalmente), el segundo escritorio para la consola y no quiero que ocupe toda la pantalla. Cuando compilo o lanzo un proceso, puedo tener de un vistazo lo que estoy haciendo y cómo reacciona la máquina: consumo de CPU, consumo de RAM, de disco, etc. Por no liarme con más explicaciones pongo el código de conky aquí por si a alguien le puede servir: básicamente también lo copié de algún sitio y lo modifiqué a mi gusto.

-- conky configuration

conky.config = {
   background = false,
   use_xft = true,
   font = 'Fira Code:size=9',
   font1 = 'Fira Code:size=20',
   font2 = 'Fira Code:size=15',
   xftalpha = 0.8,
   update_interval = 2.0,
   total_run_times = 0,
   own_window = false,
   own_window_hints = "below",
   double_buffer = true,
   draw_shades = false,
   draw_outline = false,
   draw_borders = false,
   stippled_borders = 0,
   border_margin = 4,
   border_width = 1,
   default_color = 'white',
   default_shade_color = 'brown',
   default_outline_color = 'white',
   alignment = 'top_right',
   top_cpu_separate = true,
   gap_x = 10,
   gap_y = 10,
   no_buffers = true,
   uppercase = false,
   cpu_avg_samples = 2,
   net_avg_samples = 2,
   override_utf8_locale = true,
   use_spacer = 'none',
}

conky.text = [[
$hr
${alignc}${color #FF9922}${font1}${time %e}
${alignc}${color white}${font}${time %B} ${color #AA9922}${time %Y}
${alignc}${color yellow}${font}${time %a}
${color yellow}${time %Z: }${alignc}${color #AA9922}${font2}${time %H:%M}${font}
${color white}$hr
${color yellow}UpTime: ${color #AA9922}$uptime

${color yellow}CPU:${color #AA9922} $cpu% ${alignr} ${exec sensors | grep "Core 0" | cut -c15-22}
${cpugraph 20,400 FFFFFF AA9922}
${color yellow}Load: ${color #AA9922}$loadavg
${color yellow}Procesos: ${color #AA9922}$processes
${color yellow}Running: ${color #AA9922}$running_processes
${color white}Cores:
${color white}Core 1: ${color #AA9922}${cpubar cpu1 6,220}${color white} ${freq 1} MHz ${cpu cpu1}%
${color white}Core 2: ${color #AA9922}${cpubar cpu2 6,220}${color white} ${freq 2} MHz ${cpu cpu2}%
${color white}Core 3: ${color #AA9922}${cpubar cpu3 6,220}${color white} ${freq 3} MHz ${cpu cpu3}%
${color white}Core 4: ${color #AA9922}${cpubar cpu4 6,220}${color white} ${freq 4} MHz ${cpu cpu4}%

${color white}$hr
${color yellow}Uso CPU:
${color #AA9922}Nombre                           PID   CPU%   MEM%
${color white}${top name 1}               ${top pid 1} ${top cpu 1} ${top mem 1}
${color white}${top name 2}               ${top pid 2} ${top cpu 2} ${top mem 2}
${color white}${top name 3}               ${top pid 3} ${top cpu 3} ${top mem 3}
${color white}${top name 4}               ${top pid 4} ${top cpu 4} ${top mem 4}

${color yellow}Uso MEM:
${color #AA9922}Nombre                          MEM%
${color white}${top_mem name 1}              ${top_mem mem 1}
${color white}${top_mem name 2}              ${top_mem mem 2}
${color white}${top_mem name 3}              ${top_mem mem 3}
${color white}${top_mem name 4}              ${top_mem mem 4}

${color white}$hr
${color white}MEM: ${color #AA9922}$memperc% ${alignr}$mem/$memmax
${memgraph 20,400 FFFFFF AA9922}
${color white}SWAP: ${color #AA9922}$swapperc% ${alignr}$swap/$swapmax
${swapbar 6,400}
${if_running cmus}
${color white}$hr
${color white}${cmus_artist}: ${color yellow}${cmus_album}
${color white}${cmus_track}-${color yellow}${cmus_title}
${color #AA9922}${cmus_timeleft} ${cmus_progress 10,300} ${endif}
${if_running mocp}
${color white}$hr
${color white}${moc_state}
${color white}${moc_artist}: ${color yellow}${moc_album}
${color white}${moc_curtime}-${color yellow}${moc_song}
${color #AA9922}${moc_timeleft}-${moc_totaltime} ${endif}
${color white}$hr
${color white}ROOT: ${color #AA9922}${fs_free_perc /}% ${alignr}${color #AA9922}${fs_free /}/${fs_size /}
${fs_bar 6,400 /}
${color white}HOME: ${color #AA9922}${fs_free_perc /home}% ${alignr}${color #AA9922}${fs_free /home}/${fs_size /home}
${fs_bar 6,400 /home}
${color white}$hr
${if_existing /sys/class/net/wlp8s0b1/operstate up}
${color yellow}WIFI: ${color white}${wireless_essid wlp8s0b1}${color #AA9922}${alignr}${addr wlp8s0b1}
${color white}Bajada: ${alignr}${color #AA9922}${downspeed wlp8s0b1}
${downspeedgraph wlp8s0b1 20,400 FFFFFF AA9922}
${color white}Subida: ${alignr}${color #AA9922}${upspeed wlp8s0b1}
${upspeedgraph wlp8s0b1 20,400 FFFFFF AA9922}
${endif}
${if_existing /sys/class/net/eth0/operstate up}
${color yellow}NET:${alignr}${color #AA9922}${addr eth0}
${color white}Bajada: ${alignr}${color #AA9922}${downspeed eth0}${color}
${downspeedgraph eth0 20,400 FFFFFF AA9922}
${color white}Subida: ${alignr}${color #AA9922}${upspeed eth0}
${upspeedgraph eth0 20,400 FFFFFF AA9922}
${endif}
${if_existing /sys/class/net/enp9s0u1/operstate up}
${color yellow}USB:${alignr}${color #AA9922}${addr enp9s0u1}
${color white}Bajada: ${alignr}${color #AA9922}${downspeed enp9s0u1}${color}
${downspeedgraph enp9s0u1 20,400 FFFFFF AA9922}
${color white}Subida: ${alignr}${color #AA9922}${upspeed enp9s0u1}
${upspeedgraph enp9s0u1 20,400 FFFFFF AA9922}
${endif}
]]

Algunas cosas, evidentemente, deben cambiarse para ajustarse a otra máquina. Por ejemplo, los nombres de las conexiones físicas de red. También es posible que se pueda obtener alguna información de forma más directa, como en la temperatura del procesador, que no encontré modo de conseguirlo de sensors y lo que hice fue un apaño tal que:

exec sensors | grep "Core 0" | cut -c15-22

Quería la información de la temperatura de la CPU, pero como soy torpe no encontré ningún sitio de donde extraer el dato de forma directa. Así que lo que hice fue tirar de sensors y de allí obtener la información de uno de los cores con grep, cortando la cadena obtenida con cut para que me muestre sólo la temperatura.

El otro cambio a subrayar es que cuando copié de algún sitio esa configuración, quien la hiciera, utilizaba como reproductor de música moc. A mí me gusta más, y lo utilizo frecuentemente, cmus así que escribí un poco de código para añadir soporte para él.

Otro de los cambios que hice sobre el original que copié es el uso de bastantes condicionales para mostrar la información. Por ejemplo, en la información de uso de la red, dependiendo de qué dispositivo esté activo. O en el caso del reproductor de música, de qué reproductor de música (cmus o moc) tenga activo.

Soporte multimonitor

Normalmente trabajo en un portátil y no lo enchufo a ningún otro monitor. Sin embargo, de vez en cuando doy alguna charla y lo tengo que enchufar a algún proyector. No suele haber problema cuando me llevo el mío propio, pues me tengo hecho ya un script que me lo ajusta nada más enchufarlo:

#!/bin/sh
xrandr --output LVDS-1 --primary --mode 1920x1080 --pos 0x0 --rotate normal --output HDMI-1 --mode 1600x1200 --pos 1920x0 --rotate normal --output VGA-1 --off 
# proyector.sh

Después de conectarlo y encenderlo, desde una consola llamo a proyector.sh y ya está listo para trabajar, con la pantalla del ordenador a la izquierda y la del proyector a la derecha.

La cosa es algo más complicada cuando tengo que utilizar un proyector que no es el mío. En ese caso, depende de qué salida conectes HDMI, VGA, de la resolución del aparato y de otras variables que complican el tenerlo todo preparado en un script sencillo, como el anterior. Para lidiar con esos problemas utilizo un programita que se llama arandr (acrónimo de Another XrandR GUI) que me facilita hacer la configuración de un modo más visual para después aplicarla o incluso guardarla en un directorio ~/.screenlayouts desde donde llamarla (de ahí llamo a los más habituales para mí, incluyendo el anterior).

Cuando he activado el modo multipantalla en awesomewm he visto que cada pantalla es independiente de las demás. Cada una de ellas conserva todos los escritorios que tengas definidos. En i3wm recuerdo que asignaba el 1 a la pantalla principal y el 2 a la secundaria y luego el resto los va abriendo según qué pantalla tenga el foco cuando lo crees. Esto acelera el modo en que puedes acceder a un escritorio concreto, pues no se repiten. awesomewm, sin embargo, lo que hace es seguir el puntero del ratón para establecer el foco de qué pantalla responderá a tus comandos.

Básicamente, y por resumir, el cambio que he hecho desde que presenté mis inicios con awesomewm sobre este aspecto, es una combinación de teclas que activa mi proyector, sin necesidad de recurrir a llamarlo desde la línea de comandos.

Manejo de ventanas

Cuando presenté hace un par de meses mis primeros acercamientos a awesomewm las ventanas tenían un icono de aplicación, un título y una ristra de botones para manejarlas, pero he prescindido de ello. A cambio, el icono de aplicación lo muestro en la barra de estado (la llaman wibox en awesome). Al desaparecer los botones de manejo, las ventanas sólo cuentan con las opciones por teclado. En mi caso he configurado las siguientes teclas:

Tecla Función
Meta+Mayús.+q Cerrar la ventana
Alt+Mayús.+m Magnify mode1
Meta+f Pantalla completa
Meta+Control+espacio cambiar el modo de la ventana flotante
Meta+t mantener la ventana siempre visible (on top)
Meta+m maximizar la ventana
Meta+n minimizar la ventana

Esos son los atajos que más utilizo cuando trabajo y los más necesarios. Hay definidos algunos más (para mover ventanas entre pantallas, por ejemplo) que no menciono ahí.

Para hacer desaparecer los títulos de las ventanas, sólo tuve que encontrar una línea que decía:

properties = { titlebars_enabled = true }

y ponerla a:

properties = { titlebars_enabled = false }

Otros cambios

Se han producido algunos otros cambios, básicamente en lo que awesomewm llaman wibox que es la barra de estado de toda la vida. Empezando de izquierda a derecha los voy a ir enumerando.

Iconos de escritorio

En lugar de mantener las etiquetas numéricas lo cambié por unos iconos muy molones símbolos para distinguirlos. En i3wm el nombre numérico se corresponde con la combinación que accede a cada escritorio, sin embargo en awesomewm el nombre es sólo una etiqueta y se accede según la posición en la que esté colocado. Por eso, se me hacía confuso algunas veces que, sin darme cuenta, había cambiado las posiciones, tenía que acceder al escritorio llamado «2» con la combinación Meta+3, por ejemplo. Puesto, que solo son nombres, o etiquetas, decidí marcarlas con algún icono más significativo y repartir funciones entre ellas, adecuando también el layout de distribución de las ventanas un poco.

Los iconos en realidad son caracteres que se pueden encontrar en https://fontawesome.com/cheatsheet Para activarlos sólo tuve que modificar los tagnames en el fichero theme.lua.

-- http://fontawesome.io/cheatsheet
awful.util.tagnames = { "", "", "", "", "", "", "", "", "" }

Simplemente son etiquetas de un carácter. Lo que hice fue buscar entre los infinitos códigos que muestra la página los que me podrían servir y hacer un «corta-pega» del carácter en la correspondiente cadena de texto. Así, ya sé que es un nombre y para acceder a él tengo que utilizar el número de escritorio según el orden.

Necesita más detalle el significado de la etiqueta. Para explicarlo rápidamente, los tres modos que más utilizo son los tres primeros. En el primero abro las aplicaciones de comunicación en un layout maximizado: Gajim, Telegram desktop y hexchat. En el segundo suelo abrir la consola, normalmente abro una sesión de tmux, cargo el reproductor de música cmus cuando quiero concentrarme en algo y así tengo la posibilidad de ir abriendo consolas según necesito. Aquí es donde suelo compilar o hacer alguna otra acción que necesita seguimiento de qué hace la máquina (por ejemplo, lanzar servidores web para pruebas y cosas como esas) y por eso el layout de esta etiqueta es «flotante» permitiéndome ver el conky de fondo. En el tercer escritorio suelo lanzar los navegadores: de forma habitual es firefox, por eso elegí ese icono, pero hago pruebas de visualización con otros.

Los demás escritorios tienen etiquetas que, en principio, no se relacionan demasiado con lo que suelo hacer en ellos, aunque emacs suelo abrirlo en el cuarto y audacity en el séptimo; es posible que mueva las aplicaciones de uno a otro para cosas tan básicas como consultar algo en el navegador mientras escribo en el editor, etc.

Indicador de Layout

En el tema original el indicador de layout estaba situado a la derecha del todo y decidí cambiarlo a una zona más visible, cambiándole también el color de fondo y poniéndole un marco angulado más por razones estéticas que prácticas. Pero el resultado se puede ver a simple vista y no entraré en más detalles. Por dejarlo más claro, en el apartado de código que utiliza el theme para crear el wibox dejé el código de la siguiente manera:

{ -- Left widgets
    layout = wibox.layout.fixed.horizontal,
    s.mytaglist,
    arrl_rd,     -- ángulo a la derecha color oscuro
    wibox.container.background(s.mylayoutbox, theme.bg_focus),  -- mostrar el icono del layout
    arrl_dr,     -- ángulo a la derecha color claro
    s.mypromptbox,
    spr,
},

Dejar el icono de las aplicaciones en el taglist

En el tema que utilicé para ajustar y personalizar el mío, sólo se utilizaban los títulos o nombres de las tareas para mostrarlo en el taglist. Aprovechando que existe el taglist puedes utilizarlo como botones para cambiar de una aplicación a otra dentro de un mismo escritorio, aunque en mi caso particular ya venía utilizando rofi en modo window para hacer esos saltos. También me he acostumbrado ya a las combinaciones de awesomewm:

Combinación Acción
Alt+h focus left
Alt+j focus down
Alt+k focus up
Alt+l focus right
   

El caso es que añadí los iconos de las aplicaciones simplemente poniendo a true la variable theme.tasklist_disable_icon

Conclusión

De momento, mi manera de trabajar se ha visto facilitada por awesomewm y mi adaptación ha sido rápida. He de reconocer que ya venía adaptado a los gestores de ventana de tipo mosaico gracias a otro magnífico gestor como es i3wm. ¿Por qué me he cambiado? Podría enumerar varias razones como las estéticas; sin embargo, sobre todas las cosas está la manera de mantener el foco en la ventana activa.

Cuando abres una aplicación en sus modos de mosaico siempre utiliza, al menos, media pantalla apilando el resto de ventanas en pequeño, pero dándole a la última la preponderancia de espacio necesario. Puedes moverte por las aplicaciones con las teclas que he descrito en el punto anterior o cambiar la posición de las mismas añadiendo la tecla de mayúsculas a la combinación. Además, está el modo magnify en el que puedes traer a primer plano la aplicación que quieras con la combinación Alt+Mayús.+m y devolverla a su sitio con la misma. De todas formas, lo mejor para esa forma de trabajar es utilizar el layout magnify, pues al cambiar de aplicación con Alt+j, por ejemplo, cambia qué ventana pasa a primer plano y mantiene en mosaico el resto en el fondo.

Ademñas, los modos de mosaico son variados y las ventanas se ajustan automáticamente al layout seleccionado, por lo que es fácil cambiar la distribución de ventanas con Meta+espacio para ir según el orden de layouts y Meta+Mayús.+espacio para hacerlo al contrario.

Y por todo eso, terminé cambiándome a awesomewm. Pero como cada uno somos un mundo y tenemos nuestras manías, no recomiendo especialmente un gestor de ventanas u otro. Entiendo que haya gente que se ponga de los nervios si las ventanas no tienen un título, o una «x» para cerrarlas, o no soportan las fechas en formato ISO, o no quieran gastar ni un ciclo de CPU para mostrar la información en pantalla con conky. Pero para eso utilizamos GNU/Linux, para adaptarlo a nosotros y no tener que adaptarnos nosotros a lo que alguien decide que es la forma correcta de trabajar.

Hasta aquí, mi repaso rápido a awesomewm y conky

Nota al pie de página:

1

El Magnify mode es un modo en que la ventana se presenta centrada en la pantalla en primer plano, distribuyendo el resto según el modo que tenga activado ese escritorio.


Comentarios

Debido a algunos ataques mailintencionados a través de la herramienta de comentarios, se ha decidido activar un filtro antispam y guardar las direcciones IP con el único objeto de añadir a la lista de bloqueos las que correspondan a spam y otras actividades maliciosas.

Disculpen las molestias.