如何更改 gdm 登录屏幕中的用户顺序?

azr*_*dev 13 gdm login-screen login

我是使用 gdm 的系统上唯一频繁使用的用户,但在登录屏幕的用户列表中,我没有向上移动(由于最频繁的使用),并且我找不到手动对用户进行排序的可能性。我确认它们不是按数字 UID 排序的。同样的问题已在这里得到解答(这里还有另一个相关问题),但对于使用 consolekit 的旧系统,它同时已被 systemd-logind 和 AccountsService 取代。

Ale*_*dro 10

last命令列出了系统上过去的成功登录。此信息存储在/var/log/wtmp文件中,自版本 3.17.2 起使用该信息gdm对用户列表进行排序。

如果删除该/var/log/wtmp文件然后重新启动,用户列表将默认按字母顺序排列。下次登录后,您的用户将成为最常用的用户,从而显示在列表的顶部。

注意:如果删除该/var/log/wtmp文件,您将丢失系统的登录历史记录。您可能想要创建该文件的备份。

在 Ubuntu 桌面 20.04.3 和 21.04 中测试

  • 我认为有必要运行“last”并查看输出以检查那里发生了什么。也许另一个用户过去登录过很多次并且仍然位于顶部,或者`/var/log/wtmp`文件可能被锁定或由于某种原因没有更新。 (3认同)

mat*_*igo 5

根据 Alejandro 的答案,如果您不想删除文件,可以运行一个脚本,该脚本将“堆叠甲板”,以通过使用和命令/var/log/wtmp确保特定的排序顺序。loginexpect

您可以这样做:

  1. 打开终端(如果尚未打开)

  2. (如果需要)安装expect

    sudo apt install expect
    
    Run Code Online (Sandbox Code Playgroud)
  3. /root为了简洁起见,切换到超级用户并前往:

    sudo su 
    cd ~
    
    Run Code Online (Sandbox Code Playgroud)
  4. 创建一个将以给定帐户身份登录的脚本。对于此示例,我们将其命名为logins.sh(但您可以随意命名):

    vi logins.sh
    
    Run Code Online (Sandbox Code Playgroud)

    注意:随意使用任何文本编辑器。在这个例子中的使用vi更多的是肌肉记忆的结果,而不是明确的推荐。

  5. 将其粘贴到新文件中:

    #!/usr/bin/expect
    
    set timeout 10
    
    set user [lindex $argv 0]
    
    set password [lindex $argv 1]
    
    spawn login $user
    
    expect "Password:"
    
    send "$password\r"
    
    expect "$user@{hostname}:~$"
    
    send "exit\r"
    
    interact
    
    Run Code Online (Sandbox Code Playgroud)

    注意:一定要更换{hostname}为您电脑的主机。

    保存文件并退出。

  6. 将文件设置为可执行文件:

    chmod +x logins.sh
    
    Run Code Online (Sandbox Code Playgroud)
  7. 测试一下:

    ./logins.sh nozomi superSecretPassword\!123
    
    Run Code Online (Sandbox Code Playgroud)

    注意:除非您与我的狗同名,否则请务必nozomi使用正确的帐户名和superSecretPassword\!123正确的密码进行更改。如果您的密码包含 bash 可能会误解的字符(例如 )!,请务必使用 转义它们\

    如果一切正常,您将看到指定的帐户已登录,大约 8~10 秒后,它会自动注销。

  8. 验证这已将记录添加到/var/log/wtmp

    last
    
    Run Code Online (Sandbox Code Playgroud)

    你应该看到这样的东西:

    $ last
    nozomi   pts/1                         Thu Sep  9 00:38 - 00:39  (00:00)
    
    Run Code Online (Sandbox Code Playgroud)
  9. 运行脚本数十次、数百次或数千次:

    for i in {1 .. 999}; do /root/logins.sh nozomi superSecretPassword\!123; done
    
    Run Code Online (Sandbox Code Playgroud)

    注意:请务必替换999为您希望脚本运行的次数。请注意,该数字应大于零,并且每次运行总共需要大约 10 秒才能完成。另请务必将用户名和密码替换为您想要在顶部设置的帐户。

  10. 如果您希望在顶部附近有其他帐户,但不在顶部,请再次运行 #8 中的命令,并减少循环中的运行次数for。请注意,以每分钟大约 6 次运行的速度计算,1000 次运行将需要大约 2 小时 45 分钟的人类时间才能完成。您可能想过夜运行它。

  11. (可选)考虑修改脚本以针对多个帐户运行,并安排其每天或每周运行。

这已经在 Ubuntu 20.04 LTS 和 21.04 上进行了测试,但应该适用于(至少)18.04 以上的每个版本的 Ubuntu。