Blog

passmenu をカスタマイズしてみました

March 03, 2020

パスワードマネージャーには Pass / password-store を使っていて、 GUI 環境での入力には passmenu を使っているのですが、 passmenu のデフォルト動作は クリップボードへのコピーで、 直接入力させるには --type オプションを付ける必要があり少し面倒だったので、動作をカスタマイズしてみました。

オリジナルのソースは contrib/dmenu にあります。 pass は全体がそうなのですが、中身はシンプルな bash スクリプトなので、好きなように修正してしまいます。

#!/usr/bin/env bash

shopt -s nullglob globstar

line=1
if [[ "$1" =~ ^[0-9]+$ ]]; then
  line=$1
  shift
fi

prefix=${PASSWORD_STORE_DIR-~/.password-store}
password_files=( "$prefix"/**/*.gpg )
password_files=( "${password_files[@]#"$prefix"/}" )
password_files=( "${password_files[@]%.gpg}" )

password=$(printf '%s\n' "${password_files[@]}" | dmenu)

[[ -n $password ]] || exit

pass $@ "$password" | tail -n+$line | head -n1 | tr -d '\n' | xdotool type --clearmodifiers --file -
  • 直接 type して欲しいときの方が多いのでデフォルト動作を type に変更 (コピーしたかったら pass コマンドを使うので、というか直接 type させる以外する必要ない気が……)
  • 複数行に対応するため、1つめの引数が数字であればその行を出力するように変更
  • otp なども入力できるように、以降の引数は dmenu ではなく pass に渡すように変更

などをしました。

dmenu にオプション渡してどうしたいんだろう……と思ってしまいました。 dmenu に慣れていないだけなんでしょうか? それはともかく、パスワードを pass にがっつり依存してしまっているので、このスクリプトでかなり便利になりました。

pass was written by Jason A. Donenfeld of zx2c4.com and is licensed under the GPLv2+

contrib なのでライセンス違うような気もしますがそうでもない気もします。contrib だから違うってことはないか。はい。