-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”:
非默认指示器图标的默认位置?
没有存储这些图标的默认位置。任何应用程序 (-developer) 都可以将它们存储在认为合适的位置。
然而,好消息是指标通常不会安装无穷无尽的文件和图像列表。我们可以通过(除了查看代码)查看命令的输出来限制我们的搜索:
在我的例子中
这将输出以下图像:
...这将使搜索非常有限。
来自男人
dpkg-query
:在Radiotray的情况下,我找到了以下
.png
文件(正在运行dpkg-query -L radiotray | grep png
):如果我们真的需要找出来,搜索代码
...我们可以查看(内部)安装的文件以查找字符串“icon”的匹配项。许多指标是用一种脚本语言(如
python
)编写的,这意味着它们非常易于搜索。一个例子
再次使用
radiotray
示例在输出中我们发现 ao:
查看文件
SysTrayGui.py
,我们可以看到:由此,我们可以得出结论,提到的图标是在
common
(子)目录内的模块中定义的lib
。(请参阅此处python 如何找到它的模块,子目录部分)在这个模块中,我们可以阅读以下部分:
......我们在这里......
特殊情况
借助实用的所有指标,我设法使用上述方法找到了相应的图标。
然而事实证明,将图像与代码一起编译成单个可执行文件是可能的。无需解释,在这种情况下,您将找不到单独的图像,也无法在不编辑代码和重新编译的情况下替换它们。
owncloud的案例似乎就是这样一个案例。使用上述方法显示一组图标安装在里面
/usr/share/icons/hicolor/<size>/apps
。然而,这些图标都没有在 ubuntu的指示器中使用。OP 在他问这个问题之前(和之后)做了很多工作。其中之一是运行:
...这为我们提供了一些有用的信息。输出包括一个部分:
查看目录
/tmp/iconcache-50ePXx
,我找到了指标使用的确切图标:...这似乎证明了这些图标是动态生成的;关闭 owncloud 会使目录及其图标消失。
事实证明,可以通过替换这些图标来更改指示器的图标:
这证明这些确实是我们正在寻找的图标。
然而,要自动化我手动执行的操作,需要一个脚本/包装器,因为每次启动 owncloud 时都会更改创建的目录名称。最方便的选择当然是更改 owncloud-client 的代码。
另请参阅此处的讨论。
未完待续...
图标及其潜在位置
指示器可以通过两种方式使用图标:
/usr/share/pixmaps/
,尽管有些作者可能会将指示器图标发送到其他目录。例如,Jacob Vlijm 的答案在此页面上,他也是 SpaceView 指标的作者,他选择将该指标的图标放入/opt/spaceview/icon
. 使用这些类型的图标有点棘手但并不复杂 - 使用dpkg -L <package name>
或cat /var/lib/dpkg/info/PACKAGE.list
搜索带有.png
或.svg
扩展名的图标文件。这些是最典型的/usr/share/icons
文件夹中找到。例如,在我的指标(如 Udisks Indicator)中,我经常依赖于 中的内容/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
我使用这一行来调用标准图标之一:注意缺少
.svg
或.png
扩展。因此,在这种情况下,我们有一个图标的名称,我们可以使用 Linux 标准命令(例如locate
或)来定位它find
。使用标准 Linux 工具进行搜索
如果你真的想要一个搜索图标的命令,只需使用这个简单的组合:
这是一个例子。我知道指标 diskman 使用自定义图标这一事实。那么这个命令告诉我们什么?
请注意
/usr/share/pixmaps/indicator-diskman.png
最后一张图片,这是面板上实际显示的指标。如果指标使用标准图标怎么办?显然不会有输出:
结论
虽然没有固定的标准,但图标的位置有一组典型的位置,我们可以使用它
dpkg
来查询有关每个特定包附带哪些文件的信息。最后,也许这不是最技术性的建议,但可以考虑向开发人员发送电子邮件或通过他们的 IRC 或聊天停止,并简单地问他们“嘿,你的指标使用什么图标?”。开发人员通常很高兴收到使用他们软件的人的来信,并且不介意快速回答问题。