
Я столкнулся с ужасной проблемой в своей системе. Мой менеджер входа в систему (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 не жаловался на то, что не может получить пароли моей учетной записи электронной почты во время работы.
Затем я попытался запустить gnome-keyring-daemon из .xprofile
(который читается LightDM, другие DM могут читать другие файлы) следующим образом:
#!/bin/bash
eval $(gnome-keyring-daemon --start --components=gpg,pkcs11,secrets,ssh)
export GPG_AGENT_INFO SSH_AUTH_SOCK
После перезагрузки (мне это нравится больше, чем выход из системы и повторный вход) и входа в систему, у меня не был запрошен пароль ключа GPG, однако offlineimap жаловался на то, что не может получить пароли моих учетных записей электронной почты. Запустив seahorse, я заметил, что нетПаролираздел.
Решение
После нескольких часов борьбы и перепробовав множество различных комбинаций (одна из них, показывающаяПаролираздел, но с папкой «Вход заблокирован!») Я нашел правильное решение:
#!/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
или SSH_AUTH_SOCK
запустите gnome-keyring-daemon --start --components=gpg,pkcs11,secrets,ssh
из своей оболочки и добавьте больше переменных в export
предложение в соответствии с.
Обратите внимание, что LightDM все еще запускает gnome-keyring-daemon благодаря своей конфигурации PAM, и яне будетрекомендуем вам изменить такую конфигурацию.Однако, если вы обнаружили, что вводите свой пароль после входа в систему, чтобы разблокировать что-то в 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 в разных каталогах предлагают одно и то же имя службы, то используется тот, который находится в каталоге с более высоким приоритетом: например, на системной шине файлы .service в /usr/local/share/dbus-1/system-services имеют приоритет над файлами в /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
в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
и изменить его в соответствии с вашими требованиями. Исходный файл тогда будет полностью проигнорирован.