xdg-open funktioniert seit dem Upgrade vom 16.04 nicht mehr

8
xdg-mime query default inode/directory

richtig gibt mir:

nemo.desktop

wie ich es erwarte und will.

Aber

xdg-open $HOME

Gibt einen Fehler:

xdg-mime: mimetype argument missing
Try 'xdg-mime --help' for more information.
Unescaped left brace in regex is deprecated, passed through in regex; marked by <-- HERE in m/%{ <-- HERE (.*?)}/ at /usr/bin/run-mailcap line 528.
Warning: program returned non-zero exit code #66

... und öffnet Audacious.

Ich habe versucht, die Run-Mailcap-Zeile zu bearbeiten, um die geschweiften Klammern zu umgehen, und dadurch wird diese Fehlermeldung beseitigt. Aber es behebt das Problem nicht. Ich bekomme immer noch "Mimetype-Argument fehlt" und das falsche Programm wird geöffnet.

Ich habe versucht, Audacious zu deinstallieren, und es öffnet stattdessen ein anderes falsches Programm (Git-Cola und Chrome).

Ich habe es versucht sudo apt-get install --reinstall xdg-utilsund es hat nichts geändert.

Bearbeiten: Weitere Informationen, das oben beschriebene Verhalten tritt sowohl in Cinnamon als auch in Gnome auf, jedoch nicht in Lubuntu LXDE. In LXDE gibt die Abfrage nemo.desktop aus, und xdg-open erzeugt keine Fehlermeldungen im Terminal, öffnet jedoch PCManFM (nicht nemo).

Ist das ein Hinweis darauf, was falsch ist oder wie man es behebt?

beauxq
quelle
Nur ein Gedanke, aber sind Sie sicher, dass der Inhalt von $ HOME vernünftig ist?
Amias
Was passiert, wenn Sie die Exec-Zeile von nemo.desktop aus ausführen?
Amias
@amias einige von nemo.desktop: Exec=nemo %U Icon=folder Terminal=false Type=Application StartupNotify=false Categories=GNOME;GTK;Utility;Core; MimeType=inode/directory;application/x-gnome-saved-search; nemo $HOMEfunktioniert wie erwartet echo $HOMEgibt mein Benutzerverzeichnis wie erwartet
beauxq
1
Hat eine der Antworten funktioniert
William

Antworten:

3

Ich hatte genau das gleiche Problem.
Ich könnte das Problem lösen, indem ich es einfach installiere gvfs-bin(nichts weiter) ...

sudo apt install gvfs-bin

Ich habe das herausgefunden, weil in den Log-Dateien von User Amias zu lesen ist:
gvfs-open /home/amias

Aber gvfs-open wurde nicht auf meinem System installiert.

Nach der Installation gvfs-binfunktioniert es!

So legen Sie eine neue Dateizuordnung fest (z. B. Nemo für Ordner verwenden):

gvfs-mime --set inode/directory nemo.desktop

-Prost

Ben
quelle
1

Okay, es scheint, als wäre ein Patch für andere veröffentlicht worden, die ähnliche Probleme haben, wie aus diesem Artikel hervorgeht: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=810587

In diesem Artikel begegnete die Person:

"Unescaped linke Klammer in Regex ist veraltet, wird in Regex durchlaufen; markiert durch <- HERE in m /% {<- HERE (. *?)} / At / usr / bin / run-mailcap Zeile 528."

während Sie nmh ausführen, was Ihrer Fehlermeldung bis auf ein anderes Programm ähnlich zu sein scheint. Also würde ich empfehlen zu laufen:

sudo apt-get upgrade;sudo apt-get dist-upgrade

Da für das betroffene Paket möglicherweise eine aktualisierte Version mit dem Patch verfügbar ist.

Ich hoffe das hilft.

HINWEIS: Dadurch werden alle Pakete aktualisiert, die aktualisiert werden können (was unabhängig davon eine gute Sache ist). Seien Sie also nicht überrascht, wenn mehrere Pakete aktualisiert werden möchten.

Michael Knoll
quelle
"seit 16.04 Upgrade" bedeutet, dass ich das Upgrade bereits durchgeführt habe
Beauxq
Entschuldigung für die Verwirrung. Ich meinte, seit Sie auf 16.04 aktualisiert haben, wurde xdg-open möglicherweise selbst aktualisiert (dh eine neue Version von xdg-open wurde veröffentlicht). Die angebotenen Befehle würden dann xdg-open auf die neueste unterstützte Version aktualisieren (sofern eine neuere Version verfügbar ist), und diese neuere Version wurde möglicherweise gepatcht, da dies eindeutig ein Problem für mehr als nur Sie selbst war. Nochmals Entschuldigung für die Verwirrung.
Michael Knoll
Ich habe diese Upgrade-Befehle ausprobiert und sie haben nichts getan. In der Frage habe ich auch festgestellt, dass ich das Problem, auf das durch den von Ihnen verknüpften Fehler verwiesen wird, bereits behoben habe und das Problem der falschen Programmeröffnung nicht gelöst habe.
Beauxq
Oh, tut mir leid, viel Glück damit, ich habe keine Ideen mehr. Tut mir leid, dass ich deine Zeit verschwende.
Michael Knoll
1

xdg-open ist ein Shell-Skript, mit dem Sie es mit -x debuggen können

bash -x /usr/bin/xdg-open $HOME

Das gibt mir eine Ausgabe wie diese

+ check_common_commands /home/amias
+ '[' 1 -gt 0 ']'
+ parm=/home/amias
+ shift
+ case "$parm" in
+ '[' 0 -gt 0 ']'
+ '[' -z '' ']'
+ unset XDG_UTILS_DEBUG_LEVEL
+ '[' 0 -lt 1 ']'
+ xdg_redirect_output=' > /dev/null 2> /dev/null'
+ '[' x/home/amias '!=' x ']'
+ url=
+ '[' 1 -gt 0 ']'
+ parm=/home/amias
+ shift
+ case "$parm" in
+ '[' -n '' ']'
+ url=/home/amias
+ '[' 0 -gt 0 ']'
+ '[' -z /home/amias ']'
+ detectDE
+ unset GREP_OPTIONS
+ '[' -n Unity ']'
+ case "${XDG_CURRENT_DESKTOP}" in
+ '[' x = x ']'
+ '[' x '!=' x ']'
+ '[' xthis-is-deprecated '!=' x ']'
+ DE=gnome
+ '[' xgnome = x ']'
+ '[' xgnome = x ']'
+ '[' xgnome = xgnome ']'
+ which gnome-default-applications-properties
+ DE=gnome3
+ '[' xgnome3 = x ']'
+ DEBUG 2 'Selected DE gnome3'
+ '[' -z '' ']'
+ return 0
+ case "${BROWSER}" in
+ case "$DE" in
+ open_gnome3 /home/amias
+ gvfs-open --help
+ gvfs-open /home/amias
+ '[' 0 -eq 0 ']'
+ exit_success
+ '[' 0 -gt 0 ']'
+ exit 0

Dies ist aus einer funktionierenden Installation von xdg-open auf 64bit 16.04.

Ich habe dir meine gezeigt, jetzt zeigst du mir deine.

bearbeiten:

Wenn ich mir Ihre Ausgabe ansehe, kann ich sehen, dass open_generic_xdg_mime keinen MIME-Typ zurückgibt und dies das Skript daran hindert, den richtigen Dienst auszuwählen. Eine einfache Problemumgehung wäre, ein Skript mit dem Namen open_generic_xdg_mime zu erstellen und es 'file -i' für seine Eingabe ausführen zu lassen. Dies gibt Ihnen den MIME-Typ, aber Sie müssen die Ausgabe ein wenig mit etwas wie cut aufräumen. Lassen Sie mich wissen, wenn Sie eine Hand dabei brauchen.

Amias
quelle
Meine Ausgabe hier: [link] paste.kde.org/pvpbuxzfj Es könnte hilfreich sein zu wissen: Ich habe versucht, Audacious zu deinstallieren, um zu sehen, was es tun würde. Jetzt öffnet es Git-Cola und dann Chrom.
Beauxq
Dort ist viel mehr los, der Dateityp wird nicht festgelegt und das Skript verarbeitet keinen Wert für den Dateityp. Sieht auch für mich wie ein Käfer aus
Amias
Nach dem, was Sie eingefügt haben, scheint das Problem zu sein, dass dieser Befehl nicht funktioniert - open_generic_xdg_mime
Amias
1

Das Problem ist darauf zurückzuführen, gvfs-infodass es veraltet ist.

Zeile 635 in xdg-mime wird verwendetgvfs-info für gnome verwendet. bash gvfs-info "$1" 2> /dev/null | grep standard::content-type | cut -d' ' -f4

Ich habe versucht, diese Zeile manuell neu zu bewerten. Hier ist das Ergebnis:

gvfs-info ~/test.pdf|grep standard::content-type| cut -d' ' -f4
This tool has been deprecated, use 'gio info' instead.
See 'gio help info' for more info.

/usr/bin/gvfs-info: 10: [: ~/test.pdf: unexpected operator
/usr/bin/gvfs-info: 10: [: ~/test.pdf: unexpected operator
application/pdf

Dann habe ich versucht gio info:

gio info ~/test.pdf|grep standard::content-type| cut -d' ' -f4
application/pdf

Also habe ich vorübergehend den Block für info_gnome () in xdg-mime geändert , um ihn gio infostattdessen zu verwenden, und bam, es hat funktioniert!

631 info_gnome()                                                                     
632 {                                                                                
633     if gvfs-info --help 2>/dev/null 1>&2; then                                   
634         DEBUG 1 "Running gvfs-info \"$1\""                                       
635         gnomevfs-info "$1" 2> /dev/null | grep standard::content-type | cut -d' ' -f4 
636     elif gnomevfs-info --help 2>/dev/null 1>&2; then                             
637         DEBUG 1 "Running gnomevfs-info \"$1\""                                   
638         gnomevfs-info --slow-mime "$1" 2> /dev/null | grep "^MIME" | cut -d ":" -f 2 | sed s/"^ "//
639     else                                                                         
640         DEBUG 1 "Running gio info \"$1\""                                        
641         gio info "$1" 2> /dev/null | grep standard::content-type | cut -d' ' -f4 
642     fi                                                                           
643     if [ $? -eq 0 ]; then                                                        
644         exit_success                                                             
645     else                                                                         
646         exit_failure_operation_failed                                            
647     fi                                                                           
648 }
ExistMe
quelle