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공백으로 변환되지 않습니다. 이것은 버그입니다(데비안에서 이에 대한 버그 보고서를 자유롭게 열어주세요). 수정 사항은 아래에 설명되어 있습니다.

다른 데스크탑 환경의 경우 개방형 프로그램은 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
}

관련 정보