如何获取某个窗口类的图标?

如何获取某个窗口类的图标?

我正在编写一个脚本来快速列出我打开的许多窗口。我已根据它们的类别对它们进行了分组。我想向该组添加一个图标。

我用控制端获取窗口列表:

wmctrl -lx | egrep -v "0x.*(0 N/A)|-1" | sort -k3

管道egrep过滤掉了后台服务。第三
sort按类别对窗口进行分组。

这是一个示例输出:

0x05a00001  0 google-chrome.Google-chrome  ubunzeus (8) Newest Questions - Ask Ubuntu - Google Chrome
0x05a00028  0 google-chrome.Google-chrome  ubunzeus How to get the icon of a window class? - Ask Ubuntu - Google Chrome
0x06c00010  0 Mail.Thunderbird      ubunzeus Inbox - L. D. James - Mozilla Thunderbird

窗口类是输出的第三列。

如果我可以访问图标(在此示例中,google-chrome.Google-chromeMail.Thunderbird),我可以将图像与这些块关联起来。

有人知道 Ubuntu 将这些图像存储在哪里吗?我相信它们被称为 mime 图像或类似的东西。

答案1

虽然我确信有更优雅和正式的方法,但我已经找到了一种获取图标的解决方法。

您可以通过搜索桌面启动器并查看条目来找到与应用程序相关的图标icon=

在问题中的 `` 示例中,您将搜索“。”点后的名称,即Google-chrome

此命令行将提供桌面启动器

$ egrep -ir "\b$Google-chrome\b" /usr/share/applications/*.desktop ${HOME}/.local/share/applications/*.desktop | head -1

这将为 Chrome 桌面启动器提供:

/usr/share/applications/google-chrome.desktop

现在搜索条目icon

$ egrep -i "icon=" /usr/share/applications/google-chrome.desktop
Icon=google-chrome

在这种情况下,启动器没有完整路径,您可以发现它是当前主题的图标,可以使用提供的 python 脚本找到它斯蒂法诺·帕拉佐

答案2

将 wm_class 作为参数传递给以下函数。

#!/usr/bin/env gjs

const { Gio } = imports.gi;

let icon = Gio.AppInfo.get_all().find(a => a.get_startup_wm_class() == ARGV[0]).get_icon().to_string();

print(icon);

相关内容