File: psd-suspend-sync

package info (click to toggle)
profile-sync-daemon 7.00-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 316 kB
  • sloc: sh: 715; makefile: 70
file content (44 lines) | stat: -rw-r--r-- 1,392 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#!/bin/bash

dbus_interface="org.freedesktop.login1"
dbus_member="PrepareForSleep"

# system suspends when 'PrepareForSleep' signal is 'true':
# ... /org/freedesktop/login1: org.freedesktop.login1.Manager.PrepareForSleep (true,) ...
# system resumes when 'PrepareForSleep' signal is 'false'
# ... /org/freedesktop/login1: org.freedesktop.login1.Manager.PrepareForSleep (false,) ...
dbus_process_sleep() {
  local line
  while read -r line; do
    if [[ "$line" =~ $dbus_member ]]; then
      if [[ "$line" =~ 'true' ]]; then
        ### SUSPEND ###
        logger '[psd-suspend-sync] Issuing suspend-sync request...'
        /usr/bin/profile-sync-daemon suspend-sync
        # the lock will be released now
        break
      elif [[ "$line" =~ 'false' ]]; then
        ### RESUME ###
        logger '[psd-suspend-sync] re-taking inhibit lock...'
        /usr/bin/profile-sync-daemon recycle-inhibit-lock
        break
      fi
    fi
  done
}

exec {gdbus_fd}< <(gdbus monitor --system --dest "$dbus_interface")
gdbus_PID=$!
trap 'exec {gdbus_fd}<&-; kill "$gdbus_PID"' EXIT

{
  # delay sleep until browser profiles are written to disk
  systemd-inhibit --mode="delay" --what="sleep" \
    --who="profile-sync-daemon" --why="psd resync on suspend" \
    cat | dbus_process_sleep

  # detect resume and restart the entire process
  dbus_process_sleep
} <&$gdbus_fd

# vim:set ts=2 sw=2 et: