Проблема

Проблема

Я столкнулся с ужасной проблемой в своей системе. Мой менеджер входа в систему (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и изменить его в соответствии с вашими требованиями. Исходный файл тогда будет полностью проигнорирован.

Связанный контент