xdg-openは、パーセントエンコードされた「file:///」URLを処理するためにLXDEを使用しません。

xdg-openは、パーセントエンコードされた「file:///」URLを処理するためにLXDEを使用しません。

xdg-openがパーセントでエンコードされたURLを処理しないことがわかりました。たとえば、次の行は成功します(ファイルが存在する場合)。

xdg-open "/home/sashoalm/Has Spaces.txt"
xdg-open file:///home/sashoalm/NoSpaces.txt

しかし、これは失敗します。

xdg-open file:///home/sashoalm/Has%20Spaces.txt

編集する:これは私のバージョンのxdg-utilsです。

 sashoalm@aspire:~$ apt-cache policy xdg-utils
xdg-utils:
  Installed: 1.1.0~rc1+git20111210-6+deb7u1
  Candidate: 1.1.0~rc1+git20111210-6+deb7u1
  Version table:
 *** 1.1.0~rc1+git20111210-6+deb7u1 0
        500 http://ftp.bg.debian.org/debian/ wheezy/main amd64 Packages
        100 /var/lib/dpkg/status

編集2:トレースは次のとおりです。

sashoalm@aspire:~$ bash -x xdg-open file:///home/sashoalm/Has%20Spaces.txt 
+ check_common_commands file:///home/sashoalm/Has%20Spaces.txt
+ '[' 1 -gt 0 ']'
+ parm=file:///home/sashoalm/Has%20Spaces.txt
+ shift
+ case "$parm" in
+ '[' 0 -gt 0 ']'
+ '[' -z '' ']'
+ unset XDG_UTILS_DEBUG_LEVEL
+ '[' 0 -lt 1 ']'
+ xdg_redirect_output=' > /dev/null 2> /dev/null'
+ '[' xfile:///home/sashoalm/Has%20Spaces.txt '!=' x ']'
+ url=
+ '[' 1 -gt 0 ']'
+ parm=file:///home/sashoalm/Has%20Spaces.txt
+ shift
+ case "$parm" in
+ '[' -n '' ']'
+ url=file:///home/sashoalm/Has%20Spaces.txt
+ '[' 0 -gt 0 ']'
+ '[' -z file:///home/sashoalm/Has%20Spaces.txt ']'
+ detectDE
+ unset GREP_OPTIONS
+ '[' -n LXDE ']'
+ case "${XDG_CURRENT_DESKTOP}" in
+ DE=lxde
+ '[' xlxde = x ']'
+ '[' xlxde = x ']'
+ '[' xlxde = x ']'
+ '[' xlxde = xgnome ']'
+ '[' xlxde = x ']'
+ DEBUG 2 'Selected DE lxde'
+ '[' -z '' ']'
+ return 0
+ '[' x = x ']'
+ BROWSER=www-browser:links2:elinks:links:lynx:w3m
+ '[' -n :0 ']'
+ BROWSER=x-www-browser:firefox:seamonkey:mozilla:epiphany:konqueror:chromium-browser:google-chrome:www-browser:links2:elinks:links:lynx:w3m
+ case "$DE" in
+ open_lxde file:///home/sashoalm/Has%20Spaces.txt
+ echo file:///home/sashoalm/Has%20Spaces.txt
+ grep -q '^file://'
++ echo file:///home/sashoalm/Has%20Spaces.txt
++ sed 's%^file://%%'
+ local file=/home/sashoalm/Has%20Spaces.txt
+ echo /home/sashoalm/Has%20Spaces.txt
+ grep -q '^/'
+ pcmanfm /home/sashoalm/Has%20Spaces.txt
+ '[' 0 -eq 0 ']'
+ exit_success
+ '[' 0 -gt 0 ']'
+ exit 0

ベストアンサー1

LXDEデスクトップ環境を使用している場合、xdg-openはfile://このプログラムを使用してURLを開きますpcmanfm。 pcmanfmはURLではなく通常のパスのみをパラメータとしてサポートしているため、file://URLの一部を削除してpcmanfm残りの部分と一緒に呼び出します。

xdg-open他の置換は行われないため、空白%20に変換されません。これはバグです(Debianでこれに関するバグレポートを自由に開いてください)。修正については後述する。

他のデスクトップ環境では、オープンプログラムはfile:// URLを正しくサポートします。


解決策:xdg-open が必要なすべての置換をサポートする汎用オープンハンドラを使用するように、一部の環境変数を設定解除します。

XDG_CURRENT_DESKTOP= DESKTOP_SESSION= xdg-open "/home/sashoalm/Has Spaces.txt"

バグ修正: xdg-openスクリプトを/usr/local/binにコピーし(システムのアップグレード時に上書きしないように)、次の行を追加します。

file="$(printf "$(echo "$file" | sed -e 's@%\([a-f0-9A-F]\{2\}\)@\\x\1@g')")"

コメントアウトされた行の上のxdg-openスクリプトに移動します# handle relative paths

バグ修正2:

または単にdetectDE()次のように置き換えてください。

detectDE()
{
    DE=gnome
}

おすすめ記事