commit c6bf0eb4778d47213bf155aee544b813a22332b6
parent ee3ec490bab150555f9797cef5bc0d553a28e9dc
Author: fjbalon <fjbalon@templier.es>
Date: Tue, 23 Jun 2026 23:35:36 +0200
Añadido artículo sobre suckless slock y gestión de scripts en /
Diffstat:
5 files changed, 449 insertions(+), 0 deletions(-)
diff --git a/diff-to-html.sh b/diff-to-html.sh
@@ -0,0 +1,53 @@
+#!/bin/bash
+# diff-to-html.sh
+# Uso: ./diff-to-html.sh archivo.diff
+
+if [ -z "$1" ]; then
+ echo "Uso: $0 <archivo.diff>"
+ exit 1
+fi
+
+if [ ! -f "$1" ]; then
+ echo "Error: El archivo '$1' no existe."
+ exit 1
+fi
+
+cat << 'EOF'
+<pre><code class="diff">
+EOF
+
+while IFS= read -r line || [ -n "$line" ]; do
+ # Convertir tabs a espacios (importante para indentación)
+ line="${line//$'\t'/ }"
+
+ # Escapar HTML
+ escaped="${line//&/&}"
+ escaped="${escaped//</<}"
+ escaped="${escaped//>/>}"
+
+ if [[ $line == From\ * ]] || \
+ [[ $line == Date:\ * ]] || \
+ [[ $line == Subject:\ * ]] || \
+ [[ $line == diff\ --git* ]] || \
+ [[ $line == index\ * ]] || \
+ [[ $line == ---\ * ]] || \
+ [[ $line == +++\ * ]]; then
+ echo "<span class=\"info\">$escaped</span>"
+
+ elif [[ $line == @@* ]]; then
+ echo "<span class=\"hunk\">$escaped</span>"
+
+ elif [[ $line == +* ]]; then
+ echo "<span class=\"add\">$escaped</span>"
+
+ elif [[ $line == -* ]]; then
+ echo "<span class=\"del\">$escaped</span>"
+
+ else
+ echo "$escaped"
+ fi
+done < "$1"
+
+cat << 'EOF'
+</code></pre>
+EOF
+\ No newline at end of file
diff --git a/automate.sh b/dirs-to-index.sh
diff --git a/index.html b/index.html
@@ -19,6 +19,11 @@
<hr/>
<section class="blog">
+<a href="./slock/" class="article">
+ <p class="title">Customización propia de slock</p>
+ <p class="info">22 de junio de 2026 · fjbalon</p><p>Un software que me gusta bastante de la caja de herramientas de suckless es slock, un bloqueador de pantalla minimalista. Una vez ejecutado, bloquea la sesión y solo se desbloquea al introducir la co...</p>
+</a>
+
<a href="./ext4-wsl2/" class="article">
<p class="title">Montaje de sistema de archivos ext4 a través de WSL2</p>
<p class="info">5 de junio de 2026 · fjbalon</p><p>En un artículo algo extraño para lo que suelo escribir, enfocado en el sistema de Microsoft Windows. Tranquilícese el lector, incluso encuadrando el artículo a través del sistema operativo ajeno ...</p>
diff --git a/slock/index.html b/slock/index.html
@@ -0,0 +1,389 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1" />
+<title>Customización propia de slock</title>
+<link rel="icon" type="image/png" href="/favicon.png" />
+<link rel="stylesheet" type="text/css" href="../article.css" />
+</head>
+<body>
+<header>
+<p class="title">Customización propia de slock</p>
+<p class="date">22 de junio de 2026 • fjbalon</p>
+</header>
+<p>Un software que me gusta bastante de la caja de herramientas de suckless es slock, un bloqueador de pantalla minimalista. Una vez ejecutado, bloquea la sesión y solo se desbloquea al introducir la contraseña del usuario. No es un programa innovador ni de nicho: el concepto de bloqueador de pantalla existe prácticamente desde los inicios de X11.</p>
+<p>En términos generales, slock crea una ventana fullscreen que cubre todos los monitores, toma el teclado y el ratón (<emb>XGrabKeyboard</emb> + <emb>XGrabPointer</emb>) y entra en bucle donde lee la entrada del teclado. Compara la contraseña introducida (usando <emb>crypt()</emb> o <emb>PAM/shadow</emb>) contra la del usuario. Si coincide, suelta el grab y cierra la ventana.</p>
+<p>Por su funcionamiento, radicalmente mínimo y unido al sistema operativo, podemos verlo como un sistema muy seguro. Eso sí, cuenta con las limitaciones propias de todos los bloqueadores de pantalla de X11, como que el usuario puede cambiar a otra tty, otro usuario o sesión podría matar X y cosas así. No son errores, ni si quiera problemas de seguridad, pues la sesión se mantendría protegida aun matándola o cambiando de tty; pero son limitaciones que el usuario debe conocer, desde luego.</p>
+<p>La estética inicial es tan sobria como un par de colores que indican si el usuario ha empezado a escribir la contraseña (azul), si ha fallado al introducirla (rojo) o si ha accedido (no hay color, entra en la sesión con normalidad). Si bien esta forma visual es extremadamente vaga, para mi gusto.</p>
+<p>Por lo tanto, lo que más estético me ha parecido es aplicar el llamado parche <i>Blured or pixelated screenshot</i>:</p>
+<style>
+ .diff .add {color:#00ff9d;}
+ .diff .del {color:#ff5f5f;}
+ .diff .header {color:#569cd6;}
+ .diff .hunk {color:#d7ba7d;}
+ .diff .info {color:#848484;}
+</style>
+
+<pre><code class="diff">
+<span class="info">From 36a4863f9a399740aaf8b1e01926485c0a055e1c Mon Sep 17 00:00:00 2001</span>
+From: Lars Niesen <iah71niesen@gso-koeln.de>
+<span class="info">Date: Wed, 29 Apr 2020 13:52:42 +0200</span>
+<span class="info">Subject: [PATCH 1/8] Added Bg patch and screenshot capabilities</span>
+
+<span class="del">---</span>
+ config.mk | 2 +-
+ slock.c | 35 +++++++++++++++++++++++++++++++----
+ 2 files changed, 32 insertions(+), 5 deletions(-)
+
+<span class="info">diff --git a/config.mk b/config.mk</span>
+<span class="info">index 74429ae..987819e 100644</span>
+<span class="info">--- a/config.mk</span>
+<span class="info">+++ b/config.mk</span>
+<span class="hunk">@@ -12,7 +12,7 @@ X11LIB = /usr/X11R6/lib</span>
+
+ # includes and libs
+ INCS = -I. -I/usr/include -I${X11INC}
+<span class="del">-LIBS = -L/usr/lib -lc -lcrypt -L${X11LIB} -lX11 -lXext -lXrandr</span>
+<span class="add">+LIBS = -L/usr/lib -lc -lcrypt -L${X11LIB} -lX11 -lXext -lXrandr -lImlib2</span>
+
+ # flags
+ CPPFLAGS = -DVERSION=\"${VERSION}\" -D_DEFAULT_SOURCE -DHAVE_SHADOW_H
+<span class="info">diff --git a/slock.c b/slock.c</span>
+<span class="info">index 5ae738c..7c63f34 100644</span>
+<span class="info">--- a/slock.c</span>
+<span class="info">+++ b/slock.c</span>
+<span class="hunk">@@ -18,6 +18,7 @@</span>
+ #include <X11/keysym.h>
+ #include <X11/Xlib.h>
+ #include <X11/Xutil.h>
+<span class="add">+#include <Imlib2.h></span>
+
+ #include "arg.h"
+ #include "util.h"
+<span class="hunk">@@ -35,6 +36,7 @@ struct lock {</span>
+ int screen;
+ Window root, win;
+ Pixmap pmap;
+<span class="add">+ Pixmap bgmap;</span>
+ unsigned long colors[NUMCOLS];
+ };
+
+<span class="hunk">@@ -46,6 +48,8 @@ struct xrandr {</span>
+
+ #include "config.h"
+
+<span class="add">+Imlib_Image image;</span>
+<span class="add">+</span>
+ static void
+ die(const char *errstr, ...)
+ {
+<span class="hunk">@@ -190,9 +194,10 @@ readpw(Display *dpy, struct xrandr *rr, struct lock **locks, int nscreens,</span>
+ color = len ? INPUT : ((failure || failonclear) ? FAILED : INIT);
+ if (running && oldc != color) {
+ for (screen = 0; screen < nscreens; screen++) {
+<span class="del">- XSetWindowBackground(dpy,</span>
+<span class="del">- locks[screen]->win,</span>
+<span class="del">- locks[screen]->colors[color]);</span>
+<span class="add">+ if(locks[screen]->bgmap)</span>
+<span class="add">+ XSetWindowBackgroundPixmap(dpy, locks[screen]->win, locks[screen]->bgmap);</span>
+<span class="add">+ else</span>
+<span class="add">+ XSetWindowBackground(dpy, locks[screen]->win, locks[screen]->colors[0]);</span>
+ XClearWindow(dpy, locks[screen]->win);
+ }
+ oldc = color;
+<span class="hunk">@@ -235,6 +240,17 @@ lockscreen(Display *dpy, struct xrandr *rr, int screen)</span>
+ lock->screen = screen;
+ lock->root = RootWindow(dpy, lock->screen);
+
+<span class="add">+ if(image) </span>
+<span class="add">+ {</span>
+<span class="add">+ lock->bgmap = XCreatePixmap(dpy, lock->root, DisplayWidth(dpy, lock->screen), DisplayHeight(dpy, lock->screen), DefaultDepth(dpy, lock->screen));</span>
+<span class="add">+ imlib_context_set_image(image);</span>
+<span class="add">+ imlib_context_set_display(dpy);</span>
+<span class="add">+ imlib_context_set_visual(DefaultVisual(dpy, lock->screen));</span>
+<span class="add">+ imlib_context_set_colormap(DefaultColormap(dpy, lock->screen));</span>
+<span class="add">+ imlib_context_set_drawable(lock->bgmap);</span>
+<span class="add">+ imlib_render_image_on_drawable(0, 0);</span>
+<span class="add">+ imlib_free_image();</span>
+<span class="add">+ }</span>
+ for (i = 0; i < NUMCOLS; i++) {
+ XAllocNamedColor(dpy, DefaultColormap(dpy, lock->screen),
+ colorname[i], &color, &dummy);
+<span class="hunk">@@ -251,6 +267,8 @@ lockscreen(Display *dpy, struct xrandr *rr, int screen)</span>
+ CopyFromParent,
+ DefaultVisual(dpy, lock->screen),
+ CWOverrideRedirect | CWBackPixel, &wa);
+<span class="add">+ if(lock->bgmap)</span>
+<span class="add">+ XSetWindowBackgroundPixmap(dpy, lock->win, lock->bgmap);</span>
+ lock->pmap = XCreateBitmapFromData(dpy, lock->win, curs, 8, 8);
+ invisible = XCreatePixmapCursor(dpy, lock->pmap, lock->pmap,
+ &color, &color, 0, 0);
+<span class="hunk">@@ -354,7 +372,16 @@ main(int argc, char **argv) {</span>
+ die("slock: setgid: %s\n", strerror(errno));
+ if (setuid(duid) < 0)
+ die("slock: setuid: %s\n", strerror(errno));
+<span class="del">-</span>
+<span class="add">+ </span>
+<span class="add">+ /*Create screenshot Image*/</span>
+<span class="add">+ Screen *scr = ScreenOfDisplay(dpy, DefaultScreen(dpy));</span>
+<span class="add">+ image = imlib_create_image(scr->width,scr->height);</span>
+<span class="add">+ imlib_context_set_image(image);</span>
+<span class="add">+ imlib_context_set_display(dpy);</span>
+<span class="add">+ imlib_context_set_visual(DefaultVisual(dpy,0));</span>
+<span class="add">+ imlib_context_set_drawable(RootWindow(dpy,XScreenNumberOfScreen(scr))); </span>
+<span class="add">+ imlib_copy_drawable_to_image(0,0,0,scr->width,scr->height,0,0,1);</span>
+<span class="add">+ </span>
+ /* check for Xrandr support */
+ rr.active = XRRQueryExtension(dpy, &rr.evbase, &rr.errbase);
+
+<span class="del">-- </span>
+2.27.0
+
+
+<span class="info">From 9d89604ac52b0949d047dae2f9b78cb5085ee1a2 Mon Sep 17 00:00:00 2001</span>
+From: Lars Niesen <iah71niesen@gso-koeln.de>
+<span class="info">Date: Wed, 29 Apr 2020 14:15:59 +0200</span>
+<span class="info">Subject: [PATCH 2/8] Added blur function</span>
+
+<span class="del">---</span>
+ config.def.h | 3 +++
+ slock.c | 3 ++-
+ 2 files changed, 5 insertions(+), 1 deletion(-)
+
+<span class="info">diff --git a/config.def.h b/config.def.h</span>
+<span class="info">index c8e52d6..fcc1b39 100644</span>
+<span class="info">--- a/config.def.h</span>
+<span class="info">+++ b/config.def.h</span>
+<span class="hunk">@@ -10,3 +10,6 @@ static const char *colorname[NUMCOLS] = {</span>
+
+ /* treat a cleared input like a wrong password (color) */
+ static const int failonclear = 1;
+<span class="add">+</span>
+<span class="add">+/*Set Blur radius*/</span>
+<span class="add">+static const int blurRadius=5;</span>
+\ No newline at end of file
+<span class="info">diff --git a/slock.c b/slock.c</span>
+<span class="info">index 7c63f34..0f24cd7 100644</span>
+<span class="info">--- a/slock.c</span>
+<span class="info">+++ b/slock.c</span>
+<span class="hunk">@@ -372,7 +372,7 @@ main(int argc, char **argv) {</span>
+ die("slock: setgid: %s\n", strerror(errno));
+ if (setuid(duid) < 0)
+ die("slock: setuid: %s\n", strerror(errno));
+<span class="del">- </span>
+<span class="add">+</span>
+ /*Create screenshot Image*/
+ Screen *scr = ScreenOfDisplay(dpy, DefaultScreen(dpy));
+ image = imlib_create_image(scr->width,scr->height);
+<span class="hunk">@@ -381,6 +381,7 @@ main(int argc, char **argv) {</span>
+ imlib_context_set_visual(DefaultVisual(dpy,0));
+ imlib_context_set_drawable(RootWindow(dpy,XScreenNumberOfScreen(scr)));
+ imlib_copy_drawable_to_image(0,0,0,scr->width,scr->height,0,0,1);
+<span class="add">+ imlib_image_blur(blurRadius);</span>
+
+ /* check for Xrandr support */
+ rr.active = XRRQueryExtension(dpy, &rr.evbase, &rr.errbase);
+<span class="del">-- </span>
+2.27.0
+
+
+<span class="info">From 069aabd7e30244befd4efe74c85d3468ed076c21 Mon Sep 17 00:00:00 2001</span>
+From: Lars Niesen <iah71niesen@gso-koeln.de>
+<span class="info">Date: Wed, 29 Apr 2020 17:33:09 +0200</span>
+<span class="info">Subject: [PATCH 4/8] added Pixelation</span>
+
+<span class="del">---</span>
+ config.def.h | 3 ++-
+ slock.c | 42 ++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 44 insertions(+), 1 deletion(-)
+
+<span class="info">diff --git a/config.def.h b/config.def.h</span>
+<span class="info">index fcc1b39..1c1aef3 100644</span>
+<span class="info">--- a/config.def.h</span>
+<span class="info">+++ b/config.def.h</span>
+<span class="hunk">@@ -12,4 +12,5 @@ static const char *colorname[NUMCOLS] = {</span>
+ static const int failonclear = 1;
+
+ /*Set Blur radius*/
+<span class="del">-static const int blurRadius=5;</span>
+\ No newline at end of file
+<span class="add">+static const int blurRadius=0;</span>
+<span class="add">+static const int pixelSize=5;</span>
+<span class="info">diff --git a/slock.c b/slock.c</span>
+<span class="info">index 0f24cd7..33ca569 100644</span>
+<span class="info">--- a/slock.c</span>
+<span class="info">+++ b/slock.c</span>
+<span class="hunk">@@ -381,7 +381,49 @@ main(int argc, char **argv) {</span>
+ imlib_context_set_visual(DefaultVisual(dpy,0));
+ imlib_context_set_drawable(RootWindow(dpy,XScreenNumberOfScreen(scr)));
+ imlib_copy_drawable_to_image(0,0,0,scr->width,scr->height,0,0,1);
+<span class="add">+ </span>
+<span class="add">+ /*Blur function*/</span>
+ imlib_image_blur(blurRadius);
+<span class="add">+</span>
+<span class="add">+</span>
+<span class="add">+ /*Pixelation*/</span>
+<span class="add">+ int width = scr->width;</span>
+<span class="add">+ int height = scr->height;</span>
+<span class="add">+ </span>
+<span class="add">+ for(int y = 0; y < height; y += pixelSize)</span>
+<span class="add">+ {</span>
+<span class="add">+ for(int x = 0; x < width; x += pixelSize)</span>
+<span class="add">+ {</span>
+<span class="add">+ int red = 0;</span>
+<span class="add">+ int green = 0;</span>
+<span class="add">+ int blue = 0;</span>
+<span class="add">+</span>
+<span class="add">+ Imlib_Color pixel; </span>
+<span class="add">+ Imlib_Color* pp;</span>
+<span class="add">+ pp = &pixel;</span>
+<span class="add">+ for(int j = 0; j < pixelSize && j < height; j++)</span>
+<span class="add">+ {</span>
+<span class="add">+ for(int i = 0; i < pixelSize && i < width; i++)</span>
+<span class="add">+ {</span>
+<span class="add">+ imlib_image_query_pixel(x+i,y+j,pp);</span>
+<span class="add">+ red += pixel.red;</span>
+<span class="add">+ green += pixel.green;</span>
+<span class="add">+ blue += pixel.blue;</span>
+<span class="add">+ }</span>
+<span class="add">+ }</span>
+<span class="add">+ red /= (pixelSize*pixelSize);</span>
+<span class="add">+ green /= (pixelSize*pixelSize);</span>
+<span class="add">+ blue /= (pixelSize*pixelSize);</span>
+<span class="add">+ printf("R/G/B: %i/%i/%i\n",red,green,blue);</span>
+<span class="add">+ imlib_context_set_color(red,green,blue,pixel.alpha);</span>
+<span class="add">+ imlib_image_fill_rectangle(x,y,pixelSize,pixelSize);</span>
+<span class="add">+ red = 0;</span>
+<span class="add">+ green = 0;</span>
+<span class="add">+ blue = 0;</span>
+<span class="add">+ }</span>
+<span class="add">+ }</span>
+<span class="add">+ </span>
+<span class="add">+ </span>
+
+ /* check for Xrandr support */
+ rr.active = XRRQueryExtension(dpy, &rr.evbase, &rr.errbase);
+<span class="del">-- </span>
+2.27.0
+
+
+<span class="info">From 109bac015c1c7fbf8440fb42588fe7e0e9cb5e62 Mon Sep 17 00:00:00 2001</span>
+From: Lars Niesen <iah71niesen@gso-koeln.de>
+<span class="info">Date: Wed, 29 Apr 2020 17:42:39 +0200</span>
+<span class="info">Subject: [PATCH 6/8] removed debug printf</span>
+
+<span class="del">---</span>
+ slock.c | 1 -
+ 1 file changed, 1 deletion(-)
+
+<span class="info">diff --git a/slock.c b/slock.c</span>
+<span class="info">index 33ca569..f54c459 100644</span>
+<span class="info">--- a/slock.c</span>
+<span class="info">+++ b/slock.c</span>
+<span class="hunk">@@ -414,7 +414,6 @@ main(int argc, char **argv) {</span>
+ red /= (pixelSize*pixelSize);
+ green /= (pixelSize*pixelSize);
+ blue /= (pixelSize*pixelSize);
+<span class="del">- printf("R/G/B: %i/%i/%i\n",red,green,blue);</span>
+ imlib_context_set_color(red,green,blue,pixel.alpha);
+ imlib_image_fill_rectangle(x,y,pixelSize,pixelSize);
+ red = 0;
+<span class="del">-- </span>
+2.27.0
+
+
+<span class="info">From a13a0f4ac86f82e4dff145b7ebd93e52d07492c9 Mon Sep 17 00:00:00 2001</span>
+From: Lars Niesen <iah71niesen@gso-koeln.de>
+<span class="info">Date: Sun, 3 May 2020 18:03:38 +0200</span>
+<span class="info">Subject: [PATCH 7/8] Changed compilerflag to fast</span>
+
+<span class="del">---</span>
+ config.mk | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+<span class="info">diff --git a/config.mk b/config.mk</span>
+<span class="info">index 987819e..d0c2f01 100644</span>
+<span class="info">--- a/config.mk</span>
+<span class="info">+++ b/config.mk</span>
+<span class="hunk">@@ -16,7 +16,7 @@ LIBS = -L/usr/lib -lc -lcrypt -L${X11LIB} -lX11 -lXext -lXrandr -lImlib2</span>
+
+ # flags
+ CPPFLAGS = -DVERSION=\"${VERSION}\" -D_DEFAULT_SOURCE -DHAVE_SHADOW_H
+<span class="del">-CFLAGS = -std=c99 -pedantic -Wall -Os ${INCS} ${CPPFLAGS}</span>
+<span class="add">+CFLAGS = -std=c99 -pedantic -Wall -Ofast ${INCS} ${CPPFLAGS}</span>
+ LDFLAGS = -s ${LIBS}
+ COMPATSRC = explicit_bzero.c
+
+<span class="del">-- </span>
+2.27.0
+
+
+<span class="info">From 31a7001c4954606c066cc3df4318fafd6d216bcd Mon Sep 17 00:00:00 2001</span>
+From: Lars Niesen <iah71niesen@gso-koeln.de>
+<span class="info">Date: Mon, 4 May 2020 10:00:40 +0200</span>
+<span class="info">Subject: [PATCH 8/8] Added defines for BLUR/PIXELATION to remove from code by</span>
+ compilation
+
+<span class="del">---</span>
+ config.def.h | 11 ++++++++---
+ slock.c | 9 ++++++---
+ 2 files changed, 14 insertions(+), 6 deletions(-)
+
+<span class="info">diff --git a/config.def.h b/config.def.h</span>
+<span class="info">index 1c1aef3..5407953 100644</span>
+<span class="info">--- a/config.def.h</span>
+<span class="info">+++ b/config.def.h</span>
+<span class="hunk">@@ -11,6 +11,11 @@ static const char *colorname[NUMCOLS] = {</span>
+ /* treat a cleared input like a wrong password (color) */
+ static const int failonclear = 1;
+
+<span class="del">-/*Set Blur radius*/</span>
+<span class="del">-static const int blurRadius=0;</span>
+<span class="del">-static const int pixelSize=5;</span>
+<span class="add">+/*Enable blur*/</span>
+<span class="add">+#define BLUR</span>
+<span class="add">+/*Set blur radius*/</span>
+<span class="add">+static const int blurRadius=5;</span>
+<span class="add">+/*Enable Pixelation*/</span>
+<span class="add">+//#define PIXELATION</span>
+<span class="add">+/*Set pixelation radius*/</span>
+<span class="add">+static const int pixelSize=0;</span>
+<span class="info">diff --git a/slock.c b/slock.c</span>
+<span class="info">index f54c459..1a4d6e3 100644</span>
+<span class="info">--- a/slock.c</span>
+<span class="info">+++ b/slock.c</span>
+<span class="hunk">@@ -381,11 +381,14 @@ main(int argc, char **argv) {</span>
+ imlib_context_set_visual(DefaultVisual(dpy,0));
+ imlib_context_set_drawable(RootWindow(dpy,XScreenNumberOfScreen(scr)));
+ imlib_copy_drawable_to_image(0,0,0,scr->width,scr->height,0,0,1);
+<span class="del">- </span>
+<span class="add">+</span>
+<span class="add">+#ifdef BLUR</span>
+<span class="add">+</span>
+ /*Blur function*/
+ imlib_image_blur(blurRadius);
+<span class="add">+#endif // BLUR </span>
+
+<span class="del">-</span>
+<span class="add">+#ifdef PIXELATION</span>
+ /*Pixelation*/
+ int width = scr->width;
+ int height = scr->height;
+<span class="hunk">@@ -423,7 +426,7 @@ main(int argc, char **argv) {</span>
+ }
+
+
+<span class="del">- </span>
+<span class="add">+#endif</span>
+ /* check for Xrandr support */
+ rr.active = XRRQueryExtension(dpy, &rr.evbase, &rr.errbase);
+
+<span class="del">-- </span>
+2.27.0
+</code></pre>
+<p>De tal forma que, una vez aplicados los cambios de software, al ser ejecutado captura la pantalla completa usando <emb>imlib2</emb> (<emb>imlib_copy_drawable_to_image</emb> desde <emb>RootWindow</emb>), aplica desenfoque directamente sobre es imagen en memoria con <emb>imlib_image_blur(blurRadius)</emb> y la convierte en un Pixmap, que pone como fondo de ventana de bloqueo con <emb>XSetWindowBackgroundPixmap</emb>.</p>
+<p>Quedando un fondo como el siguiente ejemplo:</p>
+<img src="slock-blur.png" />
+</body>
+</html>
+\ No newline at end of file
diff --git a/slock/slock-blur.png b/slock/slock-blur.png
Binary files differ.