1
0
mirror of https://github.com/tiyn/slock.git synced 2025-10-18 22:01:20 +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. 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-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-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 ## Installation

View File

@@ -4,9 +4,9 @@ static const char *group = "nobody";
static const char *colorname[NUMCOLS] = { static const char *colorname[NUMCOLS] = {
[INIT] = "#2d2d2d", /* after initialization */ [INIT] = "#2d2d2d", /* after initialization */
[BACKGROUND] = "black", /* after initialization */
[INPUT] = "#005577", /* during input */ [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) */ /* 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 */ /* Background image path, should be available to the user above */
static const char* background_image = "/home/user/.local/share/lock"; static const char* background_image = "/home/user/.local/share/lock";
/* insert grid pattern with scale 1:1, the size can be changed with logosize */ /* insert grid pattern with scale 1:1, the size can be changed with logosize */
static const int logosize = 75; static const int logosize = 40;
static const int logow = 12; /* grid width and height for right center alignment*/ static const int logow = 10; /* grid width and height for right center alignment*/
static const int logoh = 6; static const int logoh = 15;
static XRectangle rectangles[9] = { static XRectangle rectangles[12] = {
/* x y w h */ /* x y w h */
{ 0, 3, 1, 3 }, { 0, 0, 1, 3 },
{ 1, 3, 2, 1 }, { 0, 7, 4, 2 },
{ 0, 5, 8, 1 }, { 1, 0, 1, 4 },
{ 3, 0, 1, 5 }, { 2, 2, 1, 3 },
{ 5, 3, 1, 2 }, { 3, 3, 1, 3 },
{ 7, 3, 1, 2 }, { 4, 0, 2, 2 },
{ 8, 3, 4, 1 }, { 4, 4, 2, 11 },
{ 9, 4, 1, 2 }, { 6, 3, 1, 3 },
{ 11, 4, 1, 2 }, { 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 <X11/Xutil.h>
#include <Imlib2.h> #include <Imlib2.h>
#include <X11/Xft/Xft.h> #include <X11/Xft/Xft.h>
#include <X11/XKBlib.h>
#include "arg.h" #include "arg.h"
#include "util.h" #include "util.h"
@@ -31,10 +32,10 @@
char *argv0; char *argv0;
enum { enum {
BACKGROUND,
INIT, INIT,
INPUT, INPUT,
FAILED, FAILED,
CAPS,
NUMCOLS NUMCOLS
}; };
@@ -167,16 +168,20 @@ readpw(Display *dpy, struct xrandr *rr, struct lock **locks, int nscreens,
{ {
XRRScreenChangeNotifyEvent *rre; XRRScreenChangeNotifyEvent *rre;
char buf[32], passwd[256], *inputhash; char buf[32], passwd[256], *inputhash;
int num, screen, running, failure, oldc; int caps, num, screen, running, failure, oldc;
unsigned int len, color; unsigned int len, color, indicators;
KeySym ksym; KeySym ksym;
XEvent ev; XEvent ev;
len = 0; len = 0;
caps = 0;
running = 1; running = 1;
failure = 0; failure = 0;
oldc = INIT; oldc = INIT;
if (!XkbGetIndicatorState(dpy, XkbUseCoreKbd, &indicators))
caps = indicators & 1;
while (running && !XNextEvent(dpy, &ev)) { while (running && !XNextEvent(dpy, &ev)) {
if (ev.type == KeyPress) { if (ev.type == KeyPress) {
explicit_bzero(&buf, sizeof(buf)); explicit_bzero(&buf, sizeof(buf));
@@ -197,6 +202,12 @@ readpw(Display *dpy, struct xrandr *rr, struct lock **locks, int nscreens,
case XK_Return: case XK_Return:
passwd[len] = '\0'; passwd[len] = '\0';
errno = 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))) if (!(inputhash = crypt(passwd, hash)))
fprintf(stderr, "slock: crypt: %s\n", strerror(errno)); fprintf(stderr, "slock: crypt: %s\n", strerror(errno));
else else
@@ -216,15 +227,19 @@ readpw(Display *dpy, struct xrandr *rr, struct lock **locks, int nscreens,
if (len) if (len)
passwd[--len] = '\0'; passwd[--len] = '\0';
break; break;
case XK_Caps_Lock:
caps = !caps;
break;
default: default:
if (num && !iscntrl((int)buf[0]) && if (controlkeyclear && iscntrl((int)buf[0]))
(len + num < sizeof(passwd))) { continue;
if (num && (len + num < sizeof(passwd))) {
memcpy(passwd + len, buf, num); memcpy(passwd + len, buf, num);
len += num; len += num;
} }
break; break;
} }
color = len ? INPUT : ((failure || failonclear) ? FAILED : INIT); color = len ? (caps ? CAPS : INPUT) : (failure || failonclear ? FAILED : INIT);
if (running && oldc != color) { if (running && oldc != color) {
for (screen = 0; screen < nscreens; screen++) { for (screen = 0; screen < nscreens; screen++) {
if (locks[screen]->bgmap) if (locks[screen]->bgmap)