From 231d232006958029a636ee5d04f991b868989b54 Mon Sep 17 00:00:00 2001
From: Jerome Petazzoni <jerome.petazzoni@gmail.com>
Date: Wed, 30 Sep 2015 14:55:36 -0700
Subject: [PATCH] buttslock will lock your screen when your machine goes to
 sleep

---
 buttslock/Dockerfile   |  15 +++++++++++++++
 buttslock/buttslock.py |  28 ++++++++++++++++++++++++++++
 buttslock/buttslock.sh |  26 ++++++++++++++++++++++++++
 buttslock/lock.png     | Bin 0 -> 1387 bytes
 4 files changed, 69 insertions(+)
 create mode 100644 buttslock/Dockerfile
 create mode 100755 buttslock/buttslock.py
 create mode 100755 buttslock/buttslock.sh
 create mode 100644 buttslock/lock.png

diff --git a/buttslock/Dockerfile b/buttslock/Dockerfile
new file mode 100644
index 0000000..ee14255
--- /dev/null
+++ b/buttslock/Dockerfile
@@ -0,0 +1,15 @@
+#
+# This container will listen to DBus events to be notified when your
+# computer goes to sleep. When such events happen, it will lock the
+# screen with a fancy lock.
+#
+# It needs to be started with a few bind-mounts:
+# - /etc/passwd, /etc/shadow (read-only)
+# - /var/run/dbus, the X11 socket (typically /tmp/.X11-unix)
+# And it also requires the USER and DISPLAY environment variables to be set.
+#
+FROM alpine
+RUN apk update
+RUN apk add i3lock imagemagick py-dbus py-gobject scrot ttf-liberation xkeyboard-config
+ADD buttslock.py buttslock.sh lock.png /
+CMD /buttslock.py
diff --git a/buttslock/buttslock.py b/buttslock/buttslock.py
new file mode 100755
index 0000000..126ed4c
--- /dev/null
+++ b/buttslock/buttslock.py
@@ -0,0 +1,28 @@
+#!/usr/bin/env python
+
+# Shamelessly pasted from:
+# http://serverfault.com/questions/573379/system-suspend-dbus-upower-signals-are-not-seen
+
+from datetime import datetime
+import dbus
+import gobject
+from dbus.mainloop.glib import DBusGMainLoop
+import os
+
+def handle_sleep(*args):
+    print "%s    PrepareForSleep%s" % (datetime.now().ctime(), args)
+    if len(args)>0 and args[0]:
+        os.system("/buttslock.sh")
+
+DBusGMainLoop(set_as_default=True)     # integrate into gobject main loop
+bus = dbus.SystemBus()                 # connect to system wide dbus
+bus.add_signal_receiver(               # define the signal to listen to
+    handle_sleep,                      # callback function
+    'PrepareForSleep',                 # signal name
+    'org.freedesktop.login1.Manager',  # interface
+    'org.freedesktop.login1'           # bus name
+)
+
+loop = gobject.MainLoop()
+loop.run()
+
diff --git a/buttslock/buttslock.sh b/buttslock/buttslock.sh
new file mode 100755
index 0000000..7c780e9
--- /dev/null
+++ b/buttslock/buttslock.sh
@@ -0,0 +1,26 @@
+#!/bin/sh
+
+# Shamelessly copied from:
+# https://github.com/meskarune/i3lock-fancy
+
+# All options are here: http://www.imagemagick.org/Usage/blur/#blur_args
+#BLURTYPE="0x5" # 7.52s
+#BLURTYPE="0x2" # 4.39s
+#BLURTYPE="5x3" # 3.80s
+BLURTYPE="2x8" # 2.90s
+#BLURTYPE="2x3" # 2.92s
+
+# I still have to figure out how to get imagemagick fonts to work in Alpine
+#FONT="-font Liberation-Sans"
+FONT=
+
+scrot /tmp/scrot.png
+convert /tmp/scrot.png \
+    -level 0%,100%,0.6 -blur $BLURTYPE $FONT \
+    -pointsize 26 -fill white -gravity center \
+    -annotate +0+200 'Type password to unlock' \
+    /tmp/conv.png
+composite -gravity center /lock.png /tmp/conv.png /tmp/lock.png
+#i3lock --textcolor=ffffff00 --insidecolor=ffffff1c --ringcolor=ffffff3e --linecolor=ffffff00 --keyhlcolor=00000080 --ringvercolor=00000000 --insidevercolor=0000001c --ringwrongcolor=00000055 --insidewrongcolor=0000001c  -i $IMAGE
+i3lock -i /tmp/lock.png --ignore-empty-password
+
diff --git a/buttslock/lock.png b/buttslock/lock.png
new file mode 100644
index 0000000000000000000000000000000000000000..e268624ffb83252bd0838b2861ae9dd30da8f6d6
GIT binary patch
literal 1387
zcmV-x1(f=UP)<h;3K|Lk000e1NJLTq002Ay002A)1^@s6I{evk00006VoOIv0RI60
z0RN!9r;`8x010qNS#tmY0OtSz0OtYl8(6gf000McNliru-U|p72QR4k1Oxy81o%lr
zK~!i%?VC+#TvZguf0;B*Osh?3ZR<f45~-iG2*rg(bRj4rsZ?wQQA8B!qM$2rB`yRJ
zQ8(6tkm90#p$or2g4n1CDryZ{5wrx_cuKWmf=z1EB;(@V*SvS;PLlUB@0tnyZD!_w
zZf5TP-TUsjA1^I52vtQytkw>!1A2fvfvbTl{O3P`-+*CY0Qkmh<03LcNwipDF{o;b
zh*bUioxnZ74ZvlYf?@u}nH~W8MdWzsA}*GO8BQvvs+)n=fnK1)6k7<>z)9d~5qU*b
z0UBn!VuidU6#`mRbvtkfxRzpO0a}3#z+P2-4QTTh(iAJkq75_KOP&PYpfTT>@Br|E
zs;*fQE$q8-RaKt_o&hefWg5V3z~|t`2ouXq;V($tvwgtZK)WrI;uLTK_z@Vyjm{f@
z>w#^+rMS_2uKK($BHOK)m$`mmPW(M}5%48&T{fEGP2d3VsfbM2Ab_fF0qzDK11>b-
zgc;yr5!t_((Yui0RO>zp?6YxC71#;9Cn9H|Hdm)V`|c{hSGX1r@deN)BBM62Pzv3{
z-fV^XX3yYS;~n5^BHC6lpQ|GBJFp4(IUPuG6L6yy^N`zcDn0B?>xO<2>4zFqb@3Mw
z5jhR)0mf|^&&!ahM=pwX>6O3`aFvY#qaxA`wOu$5s`@Ul!|I+M5gE4PLdf01o~^(}
zD|+rt-V`<K*=2<kk3+FmE^7F4pwo)LAHZQN=Ee7nDd1xp^V|%@E@*DU{;GBpz8ww&
zg-6hYl#%^uJw=-z)pL{EFz#>G`d7=}z?2mi!4WHXI&gK!O{miIQ2|yHZsF6o2|}Yd
zm(mO?adpT|5yRljh74D&P$Hq<pO>PBo0jv2mpkVTFL&lO9GJev9Elsw3M)Wnz1sq`
ztLiFd%T|C@v!ye10P9t?UjEEOmHLy53ecsh7yI`!zyvTUe(hb4np~D@(F$${VjHt_
z=cIMl<F;fhV}R0_UQoqdz+M}`&E|%INt}mi;5hIruunvOs<%=L8uqPw1ZT9>mRaJA
z16xJp7aM@UJ?zaMz#WG)n^|zT+d(TP)EHLPYk)hf-ehc4)hDb70mHb%uDP~cn}t58
z%`zdwT{LG`wycKQO@ff&MvSmamXP6PO>p8-B9pjXkulskR5t||@<oZ+!b8Ar;1*yD
zZbN+s@K&l!>BMT`L%>}kax|rl03)h;5cm#wE)^?{7%hATcu7Q#+7tmK+p(_#-`ZFi
z#4vmkcL-LKBH&z}{0BEXDm_EQFgz-A9E*quA~KDe_&0KkH%JV_E7YAu)x|GEI|(di
z8chttYk@1RnBco~1$U@k`XCy^@H$|Rs<zreE460b3_O$xmP8E00FMB>?V#nCqP@WP
zM5;@aAMreI1<#9CD3h3m2dv=v#0q5+)9|1bJfB&iOkx`T+6n+7GGw(fiDh^i_{)l^
zQTs$%FOyh?M{rN$Wk`+M(Ykdk!&AUSC=YvrPw16FEW^FPt~z<R2Y4_OD3Q{qa-J&g
z`R5mKqjj6tF2OxpT_wUi8sZsF%ya;^rvsiSW+7geUNVFXm%a%9KM5Hg!{yCpXA~B8
z@^FlZX`)01p>|s-W7w}xf1v)nw^=wPB2QTn!YvGNAMlYCn}lPy2gz%?GX&B>vJ0WA
toxrWY{r<HpTXIP;h1=%+ka_;A?LQV$fr?B4y|n-U002ovPDHLkV1kmTc(VWi

literal 0
HcmV?d00001