insecure-lock
is an extensible screen lock framework. It is implemented within Emacs itself rather than interfacing with underlying window system, so it is best used together with EXWM as a screen locker. Otherwise, it can be used as a screen saver.
As its name suggest, currently security is not a strength of this package. It’s more of an advice rather than defense against your intruders. Nevertheless, any suggestions about improving security are more than welcomed!
(setq 'insecure-lock-mode-hook '(insecure-lock-redact insecure-lock-posframe))
(setq insecure-lock-mode-hook '(vampire-time-screensaver insecure-lock-blank-screen))
(vampire-time-screensaver
is a function for my personal use, haven’t been published yet. Curious people may check my .emacs.d
.)
(setq insecure-lock-mode-hook '(insecure-lock-blank-screen insecure-lock-posframe))
, with some tweaks to insecure-lock-blank-screen-face
and insecure-lock-posframe-parameters
Add the following lines to your init.el
(require 'insecure-lock)
(insecure-lock-run-idle 300) ;; Lock screen after 300 seconds
(require 'posframe)
(setq 'insecure-lock-mode-hook '(insecure-lock-blank-screen insecure-lock-posframe)) ;; Enable date time display
Note that currently insecure-lock
is not very robust against errors from modules. To avoid hanging your Emacs session because of misconfiguration, it’s strongly advised to try your new configurations in a separate Emacs instance before using it in your main Emacs session!
If set, intercept input events and require login password to unlock. Otherwise unlock with any key stroke, acting more like a screen saver.
You can turn on screen lock “modules” by adding functions to this variable. The default value is (insecure-lock-blank-screen)
.
The order of modules matters! For example, usually you want to put insecure-lock-posframe
after the rest so that the posframe doesn’t get blanked/redacted.
Available “modules” (in fact just plain functions):
insecure-lock-blank-screen
- Display a blank buffer without modeline in place of any displaying buffers/windows.
insecure-lock-redact
- Available only if the
redacted
package is loaded. Turn onredact-mode
and disable mode line on any displaying buffer. insecure-lock-posframe
- Available only if the
posframe
package is loaded. Display a posframe to show some status. This can be customized by:insecure-lock-posframe-parameters
- Parameters to the posframe.
insecure-lock-posframe-update-function
- Function to populate the posframe. The default one,
insecure-lock-posframe-default-update-function
, shows current time and date in two lines, padded and centered. It’s a good starting point for writing your own snippet!
A primary goal for insecure-lock
is to be composable and extensible. It should be quite easy to get hands on extending insecure-lock
. Start Writing your module for your own amusement! And contribute to spread the joy!
A minimal example of a insecure-lock
module:
(defvar blackout--saved-background-color nil)
(defun blackout ()
(if insecure-lock-mode
(progn
(setq blackout--saved-background-color (face-background 'default))
(set-background-color "black"))
(set-background-color blackout--saved-background-color))
You can enable it via (add-hook 'insecure-lock-mode-hook 'blackout)
. This sets Emacs background color to black when screen is locked, and recover the original background color when unlocked.
In general, a module look like:
(defun my-module ()
(if insecure-lock-mode
'(code to setup when entering screen lock)
'(code to clean up when leaving screen lock))
insecure-lock-update-functions
- Add periodic update functions for your module to this variable! The
insecure-lock-update-timer
will call functions in this list everyinsecure-lock-update-timer-interval
seconds (default to 1).(defun my-module-update () '(code to update display)) (defun my-module () (if insecure-lock-mode (progn (add-hook 'insecure-lock-update-functions 'my-module-update) '(code to setup when entering screen lock)) '(code to clean up when leaving screen lock))
There’s no need to bother removing the update functions when cleanup.
insecure-lock-update-functions
will be set tonil
at the beginning of screen lock setup.