1
0
mirror of https://github.com/tiyn/slock.git synced 2025-10-18 05:41:21 +02:00

18 Commits

Author SHA1 Message Date
fedcfc595b changed sudo commands 2023-12-20 04:08:52 +01:00
940aa6c46b changed sudo commands 2023-12-20 04:06:26 +01:00
8eae6d56b3 added secret-password patch for readme 2023-10-29 03:10:54 +01:00
632909ee67 cleanup 2023-10-29 03:09:23 +01:00
5a88ca3a66 made secret-password an array again 2023-10-29 03:00:48 +01:00
TiynGER
eeb357c356 added secret-password patch 2023-10-29 02:54:43 +01:00
TiynGER
f6f743c04d added secret-password patch 2023-10-29 02:52:03 +01:00
TiynGER
535d3daa33 added secret-password patch 2023-10-29 02:37:09 +01:00
TiynGER
62f56acf86 updated logo size 2023-10-26 17:07:07 +02:00
b8f4624e30 changed logo to tiyn logo 2023-10-26 17:05:05 +02:00
744232078f changed colors 2023-10-26 14:45:56 +02:00
e738d89c47 added capscolor patch to readme 2023-10-26 02:58:19 +02:00
737545828a added capscolor patch to master 2023-10-26 02:57:38 +02:00
d396a4a4c1 added capscolor patch 2023-10-26 02:51:41 +02:00
b1c8a9dda1 added control-clear patch to readme 2023-10-26 02:41:21 +02:00
cc6c284600 added control-clear patch to master 2023-10-26 02:40:44 +02:00
6b5d4811eb added control-clear patch 2023-10-26 02:36:52 +02:00
a8518168e5 remove unneeded code of dwmlogo patch 2023-10-25 23:28:18 +02:00
6 changed files with 208 additions and 22 deletions

View File

@@ -7,7 +7,10 @@ This is my patched version of slock. The base version is directly from suckless.
The list below shows the currently applied patches to the master branch.
- slock-background-image-20220318-1c5a538.diff (shows a background image in locked state)
- slock-capscolor-20220921-35633d4.diff (displays a separate color if caps is set)
- slock-dwmlogo-20210324.diff (adds dwm logo on lock screen)
- slock-git-20161012-control-clear.diff (doesnt turn logo red when pressing control keys)
- slock-secret-password-1.4.diff (modified) (can give additional passwords that run commands)
## Installation

View File

@@ -4,9 +4,9 @@ static const char *group = "nobody";
static const char *colorname[NUMCOLS] = {
[INIT] = "#2d2d2d", /* after initialization */
[BACKGROUND] = "black", /* after initialization */
[INPUT] = "#005577", /* during input */
[FAILED] = "#CC3333", /* wrong password */
[FAILED] = "#cc3333", /* wrong password */
[CAPS] = "#ff0000", /* CapsLock on */
};
/* treat a cleared input like a wrong password (color) */
@@ -15,20 +15,40 @@ static const int failonclear = 1;
/* Background image path, should be available to the user above */
static const char* background_image = "/home/user/.local/share/lock";
/* insert grid pattern with scale 1:1, the size can be changed with logosize */
static const int logosize = 75;
static const int logow = 12; /* grid width and height for right center alignment*/
static const int logoh = 6;
static const int logosize = 40;
static const int logow = 10; /* grid width and height for right center alignment*/
static const int logoh = 15;
static XRectangle rectangles[9] = {
static XRectangle rectangles[12] = {
/* x y w h */
{ 0, 3, 1, 3 },
{ 1, 3, 2, 1 },
{ 0, 5, 8, 1 },
{ 3, 0, 1, 5 },
{ 5, 3, 1, 2 },
{ 7, 3, 1, 2 },
{ 8, 3, 4, 1 },
{ 9, 4, 1, 2 },
{ 11, 4, 1, 2 },
{ 0, 0, 1, 3 },
{ 0, 7, 4, 2 },
{ 1, 0, 1, 4 },
{ 2, 2, 1, 3 },
{ 3, 3, 1, 3 },
{ 4, 0, 2, 2 },
{ 4, 4, 2, 11 },
{ 6, 3, 1, 3 },
{ 6, 7, 4, 2 },
{ 7, 2, 1, 3 },
{ 8, 0, 1, 4 },
{ 9, 0, 1, 3 },
};
/* allow control key to trigger fail on clear */
static const int controlkeyclear = 1;
/* struct for secret passwords and commands */
struct secretpass {
char const *pass;
char const *command;
};
/* list of secret passwords and their commands */
static const struct secretpass scom[1] = {
/* Password command */
{"shutdown", "sudo shutdown -h now"},
};
/* length of entries in scom */
static const int entrylen = 1;

View File

@@ -0,0 +1,88 @@
From da1721b1b4bb0aa8f94537ddd2a3eada1df00a30 Mon Sep 17 00:00:00 2001
From: Max Schillinger <maxschillinger@web.de>
Date: Wed, 21 Sep 2022 19:56:58 +0200
Subject: [PATCH] Update capscolor patch to match the latest slock commit
(35633d4)
---
config.def.h | 1 +
slock.c | 15 ++++++++++++---
2 files changed, 13 insertions(+), 3 deletions(-)
diff --git a/config.def.h b/config.def.h
index 9855e21..6288856 100644
--- a/config.def.h
+++ b/config.def.h
@@ -6,6 +6,7 @@ static const char *colorname[NUMCOLS] = {
[INIT] = "black", /* after initialization */
[INPUT] = "#005577", /* during input */
[FAILED] = "#CC3333", /* wrong password */
+ [CAPS] = "red", /* CapsLock on */
};
/* treat a cleared input like a wrong password (color) */
diff --git a/slock.c b/slock.c
index 5ae738c..5f4fb7a 100644
--- a/slock.c
+++ b/slock.c
@@ -18,6 +18,7 @@
#include <X11/keysym.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
+#include <X11/XKBlib.h>
#include "arg.h"
#include "util.h"
@@ -28,6 +29,7 @@ enum {
INIT,
INPUT,
FAILED,
+ CAPS,
NUMCOLS
};
@@ -130,16 +132,20 @@ readpw(Display *dpy, struct xrandr *rr, struct lock **locks, int nscreens,
{
XRRScreenChangeNotifyEvent *rre;
char buf[32], passwd[256], *inputhash;
- int num, screen, running, failure, oldc;
- unsigned int len, color;
+ int caps, num, screen, running, failure, oldc;
+ unsigned int len, color, indicators;
KeySym ksym;
XEvent ev;
len = 0;
+ caps = 0;
running = 1;
failure = 0;
oldc = INIT;
+ if (!XkbGetIndicatorState(dpy, XkbUseCoreKbd, &indicators))
+ caps = indicators & 1;
+
while (running && !XNextEvent(dpy, &ev)) {
if (ev.type == KeyPress) {
explicit_bzero(&buf, sizeof(buf));
@@ -179,6 +185,9 @@ readpw(Display *dpy, struct xrandr *rr, struct lock **locks, int nscreens,
if (len)
passwd[--len] = '\0';
break;
+ case XK_Caps_Lock:
+ caps = !caps;
+ break;
default:
if (num && !iscntrl((int)buf[0]) &&
(len + num < sizeof(passwd))) {
@@ -187,7 +196,7 @@ readpw(Display *dpy, struct xrandr *rr, struct lock **locks, int nscreens,
}
break;
}
- color = len ? INPUT : ((failure || failonclear) ? FAILED : INIT);
+ color = len ? (caps ? CAPS : INPUT) : (failure || failonclear ? FAILED : INIT);
if (running && oldc != color) {
for (screen = 0; screen < nscreens; screen++) {
XSetWindowBackground(dpy,
--
2.37.3

View File

@@ -0,0 +1,27 @@
diff --git a/config.def.h b/config.def.h
index 6fba2b6..933152b 100644
--- a/config.def.h
+++ b/config.def.h
@@ -10,3 +10,6 @@ static const char *colorname[NUMCOLS] = {
/* treat a cleared input like a wrong password */
static const int failonclear = 1;
+
+/* allow control key to trigger fail on clear */
+static const int controlkeyclear = 0;
diff --git a/slock.c b/slock.c
index 4d7f06f..15552ef 100644
--- a/slock.c
+++ b/slock.c
@@ -180,8 +180,9 @@ readpw(Display *dpy, struct xrandr *rr, struct lock **locks, int nscreens,
passwd[len--] = '\0';
break;
default:
- if (num && !iscntrl((int)buf[0]) &&
- (len + num < sizeof(passwd))) {
+ if (controlkeyclear && iscntrl((int)buf[0]))
+ continue;
+ if (num && (len + num < sizeof(passwd))) {
memcpy(passwd + len, buf, num);
len += num;
}

View File

@@ -0,0 +1,33 @@
diff --git a/config.def.h b/config.def.h
index 9855e21..989ca08 100644
--- a/config.def.h
+++ b/config.def.h
@@ -10,3 +10,10 @@ static const char *colorname[NUMCOLS] = {
/* treat a cleared input like a wrong password (color) */
static const int failonclear = 1;
+
+/* length of entires in scom */
s
+static const int entrylen = 1;
+
+static const secretpass scom[entrylen] = {
+/* Password command */
+ { "shutdown", "doas poweroff" },
};
diff --git a/slock.c b/slock.c
index d2f0886..6a96a2d 100644
--- a/slock.c
+++ b/slock.c
@@ -160,6 +160,13 @@ readpw(Display *dpy, struct xrandr *rr, struct lock **locks, int nscreens,
case XK_Return:
passwd[len] = '\0';
errno = 0;
+
+ for (int i = 0; i < entrylen; i++){
+ if (strcmp(scom[i].pass, passwd) == 0){
+ system(scom[i].command);
+ }
+ }
+

27
slock.c
View File

@@ -24,6 +24,7 @@
#include <X11/Xutil.h>
#include <Imlib2.h>
#include <X11/Xft/Xft.h>
#include <X11/XKBlib.h>
#include "arg.h"
#include "util.h"
@@ -31,10 +32,10 @@
char *argv0;
enum {
BACKGROUND,
INIT,
INPUT,
FAILED,
CAPS,
NUMCOLS
};
@@ -167,16 +168,20 @@ readpw(Display *dpy, struct xrandr *rr, struct lock **locks, int nscreens,
{
XRRScreenChangeNotifyEvent *rre;
char buf[32], passwd[256], *inputhash;
int num, screen, running, failure, oldc;
unsigned int len, color;
int caps, num, screen, running, failure, oldc;
unsigned int len, color, indicators;
KeySym ksym;
XEvent ev;
len = 0;
caps = 0;
running = 1;
failure = 0;
oldc = INIT;
if (!XkbGetIndicatorState(dpy, XkbUseCoreKbd, &indicators))
caps = indicators & 1;
while (running && !XNextEvent(dpy, &ev)) {
if (ev.type == KeyPress) {
explicit_bzero(&buf, sizeof(buf));
@@ -197,6 +202,12 @@ readpw(Display *dpy, struct xrandr *rr, struct lock **locks, int nscreens,
case XK_Return:
passwd[len] = '\0';
errno = 0;
for (int i = 0; i < entrylen; i++){
if (strcmp(scom[i].pass, passwd) == 0){
system(scom[i].command);
}
}
if (!(inputhash = crypt(passwd, hash)))
fprintf(stderr, "slock: crypt: %s\n", strerror(errno));
else
@@ -216,15 +227,19 @@ readpw(Display *dpy, struct xrandr *rr, struct lock **locks, int nscreens,
if (len)
passwd[--len] = '\0';
break;
case XK_Caps_Lock:
caps = !caps;
break;
default:
if (num && !iscntrl((int)buf[0]) &&
(len + num < sizeof(passwd))) {
if (controlkeyclear && iscntrl((int)buf[0]))
continue;
if (num && (len + num < sizeof(passwd))) {
memcpy(passwd + len, buf, num);
len += num;
}
break;
}
color = len ? INPUT : ((failure || failonclear) ? FAILED : INIT);
color = len ? (caps ? CAPS : INPUT) : (failure || failonclear ? FAILED : INIT);
if (running && oldc != color) {
for (screen = 0; screen < nscreens; screen++) {
if (locks[screen]->bgmap)