응용프로그램 메뉴에 나타나는 모든 데스크탑 파일 나열

응용프로그램 메뉴에 나타나는 모든 데스크탑 파일 나열

문맥

저는 GNOME 3.22를 사용하고 있으며 모든 데스크탑 파일을 그룹화하고 싶습니다. 이렇게 하려면 애플리케이션 메뉴에 있는 모든 데스크톱 파일을 나열하고 다음 명령을 사용해야 했습니다.이 가이드그들을 정리합니다.

이러한 데스크톱 파일이 포함된 3곳을 찾았습니다.

~/.local/share/applications
~/.local/share/flatpak/exports/share/applications
/usr/share/applications

사용이 스크립트, 나는 절반의 성공을 거두었습니다. 그러나 여전히 어떤 그룹에도 속하지 않는 일부 항목이 있습니다.

  • 이 데스크톱 파일에는 필드가 없으므로 Categories카테고리별로 관리할 수 없습니다.

  • 이 데스크탑 파일은 위에 나열된 디렉토리에 속하지 않으므로 이름을 부를 수 없습니다.

질문

분명히 그놈은 위 디렉토리의 데스크탑 파일만 나열하는 것이 아닙니다. 이를 저장할 어딘가가 있어야 하며 데스크톱 쉘은 이를 읽어 모든 응용 프로그램을 나열할 수 있습니다. 나는 그것을 볼 수 없습니다. 그것이 어디에 있는지 말해 줄 수 있나요?

고쳐 쓰다

이것은 내 "전투의 절반"입니다. 그놈 응용 프로그램 메뉴

답변1

Gio파일 시스템을 직접 검색하는 대신 이 라이브러리(Gnome이 구축된 Gtk/GObject/GLib 생태계의 일부)를 사용할 수 있습니다. Gnome, Xfce, MATE, Cinnamon 등과 같은 Gtk 기반 데스크탑 환경에서 Python과 함께 사용할 수 있습니다. gi모듈이 포함된 Python은 아무것도 설치하지 않고도 사용할 수 있어야 합니다.

from gi.repository import Gio

all_apps = Gio.AppInfo.get_all()  # Returns a list of DesktopAppInfo objects (see docs)

# For example, print display name and description of all apps
for app in all_apps:
    print(app.get_display_name())
    print(f"\t{app.get_description()}")

API 문서:Gio.App정보,Gio.DesktopApp정보

DesktopAppInfo에서 상속되었습니다 . 다른 유형이 무엇인지 AppInfo알지 못했습니다 . AppInfo반환된 개체는 인스턴스 Gio.AppInfo.get_all인 것으로 보입니다 Gio.DesktopAppInfo. 내가 아는 한, 우리는 대부분 DesktopAppInfo인스턴스를 다루고 있습니다.

이러한 DesktopAppInfo개체는 시스템에서 찾은 모든 .desktop 파일을 나타냅니다. 여기에는 * 메서드를 사용하여 액세스할 수 있는 속성이 있으며 get_.desktop 파일의 거의 모든 것을 나타냅니다.

예를 들어 ( 일반적으로 이름과 동일하지만 때로는 다른 경우도 있음), (응용 프로그램을 실행하기 위해 호출되는 인수가 있는 전체 명령줄), (명령만, 인수 없음) 등과 AppInfo같은 객체의 속성을 가져올 수 있습니다 . API 설명서의 메서드를 참조하세요 .namedisplay_namecommandlineexecutabledescriptionget_*Gio.AppInfo.get_commandline존재하다.

, 플러스: , , 등 DesktopAppInfo의 모든 것 . 보다AppInfocategoriesgeneric_namekeywordsstartup_wm_classGio.DesktopAppInfo.get_action_name앞으로

답변2

애플리케이션 메뉴 검색 경로에 대한 무료 데스크탑 사양은 다음과 같습니다.여기. 귀하의 질문에 대한 짧은 대답은 검색 경로 $XDG_DATA_DIRS의 모든 디렉토리에 "application"을 추가하는 것입니다.

답변3

이 링크는 "범주" 필드가 없는 데스크톱 파일에 도움이 될 수 있습니다. https://wiki.gentoo.org/wiki/Gnome_Applications_Folders

답변4

파티에 늦었다는 건 알지만 이 답변이 누군가가 참석하는 데 도움이 될 것입니다.

시스템에서 모든 데스크탑 파일을 찾으려면:

find / -iname "*desktop" -type f -not -path "/media*" 2> /dev/null

위 명령은 시스템의 모든 데스크탑 파일을 나열합니다. 특정 앱을 찾으려면( <application-name>앱 이름이나 이름의 일부로 바꾸고 삭제 <>):

find / -iname "*desktop" -type f -not -path "/media*" -exec grep -il <application-name> '{}' ';' 2> /dev/null

이것이 언젠가 다른 사람에게 도움이 되기를 바랍니다.

관련 정보