2013年11月24日星期日

LightDM不能启动

开了20多天的Ubuntu 12.04,重启后LightDM不能开机自动启动了。决定查个究竟。

根据开机后的画面显示,目测是LightDM的Upstart脚本没有执行。看了看/etc/init/lightdm.conf,里面有相关的依赖服务,但我不知道是哪一步出问题了。折腾了几下,包括检查plymouth, dbus服务,删除和重装lightdm包后,lightdm服务竟然手动启动都会失败了。

还好LightDM在/var/log/lightdm/lightdm.log记录了日志,里面有/usr/share/xgreeters/default.desktop文件找不到的错误。在/usr/share/xgreeters/只有unity-greeter.desktop文件。之前正常工作的时候,/etc/lightdm/lightdm.conf里面指定了unity-greeter的,现在没有lightdm.conf这个文件,所以就出了上述的错误。我就做了一个符号链接,再次sudo start lightdm,结果还是没有起来,不过lightdm.log里面有记录启动greeter出错了,并友好地提示greeter的日志记在/var/log/lightdm/x-0-greeter.log里面。在这个文件里面看到具体的错误是没有权限打开/var/lib/lightdm/.Xauthority文件。我记得之前用Apt删除lightdm的时候,显示/var/lib/lightdm目录未能删除,现在我就把/var/lib/lightdm里面的所有文件都删除了,之后lightdm服务就能成功启动了。

从这个故事我得到的体会是,应用设计里面重要的一点,就是要有关键的日志记录,特别是错误记录,这样在事后分析的时候容易找到问题产生的原因。LightDM的日志文件就是比较清楚的,特别是在lightdm.log里面,写入其它日志文件x-0-greeter.log时,也会记下这条,这样看日志的人立刻就知道还有别的日志文件;如果安静地写到另一个日志文件里面而不提示,就会增加用户检索的成本。