~처럼이 문제, Mendeley를 사용하여 PDF를 여는 일부 응용 프로그램(Caliber, texdoc)이 있습니다. Thunar, Thunderbird, Firefox 등에서 PDF를 열면 예상되는 기본값인 evince가 열립니다.
다음 앱은 다음을 사용하는 것으로 보입니다 xdg-open
.
$ xdg-mime query default application/pdf
mendeleydesktop.desktop
나찾으려고 노력 중이것은 어디서 왔지만 성공하지 못했습니다.
xdg-mime default evince.desktop application/pdf
질문은 남아 있습니다. xdg-open
Mendeley가 기본 PDF 뷰어가 되어야 한다는 아이디어는 어디서 나온 것입니까?
저는 우분투 16.04와 i3 4.11을 사용하고 있습니다. xdg-open
버전은 1.1.0 rc3입니다.
답변1
질문은 남아 있습니다.
xdg-open
Mendeley가 기본 PDF 뷰어가 되어야 한다는 아이디어는 어디서 나온 것입니까?
이것은 매우 타당한 질문입니다. 이것은 세 부분으로 나누어진 약간 긴 답변입니다.
옵션 1: 설명서 읽기
예를 들어,무료 데스크탑 표준 MIME 유형 연관에 대해 다음과 같은 말이 있습니다.
MIME 유형과 애플리케이션 간의 연관
사용자, 시스템 관리자, 응용 프로그램 공급업체 및 배포판은 mimeapps.list라는 파일에 기록하여 응용 프로그램과 MIME 유형 간의 연결을 변경할 수 있습니다.
파일은 다음 순서로 검색됩니다.
$XDG_CONFIG_HOME/$desktop-mimeapps.list user overrides, desktop-specific (for advanced users) $XDG_CONFIG_HOME/mimeapps.list user overrides (recommended location for user configuration GUIs) $XDG_CONFIG_DIRS/$desktop-mimeapps.list sysadmin and ISV overrides, desktop-specific $XDG_CONFIG_DIRS/mimeapps.list sysadmin and ISV overrides $XDG_DATA_HOME/applications/$desktop-mimeapps.list for completeness, deprecated, desktop-specific $XDG_DATA_HOME/applications/mimeapps.list for compatibility, deprecated $XDG_DATA_DIRS/applications/$desktop-mimeapps.list distribution-provided defaults, desktop-specific $XDG_DATA_DIRS/applications/mimeapps.list distribution-provided defaults
이 표에서 는
$desktop
현재 데스크탑의 이름 중 하나이며 소문자입니다(예: kde, gnome, xfce 등).
환경 변수가 XDG_CONFIG_HOME
및 와 같은 경우 XDG_DATA_HOME
에는기본값으로 되돌리기.
$XDG_DATA_HOME
사용자별 데이터 파일이 저장되어야 하는 상대 기본 디렉터리를 정의합니다. 설정되지 않거나 비어 있는 경우$XDG_DATA_HOME
$HOME/.local/share와 동일한 기본값을 사용해야 합니다.
$XDG_CONFIG_HOME
사용자별 구성 파일을 저장해야 하는 상대 기본 디렉터리를 정의합니다. 설정되지 않거나 비어 있는 경우$XDG_CONFIG_HOME
기본값은 같음을 사용해야 합니다.$HOME/.config
이는 MIME 유형 연관의 가장 까다로운 측면 중 하나를 보여줍니다. 이는 다양한 위치에서 설정될 수 있으며 이러한 설정은 다른 위치에서 재정의될 수 있습니다. 그러나 ~/.config/mimeapps.list
우리는 그것을 우리 자신의 협회를 설립하는 데 사용해야 합니다.
이는 또한 다음과 일치합니다.그놈 데스크탑 문서.
~/.config/mimeapps.list
개별 사용자에 대한 시스템 기본 설정을 재정의하려면 기본 등록 응용 프로그램을 재정의하려는 MIME 유형 목록이 포함된 파일을 생성해야 합니다 .
그리고 이 유용한 정보는 다음과 같습니다.
gio mime 명령을 사용하여 기본 등록 애플리케이션이 올바르게 설정되었는지 확인할 수 있습니다.
$ gio mime text/html Default application for “text/html”: myapplication1.desktop Registered applications: myapplication1.desktop epiphany.desktop Recommended applications: myapplication1.desktop epiphany.desktop
MIME 유형 연결을 확인하는 크로스 플랫폼 명령은 다음과 같습니다.
xdg-mime query default application/pdf
그놈의 경우 명령은 다음과 같습니다.
gio mime application/pdf
KDE 플라즈마의 경우 명령은 다음과 같습니다:
ktraderclient5 --mimetype application/pdf
내 파일을 보면 ~/.config/mimeapps.list
다음과 같습니다.
[Added Associations]
application/epub+zip=calibre-ebook-viewer.desktop;org.gnome.FileRoller.desktop;
<snip>
application/pdf=evince.desktop;qpdfview.desktop;okularApplication_pdf.desktop;<snip>
<snip>
[Default Applications]
application/epub+zip=calibre-ebook-viewer.desktop
<snip>
application/pdf=evince.desktop;
application/pdf
아래에는 항목이 하나만 있는 것을 볼 수 있습니다 . PDF 파일의 기본 처리기도 [Default Applications]
마찬가지 입니다. evince.desktop
Mendeley가 설치되어 있지 않지만 이를 기본 PDF 처리기로 만드는 한 가지 방법은 evince.desktop
.
여기에 있는 문서가 정확하다고 생각하지만 ~/.config/mimeapps.list
실제로는 확실하지 않습니다. 이에 대해서는 3부에서 다시 다루겠습니다.
옵션 2: 소스 코드를 읽어보세요.
xdg-open
의 값에 따라 동작이 달라지는 쉘 스크립트입니다 $XDG_CURRENT_DESKTOP
. 너는 볼 수있어어떻게 작동하나요?:
if [ -n "${XDG_CURRENT_DESKTOP}" ]; then
case "${XDG_CURRENT_DESKTOP}" in
# only recently added to menu-spec, pre-spec X- still in use
Cinnamon|X-Cinnamon)
DE=cinnamon;
;;
ENLIGHTENMENT)
DE=enlightenment;
;;
# GNOME, GNOME-Classic:GNOME, or GNOME-Flashback:GNOME
GNOME*)
DE=gnome;
;;
KDE)
DE=kde;
;;
을 사용하고 있으므로 i3
변수 DE
는 로 설정되고 generic
스크립트는 해당 변수를 호출합니다.open_generic()
기능, 이는 설치된 항목에 따라 차례로 호출됩니다 run-mailcap
.mimeopen
설정을 통해 몇 가지 추가 정보를 얻을 수 있습니다 XDG_UTILS_DEBUG_LEVEL
.
XDG_UTILS_DEBUG_LEVEL=4 xdg-open ~/path/to/example.pdf
그러나 디버깅 정보는 우리의 목적에 비해 풍부하지 않습니다.
옵션 3: 열린 파일을 추적합니다.
dconf
이전 조사를 통해 우리는 MIME 유형 연결이 환경 변수나 설정 등이 아닌 하드 드라이브의 파일에 저장된다는 것을 알고 있습니다. 즉, 문서에 의존할 필요가 없으며 문서를 사용하여 명령이 실제로 열리는 파일을 확인할 수 있습니다 strace
. mimetype xdg-open
의 경우 application/pdf
다음을 사용할 수 있습니다.
strace -f -e trace=open,openat,creat -o strace_log.txt xdg-open /path/to/example.pdf
이는 자식 프로세스가 자체적으로 모든 작업을 수행하는 것은 아니기 -f
때문에 자식 프로세스를 추적하기 위한 것입니다 .xdg-open
목적은 -e trace=open,openat,creat
시스템 호출만 추적하는 것 입니다 open
. 이는 매뉴얼 페이지 또는 매뉴얼 페이지에서 가져온 것입니다.openat
creat
man 2 open
온라인.
이는 -o strace_log.txt
나중에 검사할 수 있도록 로그 파일에 저장됩니다.
출력이 약간 크지만 ENOENT (No such file or directory)
파일이 존재하지 않으므로 이 줄을 무시할 수 있습니다.
xdg-mime
또는 같은 다른 명령을 사용할 수도 있습니다 gio mime
. gio mime
내 홈 디렉토리에서 다음 파일을 읽는 것을 발견했습니다 .
~/.local/share//mime/mime.cache
~/.config/mimeapps.list
~/.local/share/applications
~/.local/share/applications/mimeapps.list
~/.local/share/applications/defaults.list
~/.local/share/applications/mimeinfo.cache
또한 다음과 같은 시스템 수준 파일을 읽습니다.
/usr/share/mime/mime.cache
/usr/share/applications/defaults.list
/usr/share/applications/mimeinfo.cache
/var/lib/snapd/desktop/applications
/var/lib/snapd/desktop/applications/mimeinfo.cache
상관 관계를 찾으려면 application/pdf
다음과 같이 해야 합니다.
grep 'application/pdf' ~/.local/share//mime/mime.cache ~/.config/mimeapps.list ~/.local/share/applications ~/.local/share/applications/mimeapps.list ~/.local/share/applications/defaults.list ~/.local/share/applications/mimeinfo.cache /usr/share/mime/mime.cache /usr/share/applications/defaults.list /usr/share/applications/mimeinfo.cache /var/lib/snapd/desktop/applications /var/lib/snapd/desktop/applications/mimeinfo.cache | less
여기에서 Mendeley의 데스크톱 파일이 추가된 위치를 확인할 수 있습니다.
Mendeley를 사용하여 PDF를 여는 몇 가지 응용 프로그램(Caliber, texdoc)이 있습니다. Thunar, Thunderbird, Firefox 등에서 PDF를 열면 예상되는 기본값인 evince가 열립니다.
파이어폭스와 썬더버드는자체 기본 애플리케이션 설정. 나는 texdoc
그것이 에 달려 있다고 믿습니다 xdg-open
. Thunar에 대해서는 잘 모르겠지만 xdg-open
.
따라서 궁극적으로 이는 다음과 같은 원인일 수 있습니다.
xdg-open
i3
및 다른 앱과 비교하여 대체 기능이 다릅니다 .Mendeley의 설치 프로그램은 일부 파일에는 MIME 유형 연결을 추가하지만 다른 파일에는 추가하지 않습니다.
부록: 위 파일은 xdg-open
사용하면 안 되지만 , 재생성해야 하는 경우에는 다음 명령을 사용하세요.mimeinfo.cache
i3
update-desktop-database ~/.local/share/applications
문서는 다음과 같습니다.
MIME 유형 캐싱
모든 데스크톱 파일을 구문 분석하는 비용을 줄이려면 데스크톱 데이터베이스 업데이트제공된 프로그램은 캐시 파일을 생성합니다. 이 개념은 응용 프로그램이 (잠재적으로) 수백 개의 파일을 읽는 것을 방지할 수 있다는 점에서 "update-mime-database" 프로그램과 동일합니다. 각 데스크탑 파일을 설치한 후 실행해야 합니다. $XDG_DATA_DIRS/applications/에 디렉터리별로 캐시 파일이 생성되며, $XDG_DATA_DIRS/applications/mimeinfo.cache라는 파일이 생성됩니다.
https://specations.freedesktop.org/desktop-entry-spec/0.9.5/ar01s07.html
관련된: