
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.service
define 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 Exec
linha 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_INFO
ou SSH_AUTH_SOCK
executar gnome-keyring-daemon --start --components=gpg,pkcs11,secrets,ssh
a partir do seu shell e adicionar mais variáveis à export
frase 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_pass
coisa (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
, seXDG_RUNTIME_DIR
estiver definido$XDG_DATA_HOME/dbus-1/services
, ondeXDG_DATA_HOME
o padrão é~/.local/share
directory/dbus-1/services
para cada umdirectory
emXDG_DATA_DIRS
, ondeXDG_DATA_DIRS
o padrão é/usr/local/share:/usr/share
${datadir}/dbus-1/services
para 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.service
e modificá-lo de acordo com suas necessidades. O arquivo original será completamente ignorado.