Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save nachtmaar/f85b26e924aaf2bc80132f16105427e5 to your computer and use it in GitHub Desktop.
Save nachtmaar/f85b26e924aaf2bc80132f16105427e5 to your computer and use it in GitHub Desktop.
KeePassXC Auto-Type on iTerm2/zsh/Tmux

KeePass Auto-Type on iTerm2/zsh/Tmux

This is a very quick tutorial on how to auto-type passwords from KeePassXC to a CLI application. The document is mostly for myself to remember how to do it, but feel free to add your comments and improvements.

Context

I use KeePassXC as my main password manager. About a couple of months ago I discovered I don't need to copy passwords from KeepassXC via clipboard. I found out about the Auto-Type feature in the KeepassXC User Guide. According to the user guide, Auto-Type "acts like a virtual keyboard to populate data from your entries directly into the corresponding websites or applications that you use".

This is great for websites since I don't need any browser plugin. Instead I just press CTRL-Option-A (in my case) and let the user and password fields be auto-completed using KeepassXC. in order to do this correctly, you can configure a Window-Association. This is usually the title of a website as far as I know.

Recently I wanted to have this password auto-type feature also be available on the shell. So I started to research. I use iTerm2 as my terminal app on Mac OS X. My default shell is zsh and I also use tmux. So quite a few layers to reconfigure in order to make this work, but luckily it only requires a few changes.

My concrete use case is the following:

  • I do have a shell script ./my-backup-script.sh to start my backups (based on restic)
  • restic asks for a password to encrypt the backup

So instead of copy pasting this from keePassXC, I wanted the password to be auto-typed.

Demo

asciicast

iTerm2 Settings

In order to make this work, I changed the title of iTerm2 to the current executed command.

For this you need to select Job (Name) as Title in iTerm2 (go to Preferences->Profiles->Genereal->Title). Also select the Applications in terminal may change the title option.

Then you type a command in iTerm2, e.g. ./my-backup-script.sh this will become the title of iTerm2. You can now configure a custom Window Association in KeepassXC using the name of the script ./my-backup-script.sh.

KeepassXC Auto-Type Example

The following picture shows how I configured Auto-Type to be used for the ./my-backup-script.sh script.

KeePassXC Auto-Type Configuration )

Tmux Integration

So far so good, but I want this to work on tmux as well. So I need a way to pass the name of the current executable from tmux to iTerm2. For this we can use the following option:

set-option -g set-titles on
set-option -g set-titles-string "#T"

This sets the terminal title to the tmux pane title. To set this persistently, configure this in your tmux config (~/.tmux.conf):

# source: https://superuser.com/questions/1098077/how-to-keep-terminal-window-title-in-sync-with-tmux-window
set -g set-titles on
# use the tmux pane_title
set -g set-titles-string "#T"

Zsh Config

Next we write the tmux pane title using printf. We do this before a new command is going to be executed via a zsh hook preexec. Put this into yout zshrc (~.zshrc)

# Always set the execed command as tumx pane title
# source: https://stephencharlesweiss.com/zsh-hooks
autoload -Uz add-zsh-hook
add-zsh-hook preexec custom_func
function custom_func() {
  # https://stackoverflow.com/questions/9747952/pane-title-in-tmux
  printf '\033]2;%s\033\\' $1
}

Short summary:

  • Tmux pane title is used to set the iTerm2 title
  • Tmux pane title is set by printf command using the preexec zsh hook. $1 is the name of the to be executed command.

This it it :)

See Also

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment