
Estoy enfrentando un problema feo con mi sistema. mi administrador de inicio de sesión (LightDM) está iniciando gnome-keyring-daemon al iniciar sesión correctamente y desbloqueando mi llavero como debería (EDITAR:Todo vía PAM).
La cuestión es que inicié gnome-keyring-daemon con un solo componente: secrets
, pero necesito todos estos: pkcs11
, secrets
, ssh
y gpg
. No sé por qué este último no es el predeterminado, tampoco sé si debo informar esto al responsable del paquete.
El archivo /usr/share/dbus-1/services/org.freedesktop.secrets.service
define cómo debe ejecutarse gnome-keyring-daemon:
[D-BUS Service]
Name=org.freedesktop.secrets
Exec=/usr/bin/gnome-keyring-daemon --start --foreground --components=secrets
Podría editarlo en Emacs y el problema se resolvió, pero eso está sucio y mis cambios desaparecerán para la próxima actualización del paquete gnome-keyring.
Entonces, la pregunta es: ¿Cómo cambio la Exec
línea de ese servicio evitando que se pierda en la próxima actualización del sistema? ¿Existe alguna forma de habilitar servicios personalizados y deshabilitar los servicios que vienen de forma predeterminada?
Los paquetes relevantes y sus versiones instaladas en mi 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
Respuesta1
Ok, encontré una manera de resolver este problema. Esto no aborda mi pregunta directamente, pero resuelve el problema que me impulsó a preguntar aquí.
El problema
tal como estaban las cosas, gnome-keyring no desbloqueaba mis claves GPG, por lo que me pedían la contraseña de mi clave GPG cada vez que iniciaba sesión (porque Emacs lee un archivo .gpg para la configuración), todas mis contraseñas estaban disponibles después de iniciar sesión, por lo que offlineimap no se quejó de que no podía obtener las contraseñas de mi cuenta de correo electrónico cuando estaba trabajando.
Luego intenté iniciar gnome-keyring-daemon desde .xprofile
(que es leído por LightDM, otros DM pueden leer archivos diferentes) de esta manera:
#!/bin/bash
eval $(gnome-keyring-daemon --start --components=gpg,pkcs11,secrets,ssh)
export GPG_AGENT_INFO SSH_AUTH_SOCK
Después de reiniciar (me gusta más esto que cerrar sesión y volver a iniciar sesión) e iniciar sesión, no me pidieron la contraseña de mi clave GPG, sin embargo, offlineimap se quejaba de no poder obtener las contraseñas de mis cuentas de correo electrónico. Corriendo caballito de mar noto que no hayContraseñassección.
La solución
Después de luchar durante unas horas y probar muchas combinaciones diferentes (una de ellas, mostrando elContraseñassección pero con la carpeta ¡Iniciar sesión bloqueada!) Descubrí cuál era la solución correcta:
#!/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
Hecho. problema resuelto. El es fin, muchachos.
EDITAR:Tenga cuidado, su gnome-keyring-daemon puede emitir más variables de entorno para exportar. Para estar seguro, no necesita más que GPG_AGENT_INFO
ejecutar SSH_AUTH_SOCK
desde gnome-keyring-daemon --start --components=gpg,pkcs11,secrets,ssh
su shell y agregar más variables a export
la oración de acuerdo.
Tenga en cuenta que LightDM todavía está iniciando gnome-keyring-daemon gracias a su configuración PAM y yono lo haríaLe recomendamos que cambie dicha configuración.Sin embargo, si se encuentra insertando su contraseña después de iniciar sesión para desbloquear algo en gnome-keyring, podría deberse a que LightDM no le proporciona su contraseña. Hice esta adición al módulo LightDM PAM /etc/pam.d/lightdm
:
auth optional pam_gnome_keyring.so try_first_pass
La adición fue la try_first_pass
cosa (leyendoLa guía del administrador del sistema Linux-PAMno es mala idea), en mi sistema LightDM no tengo ese parámetro incluido.
¡Así resolví mi problema con Gnome Keyring!
Respuesta2
(respondiendo a la pregunta del título ya que es útil por sí solo)
De acuerdo con ladocumentación de D-Bus,
Si dos archivos .service en directorios diferentes ofrecen el mismo nombre de servicio, se utiliza el del directorio de mayor prioridad: por ejemplo, en el bus del sistema, los archivos .service en /usr/local/share/dbus-1/system- Los servicios tienen prioridad sobre los de /usr/share/dbus-1/system-services.
Además, según la página de manual de dbus-daemon,
En Unix, los directorios de servicios de sesión estándar son:
$XDG_RUNTIME_DIR/dbus-1/services
, siXDG_RUNTIME_DIR
está configurado$XDG_DATA_HOME/dbus-1/services
, dondeXDG_DATA_HOME
el valor predeterminado es~/.local/share
directory/dbus-1/services
para cada unodirectory
enXDG_DATA_DIRS
, dondeXDG_DATA_DIRS
el valor predeterminado es/usr/local/share:/usr/share
${datadir}/dbus-1/services
para el${datadir}
que se especificó cuando se compiló dbus, normalmente/usr/share
Entonces, en su caso, puede copiar el archivo de servicio ~/.local/share/dbus-1/services/org.freedesktop.secrets.service
y modificarlo según sus necesidades. Entonces el archivo original será ignorado por completo.