デフォルト以外のステータスメニュー(別名インジケータ)で使用されるアイコンファイルを見つけるにはどうすればよいですか?


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)の1つで記述されているため、非常によく検索できます。

もう一度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(サブ)ディレクトリ内のモジュールで定義されていると結論付けることができますlib。(参照してください。ここでは、それがどのようにモジュールのpython発見セクションのサブディレクトリを

このモジュールでは、次のセクションを読むことができます。

# 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"

...そして、ここにいます...

例外的な状況

実用的なすべてのインジケーターで、上記の方法を使用して、対応するアイコンを見つけることができました。

ただし、画像をコードと一緒に1つの実行可能ファイルにコンパイルすることは可能です。そのような場合、別のイメージが見つからないことや、コードを編集して再コンパイルしないとそれらを置き換えることができないことを説明する必要はありません。

owncloudの場合がそうです。上記の方法を使用して、一連のアイコンが内にインストールされたことを示しました/usr/share/icons/hicolor/<size>/apps。これらのアイコンはいずれも、ubuntuのインジケーターでは使用されていません。

OPはこの質問をする前(および後)にかなりの作業を行いました。それらの1つは実行することでした:

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を閉じると、ディレクトリとそのアイコンが消えます。

これらのアイコンを置き換えることでインジケーターのアイコンを変更できることがわかりました:

ここに画像の説明を入力してください

これらが実際に探していたアイコンであることを証明しています。

ただし、私が手動で行ったことを自動化するには、owncloudが起動されるたびに作成されたディレクトリの名前が変更されるため、スクリプト/ラッパーが必要になります。もちろん、最も便利なオプションは、owncloud-clientのコードが変更されることです。

こちらのディスカッションもご覧ください。

つづく...


dpkg -L同じことをしませんか?
Kaz Wolfe

@KazWolfeどうやら、ここではそれはかかわらず、言及されていない:manpages.ubuntu.com/manpages/precise/man1/dpkg.1.html
ジェイコブVlijm

おかげで、これはラジオトレイのアイコンを見つけるのに役立ちます。私のスクリーンショット(ここではGitHubのownCloudソースコードの例)のownCloudモノクロアイコンを探しています -で返される結果には含まれていませんdpkg-query -Lfind / -name state-ok -type f見た目で検索すると機能しなくなったようですが、一晩実行しておきます。
トムBrossman 16

@TomBrossman私たちは見つけることができると確信しています。見てみるためにownCloudをインストールします。
Jacob Vlijm 16

1
@TomBrossmanサーバーが一時的にダウンしている可能性があります。一部の部分で404 -not foundエラーが発生します。ダウンロードした.debファイルを見ると、owncloudはかなりの数のアイコンをインストールし/usr/share/icons/hicolor/<size>/apps ます。残念ながら、.debファイルがインストールされません。Errors were encountered while processing:後で再試行します...
Jacob Vlijm

4

アイコンとその潜在的な場所

インジケーターがアイコンを使用する方法は2つあります。

  • カスタムアイコン。これは通常、に入りますが/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のインストールに付属しているため、私は頻繁ににあるものに依存しています。クエリdpkgでアイコンが見つからない場合は、パッケージが標準のアイコンを使用している可能性があります。

ソースに行く

インディケータがPythonまたはRubyで記述されている場合、手掛かりを見つけるためにソースコードを調べることは比較的簡単です。これらはスクリプトなので、を使用grepしてソースコードを検索するだけで十分です。CやValaなどのコンパイル済み言語にはソースコードが付属していないためapt-get source package-name、パッケージを入手した場所から、またはパッケージを入手した場所から入手する必要があります。(冒険hexdump好きなユーザーは実行可能ファイルを使用または逆コンパイルすることができますが、私見では、アイコンに対する好奇心だけではやりすぎです)。

:アイコンがやなどの標準ディレクトリの/usr/share/icons/いずれか/usr/share/pixmapsにある場合、ソフトウェアの作成者は、拡張子なしでアイコンを単に名前で呼び出すことを選択できます。たとえば、udisks-indicator私では次の行を使用して標準アイコンの1つを呼び出します。

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

不足.svgまたは.png拡張に注意してください。したがって、このケースでは、我々は、アイコンの名前を持っている、と私たちは、このようなとしてLinuxに標準コマンドを使用して、それを見つけることができますlocatefind

標準のLinuxツールを使用して検索

アイコンを検索するコマンドが本当に必要な場合は、次の簡単な組み合わせを使用してください。

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

ここに例があります。インジケーターdiskmanがカスタムアイコンを使用していることは知っています。それで、このコマンドは何を教えてくれるのでしょうか?

$ 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やチャットに立ち寄って、「インジケーターで使用しているアイコンは何か」と尋ねることを検討してください。開発者は通常、ソフトウェアを使用している人からの連絡を喜んでおり、簡単な質問に答えてもかまいません。


おかげで、この回答も非常に役に立ちましたが、私のownCloudデスクトップ同期はアイコンで奇妙なことをしており、私もそれを理解したいと思っています。
トムBrossman 16

@TomBrossman何か奇妙なことをすることで、正確にはどういう意味ですか?
Sergiy Kolodyazhnyy 2016

ownCloudのデスクトップ同期アプリケーションは、使用しないさまざまなアイコンをインストールします。私はそれらをカスタマイズして置き換えることを望んでいましたが、その場でそれらを生成するので、それ/tmpは実用的ではありません。ほとんどのアプリケーションでそれらをカスタマイズすることは、インストールされたアイコンセットを使用するため、あなたの答えを使用して簡単です。
トムBrossman 16
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.