Вопрос Показать иконки окна (отключить иконки запуска) в новом диспетчере задач KDE Plasma (16.04)


У меня проблема, которая раздражает меня до неузнаваемости

У меня есть рабочий процесс, в котором несколько окон одной программы контролируются скриптом и в соответствии с состоянием значка окна программы X обновляется, чтобы отразить необходимое действие (set-icon $WINID state.png). Некоторое время он работал неплохо, однако недавно я обновил свою коробку до Kubuntu 16.04 - и это была худшая идея КОГДА-ЛИБО.

Похоже, что флаг диспетчера задач «Использовать значки запуска» был удален, и больше не отключить его - Plasma сил используя значки запуска (всегда).

Кроме того, этот вариант, похоже, полностью удаляется из файлов конфигурации.

Мой вопрос: возможно ли восстановить эту функциональность? Восстановить устаревшую версию диспетчера задач?

Или есть ли другой способ изменения (по сценарию) значков кнопок на панели задач?

Я попытался полностью отключить plasmashell и использовать другую панель (fbpanel, lxpanel и т. Д.), Но они вносят больше беспорядка в KDE, чем помогают с проблемой


2
2017-10-11 22:12


происхождения


Для тех, кто спотыкается здесь - я только заметил, что какой-то менеджер задач google chrome использует фактический значок окна на панели задач kde, означает ли это, что исходный код, поддерживающий это, все еще существует? Помогло бы это поддерживать это во всех окнах? - yatsa


ответы:


Yupi! Существует решение

Копаясь в странном поведении, наблюдаемом в комментарии (значок окна отображается для диспетчера задач Chrome) Я тестировал свойства обычного окна Chrome и окна Tm. Похоже, что у TM отсутствует свойство WM_CLASS. Чтобы просто увидеть значок окна на панели задач, сделав либо

xprop -id $WIN_HEX_ID -remove WM_CLASS

или:

xprop -id $WIN_HEX_ID -format WM_CLASS 8s -set WM_CLASS "my-own-class"

будет достаточно. Но...

Это создает еще одну проблему - очень часто WM_CLASS используется диспетчерами окон или другими программами для управления окнами и их относительного поведения. Поэтому выбросить эту драгоценную информацию очень контрпродуктивно. К несчастью, как видно из:

Хранение и повторное хранение WM_CLASS свойство прямо сейчас невозможно с помощью xprop

Проверяя некоторые возможные варианты, я смог сделать это с помощью модуля python-xlib:

from Xlib.display import X, Display
from Xlib.Xatom import STRING

display = Display()
root = display.screen().root

win_hex_id = 0x6a00001 #in my case
win = display.create_resource_object('window', win_hex_id)
saved_prop = win.get_full_property(display.intern_atom('WM_CLASS'),
                       X.AnyPropertyType , 128).value

#to change:
win.change_property(display.intern_atom('WM_CLASS'), 
                    STRING, 8, 'my-own-class')

#to go back:
win.change_property(display.intern_atom('WM_CLASS'), 
                    STRING, 8, str(saved_prop) )

В качестве комментария - странное поведение KDE или pyhon-xlib заключается в том, что фактическое изменение значка происходит при другом действии свойства (чтение / запись) - поэтому добавление:

win.get_full_property(display.intern_atom('WM_CLASS'), X.AnyPropertyType , 128).value

не повредит


1
2018-02-01 19:06