기본이 아닌 상태 메뉴 (일명 표시기)에서 사용되는 아이콘 파일을 찾으려면 어떻게합니까?


9

기본이 아닌 일부 상태 메뉴 (응용 프로그램 표시기 또는 표시기 애플릿이라고도 함)에서 사용되는 아이콘의 위치를 ​​찾고 싶습니다 .

여기에 이미지 설명을 입력하십시오

이 아이콘 이미지 파일은 어디에 있습니까?

내 스크린 샷에는 ownCloud 및 Radiotray가 있지만이 특정 아이콘과 관련이없는 일반적인 답변을 원합니다. 파일 이름이나 파일 형식을 모르므로 검색하기가 어렵습니다.

답변:


9

기본이 아닌 표시기 아이콘의 기본 위치?

이 아이콘이 저장되는 기본 위치는 없습니다. 모든 응용 프로그램 (개발자)은 적절한 것으로 간주되는 곳에 저장할 수 있습니다.

그러나 좋은 소식은 지표가 일반적으로 끝없는 파일과 이미지 목록을 설치하지 않는다는 것입니다. 명령의 출력을 조사하여 (코드를 보지 않고) 검색을 제한 할 수 있습니다.

dpkg-query -L <packagename>

나의 예에서

dpkg-query -L placesfiles

여기에 이미지 설명을 입력하십시오

이것은 다음과 같은 이미지를 출력합니다.

/opt/placesfiles/images/dir_icon.png
/opt/placesfiles/images/placesfiles64.png
/usr/share/pixmaps/placesfiles.png

... 검색을 매우 제한적으로 만들 것입니다.

남자에서 dpkg-query:

   -l, --list [package-name-pattern...]
          List packages matching given pattern. If no package-name-pattern
          is  given,  list all packages in /var/lib/dpkg/status, excluding
          the ones marked as not-installed (i.e.  those  which  have  been
          previously purged). Normal shell wildcard characters are allowed
          in package-name-pattern. Please note you will probably  have  to
          quote  package-name-pattern to prevent the shell from performing
          filename expansion. For example this will list all package names
          starting with “libc6”:

Radiotray 의 경우 다음 .png파일을 찾았습니다 (실행 중 dpkg-query -L radiotray | grep png).

/usr/share/radiotray/images/radiotray_connecting.png
/usr/share/radiotray/images/radiotray_on.png
/usr/share/radiotray/images/radiotray_off.png
/usr/share/radiotray/images/radiotray.png
/usr/share/pixmaps/radiotray.png

우리가 정말로 알아야 할 경우 , 코드 검색

... 설치된 파일을 통해 "icon"문자열과 일치하는지 확인할 수 있습니다. 많은 지표는 스크립트 언어 중 하나 (예 :)로 작성 python되므로 검색이 매우 용이합니다 .

다시 radiotray예제를 사용하여

dpkg-query -L radiotray | xargs grep icon

출력에서 우리는 ao를 찾습니다.

/usr/lib/python2.7/dist-packages/radiotray/SysTrayGui.py 
                 self.icon.set_from_file(APP_ICON_CONNECT)

파일을 살펴보면 다음을 SysTrayGui.py볼 수 있습니다.

from lib.common import APPNAME, APPVERSION, APP_ICON_ON, APP_ICON_OFF, APP_ICON_CONNECT, APP_INDICATOR_ICON_ON, APP_INDICATOR_ICON_OFF

이것으로부터 언급 된 아이콘이 common(sub) 디렉토리 안의 모듈에 정의되어 있다고 결론 지을 수 있습니다 lib. (참조 여기 파이썬은 모듈 찾는 방법, 섹션의 하위 디렉토리를 )

이 모듈에서는 다음 섹션을 읽을 수 있습니다.

# Media path
if os.path.exists(os.path.abspath('../data/images/')):
    IMAGE_PATH = os.path.abspath('../data/images/')
else:
    IMAGE_PATH = '%s/%s/images' % (datadir, APPDIRNAME)

# Images
APP_ICON = os.path.join(IMAGE_PATH, 'radiotray.png')
APP_ICON_ON = os.path.join(IMAGE_PATH, 'radiotray_on.png')
APP_ICON_OFF = os.path.join(IMAGE_PATH, 'radiotray_off.png')
APP_ICON_CONNECT = os.path.join(IMAGE_PATH, 'radiotray_connecting.gif')
APP_INDICATOR_ICON_ON = "radiotray_on"
APP_INDICATOR_ICON_OFF = "radiotray_off"
APP_INDICATOR_ICON_CONNECT = "radiotray_connecting"

... 그리고 우리는 ...

예외적 인 상황

실질적으로 모든 지표를 사용하여 위의 방법을 사용하여 해당 아이콘을 찾을 수있었습니다.

그러나 코드와 함께 이미지를 단일 실행 파일로 컴파일하는 것이 가능하다는 것이 밝혀졌습니다. 이러한 경우 별도의 이미지를 찾을 수 없으며 코드를 편집하고 다시 컴파일하지 않고도 이미지를 교체 할 수 없습니다.

owncloud의 경우가 그런 경우 인 것 같습니다. 위의 방법을 사용하면 내부에 일련의 아이콘이 설치되었음을 알 수 있습니다 /usr/share/icons/hicolor/<size>/apps. 그러나 이들 아이콘 중 어느 것도 우분투 의 표시기 에서 사용되는 것으로 밝혀지지 않았습니다 .

OP는이 질문을하기 전과 후에 상당히 많은 작업을 수행했습니다. 그들 중 하나는 다음을 실행하는 것이 었습니다.

gdbus call --session --dest com.canonical.indicator.application --object-path /com/canonical/indicator/application/service --method com.canonical.indicator.application.service.GetApplications

... 이것은 우리에게 유용한 정보를 제공합니다. 출력에는 섹션이 포함되었습니다.

('146028888067', 2, 'org.kde.StatusNotifierItem-22055-1', '/StatusNotifierItem/menu', '/tmp/iconcache-50ePXx', '', '', '', 'owncloud', 'ownCloud')

디렉토리를 살펴보면 /tmp/iconcache-50ePXx표시기에 사용 된 정확한 아이콘을 찾았습니다.

여기에 이미지 설명을 입력하십시오 여기에 이미지 설명을 입력하십시오 여기에 이미지 설명을 입력하십시오

...이 아이콘이 즉시 생성된다는 것을 증명하는 것 같습니다. owncloud를 닫으면 디렉토리와 해당 아이콘이 사라집니다.

다음 아이콘을 교체하여 표시기 아이콘을 변경할 수있는 것으로 나타났습니다.

여기에 이미지 설명을 입력하십시오

이것들이 실제로 우리가 찾고 있던 아이콘임을 증명합니다.

그러나 수동으로 수행 한 작업을 자동화하려면 자체 클라우드가 실행될 때마다 생성 된 디렉토리 이름이 변경되므로 스크립트 / 래퍼가 필요합니다. 물론 가장 편리한 옵션은 자체 클라우드 클라이언트의 코드가 변경되는 것입니다.

여기에 대한 토론도 참조 하십시오 .

계속하려면 ...


하지 않습니다 dpkg -L같은 일을?
Kaz Wolfe

@KazWolfe 분명히, 여기에 언급되지 않았습니다 : manpages.ubuntu.com/manpages/precise/man1/dpkg.1.html
Jacob Vlijm

고마워, 이것은 Radiotray 아이콘을 찾는 데 도움이됩니다. 스크린 샷에서 자체 클라우드 단색 아이콘을 사용하고 있습니다 ( 예 : 여기 GitHub의 ownCloud 소스 코드에서 )-로 반환 된 결과 중 하나가 아닙니다 dpkg-query -L. 검색 find / -name state-ok -type f이 중단 된 것으로 보이지만 밤새 실행합니다.
Tom Brossman

@TomBrossman 우리가 찾을 수 있다고 확신합니다. 내가 볼 자신의 클라우드를 설치합니다.
Jacob Vlijm

1
@TomBrossman 서버가 일시적으로 다운되었을 수 있습니다. 일부 부분에서 404-찾을 수없는 오류가 발생했습니다 .. 다운로드 한 .deb 파일을 살펴보면 owncloud가 상당히 많은 아이콘을 설치합니다 /usr/share/icons/hicolor/<size>/apps . 불행히도, .deb 파일은 설치되지 않습니다 : Errors were encountered while processing:나중에 다시 시도하겠습니다 ...
Jacob Vlijm

4

아이콘과 잠재적 위치

표시기가 아이콘을 사용할 수있는 두 가지 방법이 있습니다.

  • 사용자 정의 아이콘. /usr/share/pixmaps/일부 작성자가 다른 디렉토리로 표시기 아이콘을 보낼 수는 있지만 일반적으로로 이동 합니다. 예를 들어이 페이지에 답변이 있고 SpaceView 표시기의 작성자 인 Jacob Vlijm은 해당 표시기의 아이콘을에 배치하도록 선택했습니다 /opt/spaceview/icon. 이러한 유형의 아이콘을 사용하면 약간 까다 롭지 만 복잡하지는 않습니다 . 아이콘 파일을 사용 하거나 확장 한 아이콘 파일을 사용 dpkg -L <package name>하거나 cat /var/lib/dpkg/info/PACKAGE.list검색하십시오 . 이들은 가장 전형적인.png.svg
  • 테마별 표준 아이콘. 이들은 일반적으로 /usr/share/icons폴더 에서 찾을 수 있습니다 . 예를 들어, Udisks 표시기와 같은 표시기에서 나는 /usr/share/icons/gnome표준에 있으며 Ubuntu 설치와 함께 제공 되는 내용에 자주 의존 합니다. querying dpkg에서 아이콘을 찾지 못하면 패키지가 표준 아이콘을 사용할 가능성이 있습니다.

소스로 이동

파이썬이나 루비로 인디케이터를 작성하는 경우, 소스 코드를 통해 실마리를 찾기가 상대적으로 쉬울 수 있습니다. 스크립트이기 때문에 grep소스 코드를 검색 하기에 충분 합니다. C 및 Vala와 같은 컴파일 된 언어에는 소스 코드가 제공되지 않으므로 apt-get source package-name패키지 를 구 하거나 어디서나 소스 코드를 구해야합니다 . (모험적인 사용자 hexdump는 실행 파일을 사용 하거나 디 컴파일 할 수 있지만 IMHO는 아이콘에 대한 호기심 때문에 너무 많은 작업을 수행합니다).

참고 : 아이콘이 /usr/share/icons/또는 과 같은 표준 디렉토리 중 하나에있는 /usr/share/pixmaps경우 소프트웨어 작성자는 확장자없이 이름으로 간단히 아이콘을 호출하도록 선택할 수 있습니다. 예를 들어, udisks-indicator나는이 줄을 사용하여 표준 아이콘 중 하나를 호출합니다.

self.app.set_icon("drive-harddisk-symbolic")

부족 .svg또는 .png확장에 주목하십시오 . 따라서이 경우 아이콘 이름이 있으며 Linux 표준 명령 (예 : locate또는)을 사용하여 아이콘을 찾을 수 있습니다 find.

표준 Linux 도구를 사용하여 검색

아이콘을 검색하는 명령을 실제로 원한다면 다음과 같은 간단한 조합을 사용하십시오.

dpkg -L <Package name here> | xargs file  | grep -i image

다음은 예입니다. 표시 디스크 맨이 사용자 정의 아이콘을 사용한다는 사실을 알고 있습니다. 이 명령은 무엇을 알려줍니까?

$ dpkg -L indicator-diskman | xargs file  | grep -i image                                                                
/usr/share/indicator-diskman/images:                    directory
/usr/share/indicator-diskman/images/drive-harddisk.svg: SVG Scalable Vector Graphics image
/usr/share/indicator-diskman/images/media-optical.png:  PNG image data, 64 x 64, 8-bit/color RGBA, non-interlaced
/usr/share/indicator-diskman/images/disks.png:          PNG image data, 64 x 64, 8-bit gray+alpha, non-interlaced
/usr/share/indicator-diskman/images/locked.png:         PNG image data, 16 x 16, 8-bit/color RGBA, non-interlaced
/usr/share/indicator-diskman/images/lock.svg:           SVG Scalable Vector Graphics image
/usr/share/indicator-diskman/images/unlocked.png:       PNG image data, 16 x 16, 8-bit/color RGBA, non-interlaced
/usr/share/indicator-diskman/images/media-eject.svg:    SVG Scalable Vector Graphics image
/usr/share/indicator-diskman/images/disk.png:           PNG image data, 32 x 32, 8-bit/color RGBA, non-interlaced
/usr/share/pixmaps/indicator-diskman.png:               PNG image data, 64 x 64, 8-bit gray+alpha, non-interlaced

통지 /usr/share/pixmaps/indicator-diskman.png무엇 패널의 표시등이 실제로 쇼이다, 마지막 이미지를.

그리고 지표가 표준 아이콘을 사용한다면 어떨까요? 분명히 출력이 없을 것입니다 :

$ dpkg -L udisks-indicator | xargs file  | grep -i image                                                                 

$

결론

표준은 정해져 있지는 않지만 아이콘이 표시되는 일반적인 위치 dpkg가 있으며 각 패키지와 함께 제공되는 파일에 대한 정보를 쿼리 하는 데 사용할 수 있습니다 . 마지막으로 가장 기술적 인 제안은 아니지만 개발자에게 전자 메일을 보내거나 IRC 또는 채팅으로 중지하고 단순히 "어떻게 표시기가 어떤 아이콘을 사용합니까?"라고 물어보십시오. 개발자는 일반적으로 소프트웨어를 사용하는 사람들의 의견을 듣고 기뻐하며 빠른 질문에 대답하지 않습니다.


감사합니다.이 답변도 매우 도움이되었지만 내 고유 한 클라우드 데스크톱 동기화가 아이콘으로 이상한 일을하고 있으며 그 사실도 알아 내고 싶습니다.
Tom Brossman

@TomBrossman 이상한 일을함으로써 정확히 무엇을 의미합니까?
Sergiy Kolodyazhnyy

ownCloud의 Desktop Sync 응용 프로그램은 사용하지 않는 다양한 아이콘을 설치합니다. 나는 그것들을 커스터마이즈하고 교체하기를 희망했지만 실제로 생성하기 /tmp때문에 실용적이지 않습니다. 설치된 아이콘 세트를 사용하기 때문에 대부분의 응용 프로그램에 맞게 사용자 정의하는 것은 대답을 사용하는 것이 쉽습니다.
Tom Brossman
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.