web-dev-qa-db-ja.com

16.04アップグレード以降、xdg-openが動作しなくなりました

xdg-mime query default inode/directory

正しく私に与えます:

nemo.desktop

私が期待しているように、それがしたい。

しかし

xdg-open $HOME

エラーを与えます:

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

...そしてAudaciousを開きます。

中括弧をエスケープするためにrun-mailcap行を編集しようとすると、そのエラーメッセージは削除されます。しかし、それは問題を解決しません。それでも「mimetype引数がありません」と表示され、間違ったプログラムが開きます。

Audaciousをアンインストールしてみましたが、代わりに別の間違ったプログラム(git-colaとchrome)が開きます。

Sudo apt-get install --reinstall xdg-utilsを試しましたが、何も変わりませんでした。

編集:詳細については、上記の動作はCinnamonとGnomeの両方で発生しますが、Lubuntu LXDEでは発生しません。 LXDEでは、クエリはnemo.desktopを提供し、xdg-openはターミナルでエラーメッセージを生成しませんが、PCManFM(nemoではない)を開きます。

それは何が間違っているのか、それを修正するための手がかりですか?

7
beauxq

私はまったく同じ問題を抱えていました。
gvfs-bin(これ以上)をインストールするだけで問題を解決できました...

Sudo apt install gvfs-bin

これは、ユーザーからのログファイルでAmiasが読み取られるためです。
gvfs-open /home/amias

しかし、gvfs-openはシステムにインストールされていません。

gvfs-binをインストールした後、動作します!

新しいファイルの関連付けを設定するには(フォルダーにNemoを使用するなど)、次のようにします。

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

-乾杯

2
Ben

さて、この記事で判断した同様の問題を抱えている他の人のためにパッチがリリースされたようです: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=810587

この記事では、人が遭遇していました:

「正規表現のエスケープされていない左中括弧は廃止され、正規表現にパススルーされます。</-HERE in m /%{<-HERE(。*?)}/at/usr/bin/run-mailcap line 528.」

異なるプログラムを除いて、エラーメッセージに似ているnmhを実行中。だから私は実行することをお勧めします:

Sudo apt-get upgrade;Sudo apt-get dist-upgrade

影響を受けるパッケージには、パッチとともにアップグレードされたバージョンが含まれている可能性があるためです。

これがお役に立てば幸いです。

注:これにより、アップグレード可能なすべてのパッケージがアップグレードされます(これは関係なく良いことです)。したがって、複数のパッケージをアップグレードする必要がある場合は驚かないでください。

0
Michael Knoll

この問題は、gvfs-infoが廃止されたためです。

xdg-mimeの635行目はgnomeにgvfs-infoを使用しています。 bash gvfs-info "$1" 2> /dev/null | grep standard::content-type | cut -d' ' -f4

私はその行を手動で再評価しようとしましたが、結果はここにあります:

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

次に、gio infoを使用してみました:

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

そこで、一時的にinfo_gnome() in xdg-mimeのブロックを変更して、代わりにgio infoを使用し、バム、うまくいきました!

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 }
0
ExistMe

xdg-openはシェルスクリプトなので、-xでデバッグできます。

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

これは私にこのような出力を与えます

+ 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

これは、64ビット16.04で動作するxdg-openのインストールからのものです。

私はあなたのものを見せてくれました。

編集:

出力を見ると、open_generic_xdg_mimeがMIMEタイプを返すことができず、これによりスクリプトが適切なサービスを選択できないことがわかります。簡単な回避策は、open_generic_xdg_mimeというスクリプトを作成し、その入力に対して 'file -i'を実行させることです。これにより、mimeタイプが得られますが、cutなどの出力を少し整理する必要があります。それが必要な場合はお知らせください。

0
Amias