问题背景

大约三四天前的早晨,当我如往常一样准备开启ubuntu系统的时候,发现虽然出现了图形登录界面,但是输入正确密码后,黑屏了一小会儿后,又重新回到了登录界面——它陷入登录循环了。按Ctrl+Alt+F2~F5切换到对应数字的tty命令行界面,输入帐号密码可以正常登录,下面开启了一次很久的错误探索。

自行探索

这个问题在网上有很多的讨论,这些可能原因和解决方案在以下链接中有比较详细而集中的讨论。
AskUbuntu | ubuntu gets stuck in a login loop

引发问题的可能原因有很多,间略列举其中一些如下:

  1. 显卡驱动的问题:如果查询nvidia-smi不能正常显示信息,可能是显卡驱动产生了问题,使用sudo apt purge nvidia-*命令卸载驱动,sudo apt-get update,然后通过sudo apt-get install nvidia-driver-**(你需要的版本号)下载驱动程序,或者使用其他途径从Nvidia官网下载’.run’驱动程序到移动存储设备,然后在tty界面进行挂载、安装等操作,reboot查验。
  2. 身份验证文件的所有者错误:用户目录~/下的".Xauthority"文件用于存储xauth身份验证信息,使用指令ls -lA查看其对应的所有者,如果显示root root而非用户说明存在所有者错误,使用chown username:username .Xauthority(username替换为你的用户名)更改所有者信息,另外可能还需要对".ICEauthority"、".gconf"进行相同操作,reboot查验。
  3. 环境变量文件问题:如果在前一次关机前有过环境变量的修改,可能是这里出现了问题,登录涉及的环境变量文件可以参考以下链接。(sudo) vi检查.profile.bashrcbash_profile/etc/profile/etc/environment等文件中是否存在"括号缺半"、"PATH+写成PATH="等问题。
    知乎 | Linux文件profile、bashrc、bash_profile区别
  4. 磁盘空间不足:使用df -h查询磁盘空间:(1)sudo apt-get clean强调!千万不要轻易使用autoremove。(2)使用journalctl清理\var\log下的日志文件,journalctl --vacuum-time=1w设定保留日志周数,journalctl --vacuum-size=500M设定保留日志大小。(3)使用(sudo) du -sh *| sort -h查看命令行目录下的大小排在前十的文件夹或文件,找到可以删除的删除,清理磁盘空间。具体可以一下两个链接。
    系统极客 | Ubuntu系统释放磁盘空间的7种简单方法
    知乎 | Linix / 清理空间的几个办法
  5. gnome管理器问题:ubuntu默认使用的gnome管理器是gdm3,可以安装sudo apt-get install lightdm等其他gnome管理器,或者使用sudo apt install --reinstall lightdm/gdm3进行重新安装后,使用sudo dpkg-reconfigure lightdm/gdm3切换默认gnome管理器,reboot查验。
  6. 用户对系统临时文件"/tmp"缺乏可写权sudo chmod a+wt /tmp,reboot查验。

朋友建议

然而,在经过这一系列尝试之后我还是没能解决循环登录问题,于是发朋友圈进行了求助,也得到了一些可能的解决方案或者可能的建议:

首先谈朋友们提供的解决方案建议(上面没有尝试过的):

  1. 制作U盘ubuntu启动盘,使用boot-repair进行修复,具体过程参考以下链接:
    linuxhint | Ubuntu Boot Repair Tutorial
  2. 手动修复grub
    system76 | Repair the Bootloader
  3. 重新安装ubuntu桌面sudo apt remove ubuntu-desktopsudo apt install ubuntu-desktop,但是细想desktop这个东西肯定是很久之前就装好的,作为二进制程序用户无法修改,一直没有问题。如果循环登录的问题出在这里的话,一定是什么别的内容变化触发了其中的问题,而使用sudo apt install ubuntu-desktop= Tab出来的版本编号有一种,所以可以预想到,重新安装完之后还是不起作用。

另外也收到了朋友们一些修复问题之外的建议,比如选用其他的Linux发行版(如Debian、CentOS、Arch、Manjaro)或者干脆使用Windows而规避Ubuntu的不稳定问题,以及替换机械硬盘为固态硬盘、升级内存以优化计算机运行性能等等,不过介于最近手头工作预配置的依赖很多很杂(也是不停尝试各种办法而不想重装系统的原因),暂且先不着急大换方案了,以后好好考虑。

淘宝救援

经历了上面的尝试,我!!还是没能解决循环登录的问题,就在快要放弃、准备重装的时候,我想到了淘宝,搜索“Ubuntu问题解决”咨询了一个店家,然后花了¥100解决了,淘宝你真是我的神。

应该是我ping通网络之后,bash店家给的连接,店家连接到了我的IP地址进行修复的,最终终于成功登录成功进入了桌面,具体过程我不太看得懂了(如下面左图所示是翻滚的IP访问)。

在我的询问下店家告诉我应该是现在~/.local/share.backup/下的某个文件存在问题,修复前这些文件在~/.local/share/目录下,如果移动回去还是会出现一样的问题(可以挨个尝试排查出具体出问题的文件),由于时间问题我就先不排查,贴出目前~/.local/share.backup/目录下的文件列表(下面右图),以供遇到同样问题而迟迟不能解决的朋友们参考。

补充:用户管理中的 useradd & adduser

在问题解决之前,我曾经在root权限(su指令进入)下使用useradd新建一个新用户,然后设置密码,然后在登录界面尝试登录,发现也出现了循环登录的问题,依此判断问题出在根目录/下而非/home/<user>下。后来当店家修复完成后,我在进行这个操作时,发现仍然无法登录新建的用户。

然后后来被指出这个验证过程是有问题的,如果使用adduser指令创建的用户则可以成功登录。

进行一番搜索后了解到,useradd指令只创建用户、注册信息,并不在/home下自动生成对应目录,也不主动询问需要设置的密码,而adduser指令则会默认生成/home下的目录,并且主动询问密码设置。所以这两个创建用户的指令所影响或产生的文件是不同的,也一定程度上影响了我对于问题层面的判断。

总结

进行了连续多天各种方案的尝试,也算是对Linux的认识稍进了一步,以及多熟悉了一下各种指令以及vim操作吧,一些解决方案应该边尝试边记录,如此可以避免一些重复的尝试,以及最后不要丧失希望,真的不想重装或者珍惜时间、精力成本的可以考虑一下淘宝,确实是由高手在。

希望遇到相应问题看到这篇博客的朋友们都能顺利解决问题吧。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐