6

I want to create a daemon, which would fire up a shell script in the background every time I unlock the screen on my ubuntu. I managed to create such script according to answer to related question: run-script-on-screen-lock-unlock. And it works well in terminal window. But now I want to create a daemon from that and I didn't get any luck yet.
Any suggestions?

lompy
  • 63

2 Answers2

7

Based on https://askubuntu.com/questions/150790/how-do-i-run-a-script-on-a-dbus-signal

#!/bin/bash

interface=org.gnome.ScreenSaver
member=ActiveChanged

dbus-monitor --profile "interface='$interface',member='$member'" |
while read -r line; do
    echo $line | grep ActiveChanged && your_script_goes_here
done

Just stick that in /etc/init.d/monitor-for-unlock, make it executable, and then make a soft link in rc2.d

chmod +x /etc/init.d/monitor-for-unlock
cd /etc/rc2.d
ln -s /etc/init.d/monitor-for-unlock .
  • 1
    What exactly we are making link for in /etc/rc2.d? Is it autoload directory? Didn't quite worked for my ubuntu. But when added /etc/init.d/monitor-for-unlock start to Startup Applications worked as charm. Great response time, thanks! – lompy Jun 20 '13 at 16:04
  • Here's a conversation about rc2.d (System V init process) versus Ubuntu's upstart system: http://superuser.com/questions/151330/ubuntu-control-the-init-startup – Nate from Kalamazoo Jun 20 '13 at 16:44
  • any idea how to make it work with Unity? this is failing: ssudo dbus-monitor --profile "interface='com.canonical.Unity',member='Locked'" where Locked is about "com.canonical.Unity.Session.Locked", even if I use sudo... – Aquarius Power Aug 02 '14 at 04:24
0

There's already such a daemon in the system - upstart, you only need to make a session job for it.

description "some job description"
start on desktop-unlock
script
        /path/to/your/executable
end script
  • Can you please elaborate? How do you create a session job for it? what is upstart? systemctl does not know any information regarding upstart.service – brett Jan 08 '20 at 13:37
  • @brett Since it is now in maintenace mode, you might need to install it separately. It used to be Ubuntu's "event-based cron on steroids" so to say. Session jobs are single user-specific tasks. Like stuff you'd get with crontab -e. You create a .conf file with content like in this answer and put it in one of places listed here: http://upstart.ubuntu.com/cookbook/#session-job – Oleg V. Volkov Feb 11 '20 at 16:55