2

I need a script for when I press Ctrl + Alt + L (Lock screen) I blocked or shut down all usb's and shut down all my network interfaces like eth0.

When I Unlock, everything should be back to normal. I tried

echo suspend> / sys / bus / usb / devices / usb1 / power / level 

.. but I could not ..

And also

dbus-monitor --session "type = 'signal', interface = 'org.gnome.ScreenSaver' 

to interact with the screen but could not too.

Is there any better method? Or something I can study to create this script?

Jacob Vlijm
  • 83,767
nullXOR
  • 21
  • better approach would be to bind a script to the ctrl+alt+L shortcut , which will do whatbyou want and only then lock the screen. I would do that but lately i am short on time. Perhaps someone else can do this. If not, i might come back and write one – Sergiy Kolodyazhnyy Nov 29 '16 at 00:53
  • I just want a script for when I lock the screen, disable all USB ports and my interfaces like eth0. I tried to use something like, dbus-monitor --session "type = 'signal', interface = 'org.gnome.ScreenSaver'" | While read x; of Case "$ x" in * "Boolean true" * echo suspend> / sys / bus / usb / devices / usb1 / power / level ......

    But it does not work

    – nullXOR Nov 29 '16 at 02:12
  • @nullXOR posted my answer. Please mention if all is clear. – Jacob Vlijm Nov 29 '16 at 09:20

1 Answers1

2

How to run scripts or commands on changes in lock state

According to this answer on U&L, you tried an outdated dbus command. For 14.04 and up, you can use:

dbus-monitor --session "type='signal',interface='com.ubuntu.Upstart0_6'" | \
(
  while read X; do
    if [[ "$X" =~ desktop-lock ]]; then
      SCREEN_LOCKED;
    elif [[ "$X" =~ desktop-unlock ]]; then
      SCREEN_UNLOCKED;
    fi
  done
)

which works fine on my system (16.04).
(Thanks for improvements by @Serg and @muru)

Of course you need to replace SCREEN_LOCKED and SCREEN_UNLOCKED by the commands or scripts you want to run on changes in lock state, but tested it, and it works fine.

Jacob Vlijm
  • 83,767
  • If you're using bash, you can simplify it to if [[ $X =~ desktop-lock ]]; then .. (and similarly for the other one). And maybe use while read X instead of while true (does the read ever fail other than when the dbus-monitor process exits?) – muru Nov 30 '16 at 06:20
  • 1
    doesn't seem to work on ubuntu 17.04. The ouput of dbus-monitor --session "type='signal',interface='com.ubuntu.Upstart0_6'" is signal time=1497336035.520628 sender=org.freedesktop.DBus -> destination=:1.140 serial=2 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameAcquired string ":1.140" signal time=1497336035.520706 sender=org.freedesktop.DBus -> destination=:1.140 serial=4 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameLost string ":1.140", then nothing when I lock or unlock – maxbellec Jun 13 '17 at 06:44