For using an external GPG program with Eclipse, GPG must be configured to use a GUI pop-up dialog for user interaction, for instance when asking for key passphrases or smartcard PINs.
Standard installations of GPG such as the distributions available from GnuPG are normally set up correctly out of the box. But in some cases, GPG on a system may be configured to ask the user for passphrases and such always via a terminal (a command window). In that case, GPG cannot be used by Eclipse.
In GPG, it is not the gpg
program itself that asks for passphrases.
Instead, GPG uses a "hidden" system program gpg-agent
to manage keys,
and that gpg-agent
program in turn uses yet another program called
pinentry for actually asking the user for input. When gpg
is invoked to sign something, it starts gpg-agent
if that isn't
running already. Once started, gpg-agent
will continue running in
the background, and will be re-used by future gpg
operations.
How GPG asks the user for passphrases is thus determined by how the gpg-agent
is configured. There are several possible reasons why gpg-agent
might
use a terminal input instead of a GUI dialog:
The gpg-agent
might have been started with environment variable
GPG_TTY being set. In that case, it may be sufficient to terminate
("kill") the currently running gpg-agent
process. When called from
Eclipse, GPG_TTY is not set, so if the Eclipse invokes
GPG the next time, the gpg-agent
should start normally and use a GUI
dialog.
If that works, figure out where in your system GPG_TTY is set and do not set it to prevent the problem from re-occurring.
The gpg-agent
may be configured to use a particular pinentry
program. This configuration is in a file gpg-agent.conf in the user's
GPG directory, on Unix at ~/.gnupg/gpg-agent.conf, on Windows at
%APP_DATA%/gnupg/gpg-agent.conf. This file may contain a configuration
for pinentry-program
, which may be set to pinentry-tty
or
pinentry-curses
. In this case, remove the line or configure a GUI
pinentry explicitly, and terminate the currently running gpg-agent
process
and optionally restart it. (Otherwise it will be restarted on the next GPG operation
automatically.)
Your system may not have a pinentry for a GUI dialog installed. This should rarely happen, and if so, only with third-party packages of GPG. Install the missing pinentry programs on your system using the system's package installation tool.
For advanced users: some people reconfigure the GPG pinentry via gpg-agent.conf
by setting pinentry-program
to a custom script that decides based on the
value of environment variable PINENTRY_USER_DATA whether to prompt via
a GUI dialog or via a terminal. If you have such a setup, make sure the script uses a
GUI dialog pinentry when the variable is not set. When called via Eclipse,
PINENTRY_USER_DATA is not set.