在 i3wm 自动登录上解锁登录 gnome-keyring

erp*_*erp 11 pam ubuntu gnome-keyring systemd i3

问题

这个问题似乎被问了十亿次,但我仍然完全无法自动解锁我的登录密钥环。

背景

我沿着这些行自动登录、chvt 和 startx到 i3wm,然后启动修改后的 i3lock。我真的希望我的 gnome 登录密钥环在我登录时(或者当我解锁 i3lock 时)自动解锁,但我无法成功实施我在网上找到的任何说明。

发现

牌坊维基有关于这个我试过,但未能做一个整体的事情。我还环顾了其他各种具有类似说明的问题/答案,但无济于事。

我注意到的一件奇怪的事情是我无法通过echo $LOGINPASSWORD | gnome-keyring-daemon --unlock. journalctl报告

Jul 07 20:08:16 ERIS gnome-keyring-daemon[26585]: failed to unlock login keyring on startup
Run Code Online (Sandbox Code Playgroud)

当我打开 seahorse 手动解锁时,它报告登录密码已更改并要求我输入旧密码。journalctl 报告

Jul 07 20:08:43 ERIS gnome-keyring-daemon[26585]: fixed login keyring password to match login password
Run Code Online (Sandbox Code Playgroud)

之后我无法用我的密码再次解锁钥匙圈(幸运的是我事先做了备份)。

额外信息

这里有一些相关的/etc/pam.d/文件,希望这里没有敏感内容,哈哈(为简洁起见,删除了评论,顺序不变。请注意,我也尝试了这个 .xinitrc 位,但它没有做任何事情)。我手动添加的唯一内容是pam_gnome_keyring.so位,除了/etc/pam.d/i3lock 中的内容;其他任何东西都已经存在,无论是默认情况下还是由于其他一些包。

/etc/pam.d/login

auth       optional   pam_faildelay.so  delay=3000000
auth [success=ok new_authtok_reqd=ok ignore=ignore user_unknown=bad default=die] pam_securetty.so
auth       requisite  pam_nologin.so
session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so close
session       required   pam_env.so readenv=1
session       required   pam_env.so readenv=1 envfile=/etc/default/locale

@include common-auth
auth       optional   pam_group.so
session    required   pam_limits.so
session    optional   pam_lastlog.so
session    optional   pam_motd.so motd=/run/motd.dynamic
session    optional   pam_motd.so noupdate
session    optional   pam_mail.so standard
session    required     pam_loginuid.so
@include common-account
@include common-session
@include common-password
session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so open   
auth optional pam_gnome_keyring.so
session optional pam_gnome_keyring.so auto_start
Run Code Online (Sandbox Code Playgroud)

/etc/pam.d/common-auth

auth    [success=1 default=ignore]  pam_unix.so nullok_secure
auth    requisite           pam_deny.so
auth    required            pam_permit.so
Run Code Online (Sandbox Code Playgroud)

/etc/pam.d/common-account

account [success=1 new_authtok_reqd=done default=ignore]    pam_unix.so 
account requisite           pam_deny.so
account required            pam_permit.so
Run Code Online (Sandbox Code Playgroud)

/etc/pam.d/common-session

session [default=1]         pam_permit.so
session requisite           pam_deny.so
session required            pam_permit.so
session optional            pam_umask.so
session required    pam_unix.so 
session optional    pam_systemd.so 
Run Code Online (Sandbox Code Playgroud)

/etc/pam.d/passwd

@include common-password
Run Code Online (Sandbox Code Playgroud)

/etc/pam.d/common-password

password    [success=1 default=ignore]  pam_unix.so obscure sha512
password    requisite           pam_deny.so
password    required            pam_permit.so
password    optional    pam_gnome_keyring.so 
Run Code Online (Sandbox Code Playgroud)

/etc/pam.d/i3lock

auth required    pam_env.so
auth sufficient  pam_unix.so try_first_pass likeauth nullok
session optional pam_gnome_keyring.so auto_start
Run Code Online (Sandbox Code Playgroud)

Tru*_*udy 3

如果您为密钥环设置了任何密码,原则上不可能在自动登录时自动解锁密钥环。原因是,如果没有自动登录,PAM 将您输入的登录密码同时传递到密钥环,并且密钥环被解锁。如果执行自动登录,则没有密码可传递给密钥环,并且无法解锁密钥环。

在自动登录时自动解锁密钥环的唯一解决方案是从密钥环中完全删除密码。

  1. seahorse从软件存储库安装包:

    $ sudo apt install seahorse
    
    Run Code Online (Sandbox Code Playgroud)
  2. 启动seahorse

    $ seahorse
    
    Run Code Online (Sandbox Code Playgroud)
  3. 右键单击“登录”,然后在上下文菜单中选择“更改密码”。

  4. 输入当前密码。

  5. 输入空密码作为新密码。