xdg-open 不使用 LXDE 处理百分比编码的“file:///” url

xdg-open 不使用 LXDE 处理百分比编码的“file:///” url

我注意到 xdg-open 不处理百分比编码的网址。例如,这些行将成功(前提是文件存在):

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。它会删除file://URL 的一部分并pcmanfm使用剩余部分进行调用,因为 pcmanfm 仅支持普通路径作为参数,而不支持 URL。

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
}

相关内容