diff --git a/utils/keepassx-kwallet b/utils/keepassx-kwallet new file mode 100755 index 00000000..7fcb0af6 --- /dev/null +++ b/utils/keepassx-kwallet @@ -0,0 +1,35 @@ +#!/bin/bash + +PROG="$(basename $0)" + +function daemon_main { + # open kdewallet + handle=$(qdbus org.kde.kwalletd5 /modules/kwalletd5 org.kde.KWallet.open kdewallet 0 "$PROG") + while [[ true != $(qdbus org.kde.kwalletd5 /modules/kwalletd5 org.kde.KWallet.isOpen kdewallet) ]]; do + sleep 1 + done + + # fetch KeePass database passwords from kdewallet + declare -A DBs + ### change the path to suit your installation ### + for DBPATH in ~/.keepassx/*.kdbx; do + DBs[$DBPATH]=$(qdbus org.kde.kwalletd5 /modules/kwalletd5 org.kde.KWallet.readPassword "$handle" "Passwords" "$DBPATH" "$PROG") + done + + # launch keepassx + IFS=$'\n\n\n' + keepassx --pw-stdin "${!DBs[@]}" <<<"${DBs[*]}" & + + # done with kdewallet + qdbus org.kde.kwalletd5 /modules/kwalletd5 org.kde.KWallet.close "$handle" "false" "$PROG" +} + +if [[ '-d' = "$1" ]]; then + exec >&~/tmp/$PROG.log + set -vx + daemon_main +else + cd / + daemon_main &/dev/null & + disown +fi