Title: Automatically lock screen on OpenBSD using xidle and xlock
Author: Solène
Date: 30 July 2021
Tags: openbsd security
Description: 

# Introduction

For security reasons I like when my computer screen get locked when I'm
away and forgot to lock it manually or when I suspend the computer. 
Those operations are usually native in desktop managers such as Xfce,
MATE or Gnome but not when you use a simple window manager.

Yesterday, I was looking at the xlock man page and found
recommendations to use it with xidle, a program that triggers a command
when we don't use a computer.  That was the match I required to do
something.

# xidle

xidle is simple, you tell it about conditions and it will run a
command.  Basically, it has three triggers:

* no activity from the user after $TIMEOUT
* cursor is moved in a screen border or corner for $SECONDS
* xidle receives a SIGUSR1 signal

The first trigger is useful for automatic run, usually when you leave
the computer and you forget to lock.  The second one is a simple way to
trigger your command manually by moving the cursor at the right place,
and finally the last one is the way to script the trigger.
xidle man page, EXAMPLES section showing how to use it with xlock
xlock man page
# Using both

Reusing the example given in xidle it was easy to build the command
line.  You would have to use this in your ~/.xsession file that contain
instructions to run your graphical session.  The following command will
lock the screen if you let your mouse cursor in the upper left corner
of the screen for 5 seconds or if you are inactive for 1800 seconds (30
minutes), once the screen is locked by xlock, it will turn off the
display after 5 seconds.  It is critical to run this command in
background using "&" so the xsession script can continue.

```shell commands
xidle -delay 5 -nw -program "/usr/X11R6/bin/xlock -dpmsstandby 5" -timeout 1800 &
```

# Resume / Suspend case

So, we currently made your computer auto locking after some time when
you are not using it, but what if you put your computer on suspend and
leave, this mean anyone can open it and it won't be locked.  We should
trigger the command just before suspending the device, so it will be
locked upon resume.

This operation is possible by giving a SIGUSR1 to xidle at the right
time, and apmd (the power management daemon on OpenBSD) is able to
execute scripts when suspending (and not only).
apmd man page, FILES section about the supported operations running scripts
Create the directory /etc/apm/ and write /etc/apm/suspend with this
content:

```shell script
#!/bin/sh

pkill -USR1 xidle
```

Make the script executable with chmod +x /etc/apm/suspend and restart
apmd.  Now, you should have the screen getting locked when you suspend
your computer, automatically.

# Conclusion

Locking access to a computer is very important because most of the time
we have programs opened, security keys unlocked (ssh, gpg, password
managers etc...) and if someone put their hands on it they can access
all files.  Locking the screen is a simple but very effective way to
prevent this disaster to happen.