我的系统面临着一个严重的问题。我的登录管理器 (LightDM) 正在成功登录时启动 gnome-keyring-daemon 并按预期解锁我的密钥环(编辑:一切都通过 PAM)。
问题是,我只用一个组件启动 gnome-keyring-daemon:secrets
,但我需要所有这些:pkcs11
、secrets
、ssh
和gpg
。我不知道为什么后者不是默认值,我也不知道是否应该将此报告给包维护者。
该文件/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,ssh
export
请注意,由于其 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
对于每个directory
inXDG_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
并根据您的要求进行修改。原始文件将被完全忽略。