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.
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
Footnotes:
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