No KDE e em alguns outros ambientes de desktop, você pode ouvir em dbus pela interface org.freedesktop.ScreenSaver
.
Um script para fazer isso ficaria assim:
dbus-monitor --session "type='signal',interface='org.freedesktop.ScreenSaver'" |
while read x; do
case "$x" in
# You can call your desired script in the following line instead of the echo:
*"boolean true"*) echo SCREEN_LOCKED;;
*"boolean false"*) echo SCREEN_UNLOCKED;;
esac
done
Veja também esta questão para mais informações.