pinentry-mac — это графическое окно для ввода паролей GPG на macOS; без него GPG часто «молчит» или падает при запросе пароля. Ниже — пошаговая инструкция по установке с пояснением смысла каждого шага.
1. Что такое pinentry-mac и зачем он нужен
- pinentry — это небольшая программа, с которой gpg-agent обменивается командами по простому протоколу, чтобы показать окно ввода PIN/пароля.
- pinentry-mac — вариант pinentry с нативным Cocoa-интерфейсом под macOS, обеспечивающий привычное для системы графическое окно.
Зачем это нужно:
- GPG сам по себе не показывает графические диалоги; за это отвечает внешняя программа pinentry, которую выбирает gpg-agent.
- Если gpg-agent не знает, какой pinentry использовать (или использует текстовый вариант в неподходящей среде), запрос пароля может не появиться, и подпись/расшифровка будут проваливаться.
2. Установка pinentry-mac через Homebrew
Ниже предполагается, что Homebrew уже установлен. Если его нет, можно установить по инструкции из официального скрипта, но это выходит за рамки вопроса.
Установите пакет:
brew install pinentry-macУбедитесь, что бинарник установлен:
which pinentry-mac
Почему это важно:
- gpg-agent требует абсолютно точный путь к программе pinentry; если путь неправильный или бинарника нет, запрос пароля не появится и операции GPG будут падать.
- Различие директорий /usr/local и /opt/homebrew на Intel и Apple Silicon прямо отмечено в руководствах по настройке GPG на macOS.
3. Настройка gpg-agent для использования pinentry-mac
По умолчанию gpg-agent может выбирать другой pinentry (например, встроенный текстовый) или вообще не иметь корректной настройки, поэтому нужно явно указать pinentry-mac.
Создайте каталог конфигурации GnuPG (если его нет):
mkdir -p ~/.gnupg chmod 700 ~/.gnupgСоздайте или отредактируйте файл
~/.gnupg/gpg-agent.conf, прописав путь к pinentry-mac. Самый надёжный способ — использоватьbrew --prefix:echo "pinentry-program $(brew --prefix)/bin/pinentry-mac" > ~/.gnupg/gpg-agent.confили, если хотите добавить строку, а не перезаписывать файл:
echo "pinentry-program $(brew --prefix)/bin/pinentry-mac" >> ~/.gnupg/gpg-agent.confПерезапустите или перезагрузите gpg-agent, чтобы он прочитал новую конфигурацию:
gpg-connect-agent reloadagent /bye
- Команда gpg-connect-agent reloadagent /bye описана в руководствах по настройке GPG на macOS как способ применить изменения gpg-agent.conf без выхода из системы.
- Если этого не сделать, gpg-agent может продолжать использовать предыдущую конфигурацию, и новые настройки pinentry не сработают до следующего запуска агента.
Почему это важно:
- Без
pinentry-programgpg-agent может автоматически выбрать другой pinentry (например, curses-версию), что приведёт к неудобствам или ошибкам в GUI-среде macOS. - Явное указание пути гарантирует, что будет использоваться именно графический pinentry-mac, а не что-то ещё.
4. Проверка работы pinentry-mac
После установки и настройки нужно убедиться, что именно pinentry-mac отвечает на запросы gpg-agent.
Прямая проверка pinentry:
echo GETPIN | pinentry-macПроверка через GPG (если у вас уже есть ключ):
echo "test" | gpg --clearsign
Почему это важно:
- Проверка через
echo GETPIN | pinentryрекомендована для диагностики, когда не появляется ожидаемое диалоговое окно. - Подпись или расшифровка — реальный сценарий использования; если здесь появляется окно pinentry-mac, значит связка gpg-agent ↔ pinentry настроена правильно.
5. Дополнительные настройки и советы
Эти пункты не обязательны, но полезны для удобства и безопасности.
Интеграция с macOS Keychain:
pinentry-mac может предложить сохранить пароль в системной связке ключей, чтобы не вводить его каждый раз при подписи/расшифровке.
Использование с git commit signing:
Многие инструкции по подписи git-коммитов на macOS включают обязательную установку pinentry-mac для корректного окна ввода пароля при
git commit -S.Альтернативы и расширения:
Существуют альтернативные реализации, например pinentry-touchid, которые используют Touch ID, но они прямо требуют установленный pinentry-mac и базовую корректную конфигурацию gpg-agent.
Если нужен пример полной конфигурации для git (gpg.program, user.signingkey и т.п.) или для работы с YubiKey, можно уточнить сценарий использования, и будут приведены отдельные короткие инструкции.