问题

问题

我的系统面临着一个严重的问题。我的登录管理器 (LightDM) 正在成功登录时启动 gnome-keyring-daemon 并按预期解锁我的密钥环(编辑:一切都通过 PAM)。

问题是,我只用一个组件启动 gnome-keyring-daemon:secrets,但我需要所有这些:pkcs11secretssshgpg。我不知道为什么后者不是默认值,我也不知道是否应该将此报告给包维护者。

该文件/usr/share/dbus-1/services/org.freedesktop.secrets.service定义 gnome-keyring-daemon 应如何运行:

[D-BUS Service]
Name=org.freedesktop.secrets
Exec=/usr/bin/gnome-keyring-daemon --start --foreground --components=secrets

我可以在 Emacs 上编辑它并解决问题,但是,这很脏,我的更改将在 gnome-keyring 包的下一次升级中消失。

那么,问题是:如何更改Exec该服务的线路,同时防止该服务在下次系统升级时丢失?有没有办法启用自定义服务并禁用默认提供的服务?

我的系统上安装的相关软件包及其版本。

$ LC_ALL=C pacman -Qi dbus gnome-keyring lightdm | egrep "(Name|Version)"
Name           : dbus
Version        : 1.8.8-1
Name           : gnome-keyring
Version        : 3.12.2-1
Name           : lightdm
Version        : 1:1.12.0-1

答案1

好的,我找到了解决这个问题的方法。这并没有直接解决我的问题,而是解决了促使我在这里问的问题。

问题

事实上,gnome-keyring 没有解锁我的 GPG 密钥,因此每次登录时都会要求我提供 GPG 密钥的密码(因为 Emacs 读取 .gpg 文件进行配置),登录后我的所有密码都可用,因此Offlineimap 并没有抱怨工作时根本无法获取我的电子邮件帐户的密码。

.xprofile然后我尝试以这种方式从(由 LightDM 读取,其他 DM 可能读取不同的文件)启动 gnome-keyring-daemon :

#!/bin/bash

eval $(gnome-keyring-daemon --start --components=gpg,pkcs11,secrets,ssh)
export GPG_AGENT_INFO SSH_AUTH_SOCK

重新启动(我最喜欢这个,而不是注销并再次登录)并登录后,我没有被要求提供我的 GPG 密钥密码,但是 Offlineimap 抱怨无法获取我的电子邮件帐户的密码。奔跑的海马 我注意到没有密码部分。

解决方案

经过几个小时的战斗并尝试了许多不同的组合(其中之一,显示了密码部分,但文件夹登录已锁定!)我找到了正确的解决方案:

#!/bin/bash

source /etc/X11/xinit/xinitrc.d/30-dbus  # You need a dbus session, duh
eval $(gnome-keyring-daemon --start --components=gpg,pkcs11,secrets,ssh)
export GPG_AGENT_INFO SSH_AUTH_SOCK

完毕。问题解决了。 el es fin, muchachos。

编辑:请注意,您的 gnome-keyring-daemon 可能会发出更多环境变量供您导出。确保您不需要更多GPG_AGENT_INFO或从 shellSSH_AUTH_SOCK运行并根据句子添加更多变量。gnome-keyring-daemon --start --components=gpg,pkcs11,secrets,sshexport

请注意,由于其 PAM 配置,LightDM 仍在启动 gnome-keyring-daemon,并且我不会建议您更改此类配置。然而,如果您发现自己在登录后输入密码来解锁 gnome-keyring 上的某些内容,可能是因为 LightDM 没有向其提供您的密码。我对 LightDM PAM 模块进行了添加/etc/pam.d/lightdm

auth       optional    pam_gnome_keyring.so try_first_pass

添加就是try_first_pass事情(阅读Linux-PAM 系统管理员指南不是一个坏主意),在我的系统 LightDM 中没有包含该参数。

这就是我解决 Gnome Keyring 问题的方法!

答案2

(回答标题中的问题,因为它本身很有用)

根据D-Bus 文档,

如果不同目录中的两个 .service 文件提供相同的服务名称,则使用优先级较高的目录中的文件:例如,在系统总线上, /usr/local/share/dbus-1/system- 中的 .service 文件服务优先于 /usr/share/dbus-1/system-services 中的服务。

另外,根据 dbus-daemon 的联机帮助页,

在 Unix 上,标准会话服务目录是:

  • $XDG_RUNTIME_DIR/dbus-1/services, 如果XDG_RUNTIME_DIR设置了
  • $XDG_DATA_HOME/dbus-1/services,其中XDG_DATA_HOME默认为~/.local/share
  • directory/dbus-1/services对于每个directoryin XDG_DATA_DIRS,其中XDG_DATA_DIRS默认为/usr/local/share:/usr/share
  • ${datadir}/dbus-1/services对于${datadir}编译 dbus 时指定的,通常/usr/share

因此,根据您的情况,您可以将服务文件复制到~/.local/share/dbus-1/services/org.freedesktop.secrets.service并根据您的要求进行修改。原始文件将被完全忽略。

相关内容