Firefox hängt, weil die Einstellung "Sortierverzeichnisse zuerst" fehlt

7

Ich habe kürzlich ein Upgrade von xubuntu 14.04 auf xubuntu 16.04 durchgeführt. Der Prozess endete, verlief aber nicht reibungslos (ich weiß nicht mehr warum).

firefoxWenn ich jetzt eine Datei öffne ( Datei -> Datei öffnen ), stürzt der Prozess mit dem folgenden Fehler ab:

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

Ich habe im Internet gesucht und nichts Relevantes gefunden. Neu Installieren firefox, gsettings-desktop-schemasund gsettings-ubuntu-schemas(mit apt-get install --reinstall ...) nichts ändern. Ich habe auch versucht, die Schemas neu zu erstellen, aber der Fehler ist immer der gleiche:

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

Das (nicht so) lustige ist, dass der Schlüssel existiert!

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">

Am Ende habe ich versucht, den Schlüssel manuell zu erstellen. Damit gsettingsbeschwert sich der Schlüssel nicht:

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

Mit dconfkann ich diesen Schlüssel erstellen, aber nichts ändert sich:

dconf write /org/gtk/settings/file-chooser/sort-directories-first false 
ntd
quelle
1. In welchen Override-Dateien befinden Sie sich /usr/share/glib-2.0/schemas/? 2. Was ist die volle Leistung von grep sort-directories-first /usr/share/glib-2.0/schemas/*? ist es das, was du in der Frage gesagt hast?
Anwar

Antworten:

3

Die Datei /usr/share/glib-2.0/schemas/org.gtk.Settings.FileChooser.gschema.xmlexistiert und enthält den gewünschten Schlüssel sort-directories-first.

Aus der Antwort von WinEunuuchs2Unix wissen wir, dass das System die Datei abhängig vom Wert der XDG_DATA_DIRSUmgebungsvariablen an einem Speicherort sucht .

Was passiert also, wenn das System org.gtk.Settings.FileChooser.gschema.xmlan einem anderen Ort sucht ?

Die Fehlermeldung sagt uns nicht, dass das System die Datei nicht finden kann, die Nachricht sagt uns, dass das System den Schlüssel in der Datei nicht finden kann. Das stellt sicher, dass Sie eine zweite Datei mit dem Namen org.gtk.Settings.FileChooser.gschema.xmlirgendwo in Ihrem System haben und diese Datei nicht den gewünschten Schlüssel enthält.

Um dieses Problem zu umgehen, würde ich vorschlagen, dass Sie nach Dateien mit dem Namen suchen. org.gtk.Settings.FileChooser.gschema.xmlIch bin sicher, dass Sie mehr als nur eine finden werden. Überprüfen Sie den Inhalt dieser Datei an einem anderen Speicherort, wenn sie den gewünschten Schlüssel enthält. Dies ist jedoch nicht der Fall.

Kopieren von

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

Sie können den Wert von XDG_DATA_DIRSwith echo $XDG_DATA_DIRSin terminal überprüfen , um einen Hinweis darauf zu erhalten, wo Sie nach Dateien suchen müssen.

Ich konnte nicht herausfinden, wie der Wert für festgelegt werden XDG_DATA_DIRSsoll. Der Wert wird beim Start durch ein Bash-Skript festgelegt, aber die gefundenen Informationen schienen veraltet zu sein.

Ihr Problem könnte mit diesem Fehler zusammenhängen. Google führt mich zu diesem Link, während ich im Internet nach Ihrem Problem suche.

mook765
quelle
OP sagte bereits, dass sie habenorg.gtk.Settings.FileChooser.gschema.xml
Anwar
@Anwar Ja, diese Datei wird an einem bestimmten Speicherort beendet, und es scheint sich nicht um die Datei zu handeln, auf die das System zugreift, da das System sonst den Schlüssel gefunden hätte. Der Speicherort, an dem das System nach der Datei sucht, ist definiert XDG_DATA_DIRS. Wenn XDG_DATA_DIRSder Wert falsch ist, sucht das System an einem anderen Speicherort nach der Datei und findet dort möglicherweise eine Datei mit demselben Namen, aber diese Datei enthält den Schlüssel nicht. Dies könnte hier wirklich der Fall sein und ist es wert, überprüft zu werden.
mook765
OP hat den Schlüssel in der Datei erstellt. Jetzt sollte das System den Schlüssel finden, oder? Und ich habe festgestellt, dass Xubuntu (und Ubuntu) keine .gschema-Dateien an anderer Stelle speichern.
Anwar
2
Wirklich guter Fang. Ich habe vor einiger Zeit eine benutzerdefinierte GLib-Bibliothek kompiliert und diese Bibliothek hat ein /usr/local/share/glib-2.0/schemas/org.gtk.Settings.FileChooser.gschema.xmlSchema installiert . Durch Deinstallieren dieser Bibliothek wurde das Problem behoben. In der Tat /usr/local/sharegeht /usr/shareauf meine XDG_DATA_DIRS.
11.
Glückwunsch! In der Tat eine gute
Anwar
1

Nur ein kleiner Hintergrund:

glib-compile-schemas kompiliert alle GSettings-XML-Schemadateien DIRECTORYin eine Binärdatei mit dem Namen gschemas.compiled, der von GSettings verwendet werden kann. Die XML-Schemadateien müssen die Dateinamenerweiterung haben .gschema.xml. Eine ausführliche Beschreibung des XML-Dateiformats finden Sie in der GSettings-Dokumentation.

Zur Laufzeit sucht GSettings in den glib-2.0/schemasUnterverzeichnissen aller in der XDG_DATA_DIRSUmgebungsvariablen angegebenen Verzeichnisse nach Schemas . Der übliche Speicherort für die Installation von Schemadateien ist /usr/share/glib-2.0/schemas.

Zusätzlich zu Schemadateien liest glib-compile-schemas 'Vendor Override'-Dateien. Hierbei handelt es sich um Schlüsseldateien, mit denen Standardwerte für Schlüssel in den Schemas überschrieben werden können. Die Gruppennamen in den Schlüsseldateien sind die Schema-ID, und die Werte werden in serialisierter GVariant-Form geschrieben. Herstellerüberschreibungsdateien müssen die Dateinamenerweiterung haben .gschema.override.

Per Konvention Anbieter überschreiben Dateien beginnen mit nn_dem nneine Zahl von 00 bis 99 höhere nummerierte Dateien haben eine höhere Priorität (zB: wenn die gleiche Überschreibung in einer Datei aus 10 nummeriert und dann wieder in einer Datei nummeriert 20, die Überschreibung von 20 wird Vorrang haben).

Wenn ich Ihr Setup richtig lese, haben Sie Ihre .xmlDateien in:

/usr/share/glib/schemas

und nicht in:

/usr/share/glib-2.0/schemas

wo sie erwartet werden.

Wenn ich es falsch gelesen habe, lass es mich wissen und ich werde diese Antwort löschen. Ich benutze FireFox nicht und konnte die Antwort daher nicht wie gewohnt testen.

WinEunuuchs2Unix
quelle
Entschuldigung, die grep-Ausgabe war etwas falsch ... Ich habe gerade die Antwort aktualisiert (es war kein Kopieren und Einfügen). Das Verzeichnis / usr / share / glib / existiert nicht einmal.
7.