문맥
저는 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 설명서의 메서드를 참조하세요 .name
display_name
commandline
executable
description
get_*
Gio.AppInfo.get_commandline존재하다.
, 플러스: , , 등 DesktopAppInfo
의 모든 것 . 보다AppInfo
categories
generic_name
keywords
startup_wm_class
Gio.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
이것이 언젠가 다른 사람에게 도움이 되기를 바랍니다.