我使用的是 Fedora 24 (amd64),它运行 GNOME 3/GNOME Shell 作为桌面环境,使用 Wayland 作为显示服务器,使用 SystemD 作为 init。非常标准,开箱即用,这就是 Fedora 24 的发布方式。
我之前的发行版仍然使用 X,所以我在 /etc/X11/Xsession.d/autostart 中有一个名为 90-gpg-agent 的脚本,它有条件地启动 gpg-agent 或获取其导出的变量,使它们可用于启动的图形程序。这使得像 unison-gtk 这样的程序拥有正确的SSH_AUTH_SOCK
环境变量,这样它们就可以使用 gpg-agent 作为 SSH 代理。 bash 会话中运行的任何内容都只会使用我的 .bashrc 中的环境变量,但图形应用程序需要将其导出以供访问。
Wayland/GNOME/SystemD 是否有等效的工具可以导出这些环境变量并将它们提供给在该显示服务器+桌面环境中启动的应用程序?
答案1
尝试systemctl --user import-environment SSH_AUTH_SOCK
在 中的脚本中使用/etc/X11/xinit/xinitrc.d/
。查看一下/etc/X11/xinit/xinitrc.d/50-systemd-user.sh
以供参考。
答案2
只需在您的 gpg 代理中启用 ssh 支持 – 添加行enable-ssh-agent
–~/.gnupg/gpg-agent.conf
然后注销(然后重新登录)。
此设置由 选取/etc/X11/Xsession.d/90gpg-agent
。
问题是这仅适用于 X11 程序 - 本机 Wayland 客户端不受影响。要解决这个问题,有两个选项,具体取决于gpgconf --list-dirs agent-ssh-socket
打印的内容:
如果它是固定路径,请创建一个文件
.config/environment.d/ssh.conf
并添加该输出:SSH_AUTH_SOCK=/run/user/XXX/gnupg/S.gpg-agent.ssh
或
gpgconf
打印时发生的任何其他事情。如果您下次登录时它是位于其他位置的临时文件,请将这些行添加到您的
.bashrc
(或您正在使用的任何 shell 的等效项)中:if [ -z "$SSH_AUTH_SOCK" ] ; then export SSH_AUTH_SOCK="$(gpgconf --list-dirs agent-ssh-socket)" fi dbus-update-activation-environment --systemd SSH_AUTH_SOCK
这仅适用于 shell 以及在第一个 shell 之后启动的其他 Wayland 程序,但这应该足够了。
答案3
有点太晚了,但这可能对其他人有帮助。
根据Gnome 密钥环 SSH 代理 Wiki 页面您可以在 Gnome 密钥环中禁用 SSH 代理支持。
以下是从该来源复制并粘贴的相关信息:
作为系统分销商或用户,如果您使用其他 SSH 代理(例如
ssh-agent
OpenSSH 附带的),您可能需要禁用 GNOME Keyring 中的 SSH 代理,以防止 SSH 使用它而不是您首选的 SSH 代理。有多种方法可以禁用 GNOME 密钥环 SSH 代理:
- 使用“启动应用程序”capplet(即:
gnome-session-properties
)并禁用“SSH Key Agent”启动程序。gnome-keyring
无需 SSH 支持即可构建。使用以下配置选项$ ./configure --disable-ssh-agent
- 如果您手动启动
gnome-keyring
或从脚本启动,则可以使用该--components
选项来排除启动 SSH 支持。$ gnome-keyring-daemon --components keyring,pkcs11