如何调试为什么 gnome-settings-daemon-localeexec 在登录时未启动?

ado*_*uas 5 gnome debug login gnome-settings-daemon 14.04

我使用的是 Ubuntu Gnome 14.04,登录时未启动 gnome-settings-daemon-localeexec。我该如何调试为什么会发生这种情况?

我发现了这个问题:gnome-settings-daemon not start when I Login,但这对我来说并不是一个真正的解决方案,所以我想调试它并找到真正的问题,如果需要的话可能会提交一个错误。

我是一位经验丰富的 Linux 用户,但我不知道 gnome shell 启动过程如何工作以及从哪里开始。

编辑:

这些可能是相关的问题:

编辑2:

我在启动板上打开了一个错误报告,让我们看看是否有帮助:登录时未启动 gnome-settings-daemon-localeexec

编辑3:

发现这些其他线程可能有帮助:

bai*_*ain 4

调试是一个过程,因此我将描述用于解决此类问题的过程。问题是:

  • 它适用于新用户帐户吗?(即,这是系统的普遍问题,还是一个帐户的普遍问题?)
  • 应该如何开始?
  • 它真的开始了吗?
  • 如果是这样,它是否崩溃或以其他方式失败?(这可能比一开始就没有运行的可能性更大,而且结果相似)

如果这是帐户(用户配置)的问题,并且它适用于新创建的帐户,那么您可以通过将配置文件从损坏的帐户复制到工作帐户并测试登录来跟踪问题,直到它损坏。(或者,从损坏的帐户开始,删除文件和目录,直到它起作用。)将其视为迭代过程 - 开始,复制目录/文件集,它是否损坏帐户是/否,消除一半的集合,开始。这可能很耗时,因此人们通常只会重置帐户,而不会费心去追踪发生了什么问题。

如果您想追查问题的软件根源,请首先查看 ~/.cache/gdm/session.log 和 /var/log/syslog 以查看是否存在与您的问题相关的明显错误。然后使用源码:

$ apt-file search gnome-settings-daemon-localeexec
gnome-settings-daemon: /usr/lib/gnome-settings-daemon/gnome-settings-daemon-localeexec
$ apt-get source gnome-settings-daemon
$ cd gnome-settings-daemon-*
$ grep -r gnome-settings-daemon-localeexec
...
data/gnome-settings-daemon.desktop.in.in:Exec=@libexecdir@/gnome-settings-daemon-localeexec
$ cat data/gnome-settings-daemon.desktop.in.in
[Desktop Entry]
Type=Application
_Name=GNOME Settings Daemon
Exec=@libexecdir@/gnome-settings-daemon-localeexec
OnlyShowIn=GNOME;
NoDisplay=true
X-GNOME-Autostart-Phase=Initialization
X-GNOME-Autostart-Notify=true
X-GNOME-AutoRestart=true
Run Code Online (Sandbox Code Playgroud)

现在我们知道 gnome-settings-daemon-localeexec 是从名为 gnome-settings-daemon.desktop 的 .desktop 文件运行的。它安装在哪里?

$ locate gnome-settings-daemon.desktop
/usr/share/gnome/autostart/gnome-settings-daemon.desktop
$ file /usr/lib/gnome-settings-daemon/gnome-settings-daemon-localeexec
/usr/lib/gnome-settings-daemon/gnome-settings-daemon-localeexec: POSIX shell script, ASCII text executable
$ vi /usr/lib/gnome-settings-daemon/gnome-settings-daemon-localeexec
# it is just a wrapper around /usr/lib/gnome-settings-daemon/gnome-settings-daemon
Run Code Online (Sandbox Code Playgroud)

尝试运行它以查看运行实际守护进程是否存在问题(崩溃等):

$ /usr/lib/gnome-settings-daemon/gnome-settings-daemon-localeexec
Run Code Online (Sandbox Code Playgroud)

您还可以尝试:

$ gnome-settings-daemon --debug
Run Code Online (Sandbox Code Playgroud)

自动启动是否正在运行?在此页面中搜索“debug gnome autostart”结果,显示:

启用=假

要启用调试,请在 /gdm/custom.conf 文件中将 debug/Enable 键设置为“true”并重新启动 GDM。

因此尝试一下,然后检查 /var/log/syslog。这里的另一种选择是修改 /usr/lib/gnome-settings-daemon/gnome-settings-daemon-localeexec 并添加调试语句。它只是一个 shell 脚本,所以添加类似echo "localeexec date $(date) env $(env)" > /tmp/log. 然后登录并检查/tmp/log。

(在调试任何给定的程序时,通常有一种方法可以将打印语句附加到“适当的”日志文件中,但是打开自己的日志文件通常更容易、更快,因为它使调试保持独立,并且不需要了解多个日志文件适用于任何给定程序的语言/系统/日志级别/过滤层。)

到目前为止的日志记录和调试可能已经暴露了这个问题。对于编译后的二进制文件中存在的更严重的错误,您必须使用 下载源代码apt-get source,修改它以添加一些调试代码(打印语句),编译修改后的源代码并安装它,然后测试它。这里最棒的是,整个apt/dpkg系统的设计使这一过程变得简单、快速并且只需几个命令即可访问。调试器对于检查复杂的内部程序状态很有用,但使用打印语句是一个更快的过程,可以跨所有语言和系统工作,因此这通常是我的初始方法。

编辑:

作为评论摘要,我替换了 /usr/lib/gnome-settings-daemon/gnome-settings-daemon-localeexec 中的行:

exec /usr/lib/gnome-settings-daemon/gnome-settings-daemon
Run Code Online (Sandbox Code Playgroud)

nohup /usr/lib/gnome-settings-daemon/gnome-settings-daemon --debug >/tmp/gnome-settings-daemon.log 2>&1 &
Run Code Online (Sandbox Code Playgroud)

为了捕获过程输出