Мне трудно настроить pinentry для Emacs для работы с аутентификацией (скажем, для github). Использование GPG и pinentry для подписания коммитов уже работает. Я использую ma git внутри emacs для контроля версий, и каждый раз, когда я фиксирую что-либо, в минибуфере выскакивает что-то, вводится пароль, и коммит подписывается. Все хорошо.
Однако я также использую GPG для аутентификации. I setup и подраздел аутентификации с GPG и настройка S SH для его использования. Если я делаю это из tty, то это тоже работает. Просто не изнутри Emacs. Проблема связана с $GPG_TTY
env var. Если я попытаюсь что-то сделать sh в GH, то в минибуфере не появится булавка. Вместо этого он ждет и в конце концов говорит, что у меня нет разрешения.
Я должен упомянуть, что я использую emacs, точнее, EXWM в качестве моего оконного менеджера. Если я затем выйду из emacs, я увижу диалог pinentry-encurses в моем TTY. Если у меня будет другой терминал, открытый в emacs, во время нажатия на него откроется диалоговое окно pinentry-ncurses в этом терминале вместо того, чтобы вызвать pinentry.el в минибуфере.
Я гуглял и пробовал разные подходы в течение нескольких дней теперь без удачи.
~ / .gnupg / gpg-agent.conf:
allow-emacs-pinentry
allow-loopback-pinentry
default-cache-ttl 600
max-cache-ttl 7200
enable-ssh-support
~ / .gnupg / gpg.conf:
use-agent
~ /.bash_profile:
# GPG related
export SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket)
export GPG_TTY=$(tty)
#gpgconf --launch gpg-agent
Моя конфигурация pinentry в emacs:
;; Enable loopback so that pinentry will pop up in emacs
(setq epa-pinentry-mode 'loopback)
(pinentry-start)
;; Update the TTY for gpg-agent
;(setenv "GPG_TTY" "/dev/pts/0")
(shell-command "gpgconf --launch-agent")
(shell-command "gpg-connect-agent updatestartuptty /bye >/dev/null")
Я попытался установить $GPG_TTY
внутри emacs вручную, как вы можете видеть, но безуспешно. Меня сбивает с толку, что это будет работать только для подписания коммитов, но не для аутентификации.