From 037cd77d521d36ddcd061d305c05c2538af5716b Mon Sep 17 00:00:00 2001 From: Jakob Odersky Date: Wed, 26 Dec 2018 10:21:13 +0100 Subject: Refactor systemd service status system --- home/.local/bin/dbusmonitor | 27 -------------------- home/.local/lib/dbusmonitor | 29 ++++++++++++++++++++++ home/.local/share/systemd/user/backup.service | 8 ++++++ home/.local/share/systemd/user/backup.timer | 12 +++++++++ home/.local/share/systemd/user/dbusmonitor.service | 9 +++++++ .../share/systemd/user/internet-metered.target | 3 +++ .../share/systemd/user/internet-unmetered.target | 3 +++ 7 files changed, 64 insertions(+), 27 deletions(-) delete mode 100755 home/.local/bin/dbusmonitor create mode 100755 home/.local/lib/dbusmonitor create mode 100644 home/.local/share/systemd/user/backup.service create mode 100644 home/.local/share/systemd/user/backup.timer create mode 100644 home/.local/share/systemd/user/dbusmonitor.service create mode 100644 home/.local/share/systemd/user/internet-metered.target create mode 100644 home/.local/share/systemd/user/internet-unmetered.target (limited to 'home/.local') diff --git a/home/.local/bin/dbusmonitor b/home/.local/bin/dbusmonitor deleted file mode 100755 index f3b3d4a..0000000 --- a/home/.local/bin/dbusmonitor +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/python3 -# dbus-monitor --system "path=/org/freedesktop/NetworkManager,interface=org.freedesktop.DBus.Properties,type=signal,member=PropertiesChanged" - -from gi.repository import GLib -import pydbus -loop = GLib.MainLoop() -systemd = pydbus.SessionBus().get(".systemd1") -nm = pydbus.SystemBus().get("org.freedesktop.NetworkManager", "/org/freedesktop/NetworkManager") - -# https://developer.gnome.org/NetworkManager/stable/nm-dbus-types.html#NMMetered -# 0 = The metered status is unknown -# 1 = Metered, the value was statically set -# 2 = Not metered, the value was statically set -# 3 = Metered, the value was guessed -# 4 = Not metered, the value was guessed -def check_metered(changed): - value=nm.Metered - if (value == 2 or value == 4): - # start unit (replace any conflicting requests that might have been - # enqueued to systemctl but not yet run) - systemd.StartUnit("unmetered-internet.target", "replace") - else: - systemd.StopUnit("unmetered-internet.target", "replace") - -nm.PropertiesChanged.connect(check_metered) -loop.run() - diff --git a/home/.local/lib/dbusmonitor b/home/.local/lib/dbusmonitor new file mode 100755 index 0000000..4e5713d --- /dev/null +++ b/home/.local/lib/dbusmonitor @@ -0,0 +1,29 @@ +#!/usr/bin/python3 +# dbus-monitor --system "path=/org/freedesktop/NetworkManager,interface=org.freedesktop.DBus.Properties,type=signal,member=PropertiesChanged" + +from gi.repository import GLib +import pydbus +loop = GLib.MainLoop() +systemd = pydbus.SessionBus().get(".systemd1") +nm = pydbus.SystemBus().get("org.freedesktop.NetworkManager", "/org/freedesktop/NetworkManager") + +# https://developer.gnome.org/NetworkManager/stable/nm-dbus-types.html#NMMetered +# 0 = The metered status is unknown +# 1 = Metered, the value was statically set +# 2 = Not metered, the value was statically set +# 3 = Metered, the value was guessed +# 4 = Not metered, the value was guessed +def check_metered(changed): + value=nm.Metered + if (value == 2 or value == 4): + # start unit (replace any conflicting requests that might have been + # enqueued to systemctl but not yet run) + systemd.StopUnit("internet-metered.target", "replace") + systemd.StartUnit("internet-unmetered.target", "replace") + else: + systemd.StopUnit("internet-unmetered.target", "replace") + systemd.StartUnit("internet-metered.target", "replace") + +nm.PropertiesChanged.connect(check_metered) +loop.run() + diff --git a/home/.local/share/systemd/user/backup.service b/home/.local/share/systemd/user/backup.service new file mode 100644 index 0000000..74e216e --- /dev/null +++ b/home/.local/share/systemd/user/backup.service @@ -0,0 +1,8 @@ +[Unit] +Description=copy home data to remote storage +Requisite=internet-unmetered.target +After=internet-unmetered.target + +[Service] +Type=simple +ExecStart=%h/bin/backup diff --git a/home/.local/share/systemd/user/backup.timer b/home/.local/share/systemd/user/backup.timer new file mode 100644 index 0000000..0843bd7 --- /dev/null +++ b/home/.local/share/systemd/user/backup.timer @@ -0,0 +1,12 @@ +[Unit] +Description=run backup script periodically +Requisite=internet-unmetered.target +After=internet-unmetered.target + +[Timer] +OnCalendar=0/2:00:00 +RandomizedDelaySec=10min +Persistent=true + +[Install] +WantedBy=internet-unmetered.target diff --git a/home/.local/share/systemd/user/dbusmonitor.service b/home/.local/share/systemd/user/dbusmonitor.service new file mode 100644 index 0000000..ff60d31 --- /dev/null +++ b/home/.local/share/systemd/user/dbusmonitor.service @@ -0,0 +1,9 @@ +[Unit] +Description=user service to listen to system dbus events + +[Service] +Type=simple +ExecStart=%h/.local/lib/dbusmonitor + +[Install] +WantedBy=default.target \ No newline at end of file diff --git a/home/.local/share/systemd/user/internet-metered.target b/home/.local/share/systemd/user/internet-metered.target new file mode 100644 index 0000000..8d840a5 --- /dev/null +++ b/home/.local/share/systemd/user/internet-metered.target @@ -0,0 +1,3 @@ +[Unit] +Description=current connection to the internet is metered +Conflicts=internet-unmetered.target \ No newline at end of file diff --git a/home/.local/share/systemd/user/internet-unmetered.target b/home/.local/share/systemd/user/internet-unmetered.target new file mode 100644 index 0000000..db8393f --- /dev/null +++ b/home/.local/share/systemd/user/internet-unmetered.target @@ -0,0 +1,3 @@ +[Unit] +Description=current connection to the internet is not metered +Conflicts=internet-metered.target \ No newline at end of file -- cgit v1.2.3