「GDM」- Oh no! Something has gone wrong error

  CREATED BY JENKINSBOT

问题描述

在安装 GDM 之后,启动u服务(systemctl start gdm3.service),此时显示错误信息:

Oh no! Something has gone wrong error

或者,在输入用户名与密码之后,不断的退到登录界面。

问题排查

修改/etc/gdm/custom.conf文件,加入如下行:

[debug]
Enable=true

同时你还要启动 syslog 服务(该服务通常是默认启动的)。

然后重启 GDM 服务(systemctl restart gdm3.service),再次进行登录,此时日志将写入/var/log/message中。

问题原因

可能每个人原因都不相同。下面是我的个人原因:

在我的情景中,之所以无法登录,是因为:它在登录的时候,会执行$HOME/.profile文件,而文件中存在语法错误。准确的说是:与执行的Shell不兼容。

脚本的执行是由/etc/gdm3/Xsession触发的,所使用的Shell程序是/bin/sh(脚本第一行)。在我的环境中,它被软链接到/bin/bash命令。当Bash被软链接到sh后(即以sh调用),将进入「POSIX模式」。如果你的脚本不符合POSIX的规范,比如命名中存在非法字符,都会导致错误。

解决办法

正常讲应该调整脚本,使脚本符合POSIX规范。但是实际情况复杂:1)脚本多,工作量大;2)规范里的功能少,不能满足某些需要。

所以我的解决办法就是从POSIX模式中退出来:在脚本的第一行加入set +o posix命令,管理POSIX模式。

参考文献

GNOME HELP/Troubleshooting
GNOME HELP/Configuration
BASH MANUAL/6.11 Bash POSIX Mode
How to disable an option with a bash script?