如何调试登录时未启动gnome-settings-daemon-localeexec的原因?

我正在使用Ubuntu Gnome 14.04并且登录时未启动gnome-settings-daemon-localeexec。 我该如何调试为什么会这样?

我发现了这个问题: gnome-settings-daemon在我登录时没有启动 ,但它对我来说不是一个真正的解决方案,所以我想调试它并找到真正的问题,如果需要可能会提交bug。

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

编辑:

这些可能是相关的问题:

  • 如何调试Gnome 3的慢速会话启动? – >这个没有帮助,gnome-shell进程似乎在登录时死亡,因此我看到没有什么对strace输出有用
  • 如何调试会话启动问题? – >这似乎不再有效了

编辑2:

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

编辑3:

找到可能有用的其他线程:

  • [解决] [gnome-unstable] gnome-settings-daemon不起作用 – >添加–debug到gnome-settings-daemon并且〜/ .cache / gdm / session.log中没有显示任何内容
  • 调试GNOME Shell – >没有帮助,因为gnome-shell没有崩溃

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

  • 它适用于新用户帐户吗? (即,它是系统的一般问题,还是一个帐户?)
  • 应该怎么开始?
  • 它真的开始了吗?
  • 如果是这样,它是崩溃还是失败? (这可能比不首先运行的可能性更大,结果相似)

如果帐户(用户配置)出现问题,并且它与新创建的帐户一起使用,则可以通过将配置文件从损坏的帐户复制到工作帐户并测试登录来跟踪问题,直到它中断为止。 (或者,从破损的帐户开始,删除文件和目录,直到它工作。)作为一个迭代过程接近 – 开始,复制目录/文件集,它是否打破帐户是/否,消除一半的集合,转到开头。 它可能很耗时,所以通常人们只会重置帐户而不用费心去追踪破坏的内容。

如果要查找问题的软件源,请首先查看〜/ .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 

所以现在我们知道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 

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

 $ /usr/lib/gnome-settings-daemon/gnome-settings-daemon-localeexec 

你也可以尝试:

 $ gnome-settings-daemon --debug 

自动启动是否正在运行? 在此页面中搜索“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。

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

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

编辑:

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

 exec /usr/lib/gnome-settings-daemon/gnome-settings-daemon 

 nohup /usr/lib/gnome-settings-daemon/gnome-settings-daemon --debug >/tmp/gnome-settings-daemon.log 2>&1 & 

为了捕获过程输出