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'
我在网上搜索并没有发现任何相关内容。 重新安装firefox
, gsettings-desktop-schemas
和gsettings-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-schemas将DIRECTORY
所有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,因此无法像平时那样测试答案。