在新的 KDE Plasma (16.04) 任务管理器中显示窗口图标(禁用启动器图标)

在新的 KDE Plasma (16.04) 任务管理器中显示窗口图标(禁用启动器图标)

我遇到了令我烦恼不已的问题

我有一个工作流程,其中同一程序的多个窗口由脚本监控,并根据程序的状态更新 X 窗口图标以反映所需的操作 ( set-icon $WINID state.png)。有一段时间它运行得很好,但是最近我将我的机器更新为 Kubuntu 16.04 - 这是有史以来最糟糕的主意。

看起来任务管理器标志“使用启动器图标”已被删除,并且不再提供禁用该功能的选项 - Plasma军队使用启动器图标(总是)。

此外,此选项似乎也从配置文件中完全删除了。

我的问题是 - 是否可以恢复此功能?恢复旧版本的任务管理器?

或者是否有其他方法可以(通过脚本)更改任务栏上按钮的图标?

我尝试过完全禁用 plasmashell 并使用其他面板(fbpanel、lxpanel 等),但这些面板在 KDE 中带来的混乱比解决问题的帮助更大

答案1

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

不会伤害

相关内容