之前在 Ubuntu 下安装了 TeXLive 并配置了环境变量,之后注销发现输入正确密码后仍弹回到登录界面,而输入错误密码后提示密码错误,说明并非密码问题,在网上搜寻一番后发现时环境变量配置出错,之后得到了解决,现将方法记录如下。
Linux 的环境变量读取机制
在登陆时,操作系统定制用户环境时读取的第一个文件是 /etc/profile,此文件为系统的每个用户设置环境信息,当用户第一次登陆时,该文件被执行。
在登陆时操作系统读取的第二个文件是 /etc/environment,系统在读取用户自己的 profile 前,设置环境文件的环境变量。
在登陆时用到的第三个文件是 ~/.profile 文件,每个用户都可使用该文件输入专用于自己使用的 shell 信息,该文件仅仅执行一次。默认情况下,它设置一些环境变量,执行用户的 .bashrc 文件。/etc/bashrc 为每一个运行 bash shell 的用户执行此文件,当 bash shell 被打开时,该文件被读取。
无法登录的原因
由上可知,系统启动时会先读取 /etc/profile,然后读取 /etc/environment,最后才是 ~/.profile 文件,而在 /etc/environment 中也设置有环境变量 PATH,如果你在 ~/.profile 中也设置了环境变量 PATH,那么就会覆盖原来的 /etc/environment 中设置的环境变量 PATH。
因此,~/.profile 文件中的环境变量设置一定不可大意,且在其设置的环境变量中要重新载入之前的环境变量,即添加 $PATH,且以冒号分割。
比如以我安装的 TeXLive 为例,正确的环境变量设置应该为:
PATH=/usr/local/texlive/2014/bin/x86_64-linux:$PATH; export PATH
MANPATH=/usr/local/texlive/2014/texmf-dist/doc/man:$MANPATH; export MANPATH
INFOPATH=/usr/local/texlive/2014/texmf-dist/doc/info:$INFOPATH; export INFOPATH
解决方法一
在登录界面可以通过 Ctrl + Alt + F1~F6 的方式进入命令行,再通过 Ctrl + Alt + F7 的方式进入图形界面。
因此我们可以进入图形界面登录 root 账户,将之前修改的环境变量删除或者更正即可。
注意事项:我们在登录不同的账户时,~ 所对应的目录是不同的,例如 John 用户对应 /home/John/,而 root 用户对应 /root/,因此在以 root 用户登陆时,一定要注意环境变量文件的路径。
解决方法二
若命令行下打开文件乱码,可考虑新建用户并登录,然后以 root 权限修改之前用户的配置文件,关于如何新建用户此处不再赘述。