keepassxc-kdewallet 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. #!/usr/bin/env bash
  2. # fetch KeePass database passwords from kdewallet
  3. ### change the path to suit your installation or set KDBX_SEARCH before calling ###
  4. : ${KDBX_SEARCH:=~/.KeePass/*.kdbx}
  5. PROG=${0##*/}
  6. KEEPASSXC=$(which -a keepassxc | sed -e "\\,$0,d" -e 'q')
  7. daemon_main() {
  8. # open kdewallet
  9. handle=$(qdbus org.kde.kwalletd5 /modules/kwalletd5 org.kde.KWallet.open kdewallet 0 "$PROG")
  10. while [[ true != $(qdbus org.kde.kwalletd5 /modules/kwalletd5 org.kde.KWallet.isOpen kdewallet) ]]; do
  11. sleep 1
  12. done
  13. declare -A DBs
  14. for DBPATH in $(ls -r $KDBX_SEARCH); do
  15. DBs[$(realpath $DBPATH)]=$(qdbus org.kde.kwalletd5 /modules/kwalletd5 org.kde.KWallet.readPassword "$handle" "Passwords" "${DBPATH##*/}" "$PROG")
  16. done
  17. # launch real keepassxc
  18. IFS=$'\n\n\n'
  19. "$KEEPASSXC" --pw-stdin "${!DBs[@]}" <<<"${DBs[*]}" &
  20. # done with kdewallet
  21. qdbus org.kde.kwalletd5 /modules/kwalletd5 org.kde.KWallet.close "$handle" "false" "$PROG"
  22. }
  23. if [[ $1 == '-d' ]]; then
  24. exec >&~/tmp/$PROG.log
  25. set -vx
  26. daemon_main
  27. else
  28. cd /
  29. daemon_main </dev/null >&/dev/null &
  30. disown
  31. fi