Firefox挂起,因为sort-directories-first设置缺失

我最近从xubuntu 14.04升级到xubuntu 16.04。 这个过程完成但没有顺利进行(我不记得为什么)。

现在在firefox打开文件( 文件 – > 打开文件 )时,进程崩溃并出现以下错误:

 ... GLib-GIO-ERROR **: Settings schema 'org.gtk.Settings.FileChooser' does not contain a key named 'sort-directories-first' 

我在网上搜索并没有发现任何相关内容。 重新安装firefoxgsettings-desktop-schemasgsettings-ubuntu-schemas (使用apt-get install --reinstall ... )没有改变任何东西。 我也试过重建模式,但错误总是一样的:

 sudo glib-compile-schemas /usr/share/glib-2.0/schemas/ 

(不是那么)有趣的是关键存在!

 grep sort-directories-first /usr/share/glib-2.0/schemas/* Binary file /usr/share/glib-2.0/schemas/gschemas.compiled matches /usr/share/glib-2.0/schemas/org.gnome.nautilus.gschema.xml:  /usr/share/glib-2.0/schemas/org.gtk.Settings.FileChooser.gschema.xml:  

最后,我尝试手动创建密钥。 使用gsettings它会抱怨密钥不存在:

 gsettings set org.gtk.Settings.FileChooser sort-directories-first false Not such key 'sort-directories-first' 

使用dconf我可以创建该密钥,但没有任何变化:

 dconf write /org/gtk/settings/file-chooser/sort-directories-first false 

文件/usr/share/glib-2.0/schemas/org.gtk.Settings.FileChooser.gschema.xml存在并包含所需的键sort-directories-first

我们从WinEunuuchs2Unix的答案中知道,系统将根据XDG_DATA_DIRS环境变量的值在某个位置查找文件。

那么当系统在不同的位置寻找org.gtk.Settings.FileChooser.gschema.xml时会发生什么?

该错误消息并没有告诉我们系统找不到该文件,该消息告诉我们系统找不到该文件中的密钥。 这使我确保你的系统中有一个名为org.gtk.Settings.FileChooser.gschema.xml的第二个文件,该文件不包含所需的密钥。

作为一种解决方法,我建议你搜索名为org.gtk.Settings.FileChooser.gschema.xml文件,我相信你会发现不止一个。 如果该文件包含所需的密钥,请检查该文件在不同位置的内容。

复制自

  /usr/share/glib-2.0/schema/org.gtk.Settings.FileChooser.gschema.xml 

您可以使用终端中的echo $XDG_DATA_DIRS检查XDG_DATA_DIRS的值,这可能会为您提供搜索文件的位置的线索。

我无法找到如何设置XDG_DATA_DIRS的值,该值将在启动期间由bash脚本设置,但我发现的信息似乎已过时。

您的问题可能与此错误有关,Google会在网上搜索您的问题时引导我访问此链接。

只是一点背景:

glib-compile-schemasDIRECTORY所有GSettings XML模式文件编译成一个名为gschemas.compiled的二进制文件, gschemas.compiled使用。 XML模式文件的文件扩展名必须为.gschema.xml 。 有关XML文件格式的详细说明,请参阅GSettings文档。

在运行时,GSettings在XDG_DATA_DIRS环境变量中指定的所有目录的glib-2.0/schemas子目录中查找模式。 安装模式文件的通常位置是/usr/share/glib-2.0/schemas

除了模式文件之外,glib-compile-schemas还会读取“供应商覆盖”文件,这些文件是可以覆盖模式中密钥的默认值的密钥文件。 密钥文件中的组名称是模式ID,值以序列化的GVariantforms写入。 供应商覆盖文件必须具有文件扩展名.gschema.override

按照惯例,供应商覆盖文件以nn_开头,其中nn是从00到99的数字。编号较高的文件具有较高的优先级(例如:如果在编号为10的文件中进行相同的覆盖,然后再在编号为20的文件中进行覆盖,则覆盖从20开始将优先考虑)。

如果我正确读取您的设置,您的.xml文件包含在:

 /usr/share/glib/schemas 

而不是:

 /usr/share/glib-2.0/schemas 

他们应该在哪里。

如果我读错了请告诉我,我会删除这个答案。 我不使用FireFox,因此无法像平时那样测试答案。