기본 파일 관리자를 설정하고 기본 파일 관리자를 사용하여 파일 찾기

기본 파일 관리자를 설정하고 기본 파일 관리자를 사용하여 파일 찾기

내 질문을 읽기 전에 중복으로 표시하지 마십시오. 이러한 질문이 이미 존재한다는 것을 알고 있지만 기존 답변이 예상대로 작동하지 않아 이 질문을 하게 됩니다.

기존 답변에 따르면 기본 파일 관리자를 설정하는 방법은 xdg-mime default <app name> inode/directory, 기본 파일 관리자를 사용하여 파일을 찾는 방법은 입니다 dbus-send --session --print-reply --dest=org.freedesktop.FileManager1 --type=method_call /org/freedesktop/FileManager1 org.freedesktop.FileManager1.ShowItems array:string:"<path>" string:"".

그러나 일부 Arch 기반 배포판(Gnome이 포함된 Arch 포함)에서 테스트할 때 Nemo 파일 관리자(Gnome의 기본 파일 관리자는 Gnome Files임)를 설치한 후 명령이 지시된 파일 관리자대로 dbus-send열리지 않는 경우가 있었습니다 . 출력 xdg-mime query default시 위 명령 은 Gnome Files를 열고 전자가 "org.gnome.Nautilus.desktop"을 출력하면 후자는 Nemo를 엽니다. (실행 중인 파일 관리자가 없는 경우입니다. 파일 관리자의 인스턴스가 이미 존재하는 경우 명령은 해당 파일 관리자를 사용하는 것으로 나타납니다.)xdg-mime query default inode/directorynemo.desktopdbus-send...dbus-send

dbus-send위 명령이 "기본 파일 관리자를 사용하여 파일 찾기"에 대한 올바른 명령입니까? 위 명령이 예상대로 작동하지 않지만 dbus-send파일을 마우스 오른쪽 버튼으로 클릭하고 "다음으로 열기"를 클릭한 다음 파일 관리자 이름을 클릭하면 JetBrain의 IDE(예: Android Studio 또는 IntelllJ)에서 기본 파일 관리자를 사용합니다. 올바르게 발견되었습니다. 나는 그들의 소스 코드를 연구하고 싶지만 그것은 거대한 응용 프로그램이고 검색을 시도하고 있습니다.그들의 소스 코드결과가 반환되지 않습니다("열기" 또는 "파일 관리자"와 같은 키워드를 사용했습니다).

답변1

이 두 가지 구성은 시스템에 실제로 "기본 파일 관리자"라는 통일된 개념이 없기 때문에 서로 관련이 없습니다. xdg-mimeMIME 유형 연결만 변경하지만 org.freedesktop.FileManager1프로그램이 D-Bus를 통해 통신을 시도할 때 활성화된 서비스에는 전혀 영향을 미치지 않습니다.

(이는 .html 파일과 http:// URL이 다른 프로그램과 연결되는 방식과 다소 유사합니다.)

레거시 이유로 인해 dbus-daemon은 여러 .service파일이 동일한 서비스 이름을 제공한다고 선언할 수 있도록 허용합니다. (이것은 서비스가 활성화된 경우에만 중요합니다.아직 아님실행 중입니다. 실행 중인 프로세스에서 이미 이름을 주장한 경우 활성화가 사용되지 않습니다. )

첫 번째 단계는 어떤 D-Bus .service 파일이 이름을 제공하는지 찾는 것입니다.

$ grep -rl Name=org.freedesktop.FileManager1 /usr/share/dbus-1/services
/usr/share/dbus-1/services/org.kde.dolphin.FileManager1.service
/usr/share/dbus-1/services/org.xfce.Thunar.FileManager1.service
/usr/share/dbus-1/services/org.freedesktop.FileManager1.service

(파일 이름이 그들이 제공하는 서비스 이름과 일치하지 않는다는 점은 염두에 두지 마십시오.)

그런 다음 다음을 통해 원하지 않는 서비스를 무시하십시오 ~/.local/share/dbus-1.

$ mkdir -p ~/.local/share/dbus-1/services
$ ln -s /dev/null ~/.local/share/dbus-1/services/org.xfce.Thunar.FileManager1.service
$ ln -s /dev/null ~/.local/share/dbus-1/services/org.kde.dolphin.FileManager1.service

실제로 이름이 지정된 것은 org.freedesktop.FileManager1.serviceNautilus이므로 그대로 유지될 수 있습니다.

$ cat org.freedesktop.FileManager1.service 
[D-BUS Service]
Name=org.freedesktop.FileManager1
Exec=/usr/bin/nautilus --gapplication-service

작동하는지 확인하십시오.

$ urlencode() {
    echo -n "$1" | perl -pe's/[^\/A-Za-z0-9_.!~,=-]/sprintf"%%%02X",ord$&/gse'
  }
$ uri="file://$(urlencode "$path")"
$ gdbus call -e -d org.freedesktop.FileManager1 \
                -o /org/freedesktop/FileManager1 \
                -m org.freedesktop.FileManager1.ShowItems \
                "['$uri']" \
                "''"

관련 정보