Firefox 因缺少 sort-directories-first 设置而挂起

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-schemasgsettings-ubuntu-schemasapt-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:    <key type="b" name="sort-directories-first">
/usr/share/glib-2.0/schemas/org.gtk.Settings.FileChooser.gschema.xml:    <key type="b" name="sort-directories-first">

最后我尝试手动创建密钥。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 

答案1

该文件/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

XDG_DATA_DIRS您可以在终端中检查的值echo $XDG_DATA_DIRS,这可能会给您提供在哪里搜索文件的线索。

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

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

答案2

简单介绍一下背景:

glib-编译-模式将所有 GSettings XML 架构文件编译DIRECTORY为二进制文件,其名称gschemas.compiled可供 GSettings 使用。XML 架构文件必须具有文件扩展名.gschema.xml。有关 XML 文件格式的详细说明,请参阅 GSettings 文档。

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

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

按照惯例,供应商覆盖文件以从 00 到 99 的数字开头nn_nn编号越高的文件优先级越高(例如:如果在编号为 10 的文件中进行了相同的覆盖,然后在编号为 20 的文件中再次进行了相同的覆盖,则 20 中的覆盖将优先)。

如果我正确读取了您的设置,那么您的.xml文件位于:

/usr/share/glib/schemas

而不是:

/usr/share/glib-2.0/schemas

他们预计会在哪里。

如果我读错了,请告诉我,我会删除这个答案。我不使用 FireFox,所以无法像平常一样测试答案。

相关内容