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

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

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

答案1

last命令列出了系统过去成功的登录记录。这些信息存储在文件中/var/log/wtmpgdm自 3.17.2 版起用于对用户列表进行排序。

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

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

在 Ubuntu Desktop 20.04.3 和 21.04 中测试

答案2

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

您可以按照以下方式操作:

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

  2. (如果需要)安装expect

    sudo apt install expect
    
  3. 切换到超级用户并前往以下位置/root以确保清洁:

    sudo su 
    cd ~
    
  4. 创建一个将以给定帐户登录的脚本。在本例中,我们将其命名为logins.sh(但您可以随意命名):

    vi logins.sh
    

    笔记:可以使用任何文本编辑器。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
    

    笔记:请务必{hostname}与您的计算机主机一起替换。

    保存文件并退出。

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

    chmod +x logins.sh
    
  7. 测试一下:

    ./logins.sh nozomi superSecretPassword\!123
    

    笔记:除非你和我的狗同名,否则一定要nozomi使用正确的帐户名和superSecretPassword\!123正确的密码进行更改。如果你的密码包含 bash 可能误解的字符(例如)!,请务必使用 对其进行转义\

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

  8. 验证这添加了一条记录到/var/log/wtmp

    last
    

    你应该看到类似这样的内容:

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

    for i in {1 .. 999}; do /root/logins.sh nozomi superSecretPassword\!123; done
    

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

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

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

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

答案3

原因可能是您的gdm配置可能不包括所有用户。

/etc/gdm3/custom.conf此行为曾经在部分[greeter]( )中配置Include=- 但这似乎不再起作用(请参阅gdm 忽略 /etc/gdm/custom.conf 排除用户列表)。

这可能是因为azrdevGDM3 将用户视为系统帐户,因此根本不显示在用户列表中,或者系统帐户被错误地归类为非系统帐户,因此位于列表顶部。

如果是这种情况,您可以添加一个名为的文件/var/lib/AccountsService/users/username并更改其值

[User]
SystemAccount=true

从 GDM 欢迎程序中删除该用户。

相关内容