Использование сценария оболочки: Как получить имя иконки (или путь) открытого окна в оконном менеджере на основе X?
Я могу получить идентификаторы окон и заголовки окон, используя wmctrl
, но до сих пор я не смог получить путь к иконке, используемой окном. Я пробовал смотреть на утилиты xdg, но самым близким была установка / удаление значков.
Есть ли способ получить имя значка, используемого XDG/GTK, или путь dir к значку в сценарии / командной строке оболочки?
2 ответа
Таким образом, вместо имени вы можете получить само изображение:
xprop -id THE_WINDOW_ID -notype 32c _NET_WM_ICON |
perl -0777 -pe '@_=/\d+/g;
printf "P7\nWIDTH %d\nHEIGHT %d\nDEPTH 4\nMAXVAL 255\nTUPLTYPE RGB_ALPHA\nENDHDR\n", splice@_,0,2;
$_=pack "N*", @_;
s/(.)(...)/$2$1/gs' > icon.pam
Вы можете передать, что выход pamrgbatopng
(от netpbm
) чтобы получить изображение в формате PNG:
xprop -id THE_WINDOW_ID ... | perl -0777 ... | pamrgbatopng > the_icon.png
Хакерский, довольно медленный, но это что-то.
Кредиты: Это сочетание ответа @ Thomas Dickey с [Как вывести значок работающей программы X?] ( https://unix.stackexchange.com/questions/48860/how-to-dump-the-icon-of-a-running-x-program.
Вы не можете получить это от wmctrl
потому что он знает только о свойствах окна. Ни одно из свойств, связанных со значками, в подсказках Extended Window Manager не указывает, где находится значок. Это потому, что это может быть растровое изображение в памяти (как это делает xterm для некоторых конфигураций, начиная с патча № 282).
Предположительно, вы уже знаете об этих свойствах:
Но это только отправная точка. Предполагая, что есть файл значков, вы должны искать его в дереве каталогов, где находятся значки, например, /usr/share/pixmaps
в соответствии с текущей темой.
Аналогичный вопрос был задан в разделе Каков абсолютный путь к значку, объявленному в файле.desktop?, который указывает на
- Спецификация темы значков (с указанием разметки каталога и псевдокода)
- Как я могу получить полный путь к файлу имени иконки? (с ответом в виде скрипта на питоне).
Получение названия темы зависит от рабочего стола. Соответствующий вопрос (и ответ) можно найти в поиске темы значков, не зависящих от рабочего стола.