From 48eb2cf0f677ffe8cda54b6f32ff99b34f544a95 Mon Sep 17 00:00:00 2001 From: VG Date: Thu, 29 May 2025 12:40:39 +0300 Subject: [PATCH] first commitment --- 69-mounter.rules | 25 +++++++++++++++++++++++++ README.md | 13 +++++++++++++ copy.sh | 7 +++++++ sd-copy.service | 10 ++++++++++ udiskie.service | 19 +++++++++++++++++++ 5 files changed, 74 insertions(+) create mode 100755 69-mounter.rules create mode 100755 README.md create mode 100755 copy.sh create mode 100755 sd-copy.service create mode 100755 udiskie.service diff --git a/69-mounter.rules b/69-mounter.rules new file mode 100755 index 0000000..f08e9c8 --- /dev/null +++ b/69-mounter.rules @@ -0,0 +1,25 @@ +polkit.addRule(function(action, subject) { + var YES = polkit.Result.YES; + var permission = { + // required for udisks1: + "org.freedesktop.udisks.filesystem-mount": YES, + "org.freedesktop.udisks.luks-unlock": YES, + "org.freedesktop.udisks.drive-eject": YES, + "org.freedesktop.udisks.drive-detach": YES, + // required for udisks2: + "org.freedesktop.udisks2.filesystem-mount": YES, + "org.freedesktop.udisks2.encrypted-unlock": YES, + "org.freedesktop.udisks2.eject-media": YES, + "org.freedesktop.udisks2.power-off-drive": YES, + // required for udisks2 if using udiskie from another seat (e.g. systemd): + "org.freedesktop.udisks2.filesystem-mount-other-seat": YES, + "org.freedesktop.udisks2.filesystem-unmount-others": YES, + "org.freedesktop.udisks2.encrypted-unlock-other-seat": YES, + "org.freedesktop.udisks2.encrypted-unlock-system": YES, + "org.freedesktop.udisks2.eject-media-other-seat": YES, + "org.freedesktop.udisks2.power-off-drive-other-seat": YES + }; + if (subject.isInGroup("my-group-id")) { + return permission[action.id]; + } +}); \ No newline at end of file diff --git a/README.md b/README.md new file mode 100755 index 0000000..e026d6c --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# Automagic SD card import + +I'll most likely forget this, so I'll have this documentation available for later use. + +But tl;dr this is for no GUI automount of SD card, run copy and umount automagically. + +Requires following packages: `udiskie`, `udisks2` + +- polkit-rule goes to polkit folder, say `/etc/polkit-1/rules.d/69-mounter.rules` on Debian based polkitted things +- service units go to `/usr/lib/systemd/system` and change the user on udiskie.service +- copy file goes where ever the files are (edit the unit sd-copy and script) +- no udev bullshit required (yay) + diff --git a/copy.sh b/copy.sh new file mode 100755 index 0000000..4a48545 --- /dev/null +++ b/copy.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +rsync -r /media/whateverthesd-cardidis/DCIM/* /home/whoever/pics + +echo "import finished at $(date)" >> /var/log/sd-import.log + +udiskie-umount /media/whateverthesd-cardidis \ No newline at end of file diff --git a/sd-copy.service b/sd-copy.service new file mode 100755 index 0000000..4c20506 --- /dev/null +++ b/sd-copy.service @@ -0,0 +1,10 @@ +[Unit] +Description=Trigger to copy files from camera SD to Photoprism +Requires=media-whateverthesd\x2dcardidis.mount +After=media-whateverthesd\x2dcardidis.mount + +[Service] +ExecStart=/home/whereverthethingis/copy.sh + +[Install] +WantedBy=media-whateverthesd\x2dcardidis.mount \ No newline at end of file diff --git a/udiskie.service b/udiskie.service new file mode 100755 index 0000000..8630311 --- /dev/null +++ b/udiskie.service @@ -0,0 +1,19 @@ +[Unit] +Description=udiskie automagic mounter +Wants=udisks2.service +After=udisks2.service +Documentation=man:udiskie + +[Service] +User=whoever +Group=whoever +ExecStart=/usr/bin/udiskie +ExecReload=/bin/kill -s HUP $MAINPID +StandardOutput=syslog +NoNewPrivileges=true +MemoryDenyWriteExecute=true +ProtectSystem=true +PrivateTmp=true + +[Install] +WantedBy=multi-user.target \ No newline at end of file