如何在升級的情況下修改 dbus 服務的“Exec”行而不失去更改
我的系統面臨一個醜陋的問題。我的登錄管理器(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
好的,我找到了解決這個問題的方法。這不是直接解決我的問題,而是解決了促使我在這裡提問的問題。
問題
事實上,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 抱怨無法獲取我的電子郵件帳戶的密碼。執行 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
捐。問題解決了。他是結束,伙計們。
**編輯:**當心,您的 gnome-keyring-daemon 可能會發布更多環境變數供您導出。為了確保您不需要更多
GPG_AGENT_INFO
或從您的外殼SSH_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 解決問題的方法!