O problema

O problema

Estou enfrentando um problema feio com meu sistema. meu gerenciador de login (LightDM) está iniciando o gnome-keyring-daemon no login com sucesso e desbloqueando meu chaveiro como deveria (EDITAR:Tudo via PAM).

O problema é que eu começo o gnome-keyring-daemon com apenas um componente: secrets, mas preciso de todos estes: pkcs11, secrets, ssh, e gpg. Não sei por que este último não é o padrão, nem sei se devo reportar isso ao mantenedor do pacote.

O arquivo /usr/share/dbus-1/services/org.freedesktop.secrets.servicedefine como o gnome-keyring-daemon deve ser executado:

[D-BUS Service]
Name=org.freedesktop.secrets
Exec=/usr/bin/gnome-keyring-daemon --start --foreground --components=secrets

Eu poderia simplesmente editá-lo no Emacs e o problema seria resolvido, mas isso é sujo e minhas alterações desaparecerão para a próxima atualização do pacote gnome-keyring.

Então, a questão é: como faço para alterar a Execlinha desse serviço e evitar que ela seja perdida na próxima atualização do sistema? Existe uma maneira de habilitar serviços personalizados e desabilitar os serviços que vêm por padrão?

Os pacotes relevantes e suas versões instaladas no meu sistema.

$ 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

Responder1

Ok, encontrei uma maneira de resolver esse problema. Isso não responde diretamente à minha pergunta, mas resolve o problema que me levou a perguntar aqui.

O problema

como estava, o gnome-keyring não estava desbloqueando minhas chaves GPG, então me pediram a senha da minha chave GPG toda vez que fiz login (porque o Emacs lê um arquivo .gpg para configuração), todas as minhas senhas estavam disponíveis após o login, então offlineimap não reclamou de não conseguir obter as senhas da minha conta de e-mail durante o trabalho.

Tentei então iniciar o gnome-keyring-daemon a partir do .xprofile(que é lido pelo LightDM, outro DM pode ler arquivos diferentes) desta forma:

#!/bin/bash

eval $(gnome-keyring-daemon --start --components=gpg,pkcs11,secrets,ssh)
export GPG_AGENT_INFO SSH_AUTH_SOCK

Depois de reiniciar (eu gosto mais disso do que sair e fazer login novamente) e fazer login, não fui solicitada a senha da minha chave GPG, no entanto, o offlineimap estava reclamando por não conseguir obter as senhas das minhas contas de e-mail. Cavalo-marinho correndo percebo que não háSenhasseção.

A solução

Depois de lutar por algumas horas e tentar diversas combinações diferentes (uma delas, mostrando oSenhasmas com a pasta Login bloqueada!) descobri qual era a solução correta:

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

Feito. problema resolvido. el é fin, muchachos.

EDITAR:Cuidado, seu daemon gnome-keyring pode emitir mais variáveis ​​de ambiente para você exportar. Para ter certeza de que você não precisa de mais GPG_AGENT_INFOou SSH_AUTH_SOCKexecutar gnome-keyring-daemon --start --components=gpg,pkcs11,secrets,ssha partir do seu shell e adicionar mais variáveis ​​à exportfrase de acordo.

Observe que o LightDM ainda está iniciando o gnome-keyring-daemon graças à sua configuração PAM e eunão iriarecomendo que você altere essa configuração.No entanto, se você inserir sua senha após o login para desbloquear algo no gnome-keyring, pode ser porque o LightDM não está fornecendo sua senha para ele. Eu fiz esta adição ao módulo LightDM PAM /etc/pam.d/lightdm:

auth       optional    pam_gnome_keyring.so try_first_pass

A adição era a try_first_passcoisa (lendoGuia do administrador do sistema Linux-PAMnão é uma má ideia), no meu sistema o LightDM não tem esse parâmetro incluído.

Foi assim que resolvi meu problema com o Gnome Keyring!

Responder2

(respondendo à pergunta no título, pois é útil por si só)

De acordo comdocumentação do D-Bus,

Se dois arquivos .service em diretórios diferentes oferecerem o mesmo nome de serviço, aquele no diretório de maior prioridade será usado: por exemplo, no barramento do sistema, arquivos .service em /usr/local/share/dbus-1/system- os serviços têm precedência sobre aqueles em /usr/share/dbus-1/system-services.

Além disso, de acordo com a página de manual do dbus-daemon,

No Unix, os diretórios de serviço de sessão padrão são:

  • $XDG_RUNTIME_DIR/dbus-1/services, se XDG_RUNTIME_DIRestiver definido
  • $XDG_DATA_HOME/dbus-1/services, onde XDG_DATA_HOMEo padrão é~/.local/share
  • directory/dbus-1/servicespara cada um directoryem XDG_DATA_DIRS, onde XDG_DATA_DIRSo padrão é/usr/local/share:/usr/share
  • ${datadir}/dbus-1/servicespara o ${datadir}que foi especificado quando o dbus foi compilado, normalmente/usr/share

Portanto, no seu caso, você pode copiar o arquivo de serviço ~/.local/share/dbus-1/services/org.freedesktop.secrets.servicee modificá-lo de acordo com suas necessidades. O arquivo original será completamente ignorado.

informação relacionada