問題

問題

私のシステムで厄介な問題に直面しています。ログインマネージャ (LightDM) はログイン時に gnome-keyring-daemon を正常に起動し、キーリングのロックを解除します (編集:すべて PAM 経由です。

問題は、gnome-keyring-daemon を 1 つのコンポーネントだけで起動したのですが、、、、secretsのすべてが必要なことです。後者がデフォルトでないのはなぜかわかりませんし、パッケージのメンテナーにこれを報告すべきかどうかもわかりません。pkcs11secretssshgpg

このファイルは、/usr/share/dbus-1/services/org.freedesktop.secrets.servicegnome-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を実行すると、パスワードセクション。

ソリューション

数時間格闘し、さまざまな組み合わせを試した後(そのうちの1つは、パスワードセクションですが、フォルダーのログインがロックされています。正しい解決策がわかりました。

#!/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

終わり。 問題が解決しました。 もう終わりだよ、たくさんだよ。

編集:注意してください。gnome-keyring-daemon は、エクスポートする環境変数をさらに発行する場合があります。それ以上の環境変数が必要ないGPG_AGENT_INFOか、シェルからSSH_AUTH_SOCK実行して、文に応じて変数を追加してください。gnome-keyring-daemon --start --components=gpg,pkcs11,secrets,sshexport

LightDMはPAM設定により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のドキュメント

異なるディレクトリにある 2 つの .service ファイルが同じサービス名を提供する場合、優先度の高いディレクトリにあるファイルが使用されます。たとえば、システム バスでは、/usr/local/share/dbus-1/system-services にある .service ファイルが /usr/share/dbus-1/system-services にあるファイルよりも優先されます。

また、dbus-daemonのマニュアルページによると、

Unix では、標準のセッション サービス ディレクトリは次のとおりです。

  • $XDG_RUNTIME_DIR/dbus-1/servicesXDG_RUNTIME_DIRが設定されている場合
  • $XDG_DATA_HOME/dbus-1/servicesXDG_DATA_HOMEデフォルトは~/.local/share
  • directory/dbus-1/servicesdirectoryのそれぞれについてXDG_DATA_DIRSXDG_DATA_DIRSデフォルトは/usr/local/share:/usr/share
  • ${datadir}/dbus-1/servicesdbusがコンパイルされたときに${datadir}指定された、通常は/usr/share

したがって、あなたの場合、サービス ファイルをコピーして~/.local/share/dbus-1/services/org.freedesktop.secrets.service、要件に合わせて変更することができます。元のファイルは完全に無視されます。

関連情報