답변:
이 아이콘이 저장되는 기본 위치는 없습니다. 모든 응용 프로그램 (개발자)은 적절한 것으로 간주되는 곳에 저장할 수 있습니다.
그러나 좋은 소식은 지표가 일반적으로 끝없는 파일과 이미지 목록을 설치하지 않는다는 것입니다. 명령의 출력을 조사하여 (코드를 보지 않고) 검색을 제한 할 수 있습니다.
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-query -L
. 검색 find / -name state-ok -type f
이 중단 된 것으로 보이지만 밤새 실행합니다.
/usr/share/icons/hicolor/<size>/apps
. 불행히도, .deb 파일은 설치되지 않습니다 : Errors were encountered while processing:
나중에 다시 시도하겠습니다 ...
표시기가 아이콘을 사용할 수있는 두 가지 방법이 있습니다.
/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
.
아이콘을 검색하는 명령을 실제로 원한다면 다음과 같은 간단한 조합을 사용하십시오.
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 또는 채팅으로 중지하고 단순히 "어떻게 표시기가 어떤 아이콘을 사용합니까?"라고 물어보십시오. 개발자는 일반적으로 소프트웨어를 사용하는 사람들의 의견을 듣고 기뻐하며 빠른 질문에 대답하지 않습니다.
/tmp
때문에 실용적이지 않습니다. 설치된 아이콘 세트를 사용하기 때문에 대부분의 응용 프로그램에 맞게 사용자 정의하는 것은 대답을 사용하는 것이 쉽습니다.
dpkg -L
같은 일을?