123456789101112131415161718192021222324252627282930313233343536373839 |
- #!/usr/bin/env bash
- # fetch KeePass database passwords from kdewallet
- ### change the path to suit your installation or set KDBX_SEARCH before calling ###
- : ${KDBX_SEARCH:=~/.KeePass/*.kdbx}
- PROG=${0##*/}
- KEEPASSXC=$(which -a keepassxc | sed -e "\\,$0,d" -e 'q')
- 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
- declare -A DBs
- for DBPATH in $(ls -r $KDBX_SEARCH); do
- DBs[$(realpath $DBPATH)]=$(qdbus org.kde.kwalletd5 /modules/kwalletd5 org.kde.KWallet.readPassword "$handle" "Passwords" "${DBPATH##*/}" "$PROG")
- done
- # launch real keepassxc
- IFS=$'\n\n\n'
- "$KEEPASSXC" --pw-stdin "${!DBs[@]}" <<<"${DBs[*]}" &
- # done with kdewallet
- qdbus org.kde.kwalletd5 /modules/kwalletd5 org.kde.KWallet.close "$handle" "false" "$PROG"
- }
- if [[ $1 == '-d' ]]; then
- exec >&~/tmp/$PROG.log
- set -vx
- daemon_main
- else
- cd /
- daemon_main </dev/null >&/dev/null &
- disown
- fi
|