Mi primer post

Este es el primer post y espero que no el último de mi web. Intentaré asiduamente ir actualizandolo y añadiendo posts de diferentes temáticas interesantes como pueden ser WriteUps de HackTheBox, materia GNU/Linux, Write-Ups de TryHackMe, soluciones a CTF’s…

En este primer post expondré la configuración que utilizo en mi portátil para el día a día. Tengo un arranque dual con Grub2, y a parte del W10, el sistema operativo que suelo utilizar es Debian GNU/Linux en versión “testing”. La gran ventaja de este SO, que puede ser a la vez una desventaja, es lo estable que es, haciendo que la últimas versiones de las aplicaciones tarden en pasar por todas las fases hasta llegar a los usuarios. Por esto, utilizo la versión “testing” y no la versión “stable”. Aunque se llame “testing”, sigue siendo muy estable y por ahora, no me ha crasheado nunca.


Mi Window Manager

El window manager que utilizo es i3wm, el cual es un gestor de ventanas estilo “tiling” que nos permite ordenar todas las ventanas de forma sencilla. Este tipo de gestores es un poco complicado empezar a utilizarlos debido a la infinidad de shortcuts (atajos de teclado) que tiene, pero cuando te acostumbras, eres capaz de trabajar mucho más enfocado y sin depender tanto del ratón, ademas de poder personalizarlo a tu gusto sabiendo realmente lo que estás haciendo. Mi configuración completa está subida en un repositorio de mi GitHub.

i3wm

A continuación, se añaden los añadidos que he ido incluyendo en la configuración para adaptarlo a mis preferencias, etc…

bar {
position top
status_command i3blocks
}

#Add background
exec_always --no-startup-id feh --randomize --bg-scale ~/.config/i3/PATHWITHIMAGES/\*

#Brightness (Brillo)
bindsym $mod+F6 exec "xrandr --output eDP-1 --brightness 1"
bindsym $mod+F5 exec "xrandr --output eDP-1 --brightness 0.5"

#Volume Keyboard Bindings (Volumen)
bindsym $mod+F11 exec "amixer -q sset Master 1%-"
bindsym $mod+F12 exec "amixer -q sset Master 1%+"
bindsym \$mod+F10 exec "amixer -q sset Master 00%"

# Desktop screenshot

bindsym Print exec "gnome-screenshot"

# Selection screenshot

bindsym \$mod+Print exec "gnome-screenshot -i"

i3Blocks

Una de las ventajas de hacer uso de i3wm, es que es muy personalizable y podemos crearnos nuestros propios scripts. En este caso, en este apartado se verán los relacionados con la barra de status. Seguramente por la web podamos encontrar una gran variedad muy distinta de scripts muy útiles por lo que siempre es recomendable aprender de otros. Hay que recordar, que cada vez que creemos uno de estos scripts, además de intentar organizarlos de la mejor forma posible, debemos darle permisos de ejecución.

Uno de los scripts que más utilizo es para cambiar la posición de los monitores, desactivarlos, etcétera. Para ello, normalmente se hace uso del programa XRandR, o su versión GUI, ARandR. La versión GUI nos permite muy sencillamente realizar estas acciones y nos deja exportar los script bash de los modelos que vayamos a utilizar más a menudo para no tener que estar siempre usándo la GUI y que podamos simplemente ejecutarlos para cambiar entre modelos. Por lo tanto, podemos añadir un botón en la barra de status en la que clicandolo, nos mostrará, de la carpeta indicada, los modelos que hemos exportado previamente y elegir uno de ellos para ejecutarlo. Esto nos permite tener modelos definidos para cambiar sencillamente entre pantallas dependiendo de si estás en casa, en el trabajo, etc…

#!/bin/sh

case $BLOCK_BUTTON in
	# Si clicamos con el botón izquierdo, lista la carpeta, guarda el seleccionado y ejecutalo
	1) screenmode=$(ls /home/USER/.folderOfModels | dmenu -i -p "Screen Mode?")
/home/USER/.folderOfModels/"\$screenmode";;
esac

Otro script que también suelo utilizar, es un pequeño script para deshabilitar/habilitar las conexiones Wi-Fi. Es un sencillo script que ahorra cierto tiempo si alternamos mucho entre conexiones por cable e inalámbricas.

#!/bin/sh

device=wlp2s0
status=$(cat /sys/class/net/${device}/operstate)

case $BLOCK_BUTTON in
	1)
		if [ "$status" = "down" ]]; then
nmcli radio wifi on
echo "📡ON📡"
else
nmcli radio wifi off
echo "📡OFF📡"
fi;;
esac

Por último, uno que me cree como recordatorio para recordar ciertas tareas es el siguiente. Simplemente te pediría la hora a la que recordartelo (ejem: 15:20, 08:30…), y en el momento en el que llegase ese tiempo indicado, saltará una notificación en la pantalla. Es un script muy simple para recordar las cosas del día.

#!/bin/sh

case $BLOCK_BUTTON in
	1)
	hora=$(echo "" | dmenu -i -p "Hora")
echo 'notify-send -u critical "🔔 NOTIFICACION 🔔" ""'|at "\$hora";;

esac

Todos estos scripts que desarrollemos o añadamos, además de darles permisos de ejecución, deben de estar reflejados en la configuración de la barra. A continuación, muestro como lo tengo yo añadido en mi conf de i3Blocks:

[screen]
full_text=🖥️
command=/home/USER/.scripts/i3BarScript/i3ScreenMode
interval=2

[notification]
full_text=🔔
interval=1
command=/home/USER/.scripts/i3BarScript/i3Notification
color=#FF0000

[wifi]
full_text=📡
command=/home/USER/.scripts/i3BarScript/i3Wifi

Por otra parte, tengo también configurado un script para lockear el ordenador un poco especial. Simplemente saca una captura a la pantalla y la difumina poniéndola como lock.

PICTURE=/tmp/i3lock.png
SCREENSHOT="scrot \$PICTURE"

BLUR="5x10"

# Screenshot

\$SCREENSHOT

# Blur

convert $PICTURE -blur $BLUR \$PICTURE

# Lock

i3lock -i \$PICTURE

# Remove image

rm \$PICTURE

Otras personalizaciones

Terminal

Utilizo ZSH debido a las facilidades y plugins que añade a una terminal normal de Bash. La zsh es muy personalizable y en mi caso hago uso del proyecto powerlevel10k para darle una apariencia más elegante.

Por otro lado, otra ventaja es la de poder añadir una infinidad de plugins a ZSH. Como por ejemplo, el de sudo con el que dando al botón ESC varías veces nos añadiría sudo al comando que fuesemos a ejecutar, o otros como, autosuggestions o syntax hightlighting. En el siguiente enlace se pueden observar una gran variedad de ellos (enlace).

Alias y funciones propias

Haciendo uso de una terminal de bash, o una de zsh, nos permite configurar funciones y alias a nuestra manera, editando el .bashrc o .zshrc. Por ejemplo, podemos definir que cada vez que deseemos borrar algo con el comando “rm” nos pregunte por cada fichero sí deseamos borrarlo. Para ello, rm tiene un parámetro -i que nos permite hacer eso, pero dado que somos muy vagos, podríamos editar en el fichero (.bashrc/.zshrc) e indicar lo siguiente:

alias rm='rm -i'

Por otra parte, si por ejemplo, tenemos una tarea repetitiva, como puede ser, preparar un entorno de trabajo organizado con sus carpetas, podemos desarrollarnos funciones para facilitarnos la vida. En el siguiente ejemplo, hemos declarado una función a nivel de .bashrc o .zshrc que nos crea una estructura de carpetas por cada proyecto que vayamos a dar comienzo:

function inicioProyecto(){
mkdir {Documentacion,Bibliografia,Presentacion,Codigo,Entregables};
}

Existen también proyectos para aumentar las funcionalidades de los comandos que utilizamos a diario, pudiéndolos añadirlos como alias para mejorar nuestra personalización. Los que yo suelo utilizar son la mejora de ls, llamada lsd, y la mejora de cat, llamada bat.


Otra información

En este post, se tocan muchos conceptos y es posible que si no estás un poco familiarizado con ellos pierdas el interés y no entiendas las cosas, pero te puedo asegurar que no son muy complejos y que con un poco de ganas son fáciles de comprender. Por eso, te recomiendo que por cada apartado que no comprendas busques en diversas fuentes, dado que en ocasiones y dependiendo la persona que lo explique, entendemos mejor unos artículos que otros.

Por otra parte, recomiendo el vídeo siguiente realizado por S4vitar, en el que transforma un sistema estándar, en uno personalizado, añadiéndole Bspwm (similar a i3wm), una polybar (similar a la barra status de i3) y otras cosas. Es un vídeo que en algunas partes está centrado a la seguridad, pero del que se puede aprender bastante.

Alberto Fernandez-de-Retana
Alberto Fernandez-de-Retana
PhD Student

Kaixo! PhD Student at University of Deusto under supervision of Igor Santos-Grueiro and Pablo G. Bringas. My research interests include web security & privacy. In my free time I love to be pizzaiolo.