web-dev-qa-db-ja.com

新しいKDE Plasma(16.04)タスクマネージャーでウィンドウアイコンを表示(ランチャーアイコンを無効化)

認識できないほど私を悩ます問題があります

同じプログラムの複数のウィンドウがスクリプトによって監視され、プログラムの状態に応じてXウィンドウのアイコンが更新されて必要なアクションを反映するワークフローがあります(set-icon $WINID state.png)。しばらくはかなりうまく機能していましたが、最近、ボックスをKubuntu 16.04に更新しました。これは史上最悪のアイデアでした。

タスクマネージャーフラグ「ランチャーアイコンを使用する」が削除され、これを無効にするオプションではなくなったようです-プラズマforcesランチャーアイコンを使用する(常に)。

さらに、このオプションは設定ファイルからも完全に削除されているようです。

私の質問は-この機能を復元することは可能ですか? task-managerの古いバージョンを復元するには?

または、タスクバーのボタンのアイコンを(スクリプトで)変更する他の方法はありますか?

Plasmashellを完全に無効にして他のパネル(fbpanel、lxpanelなど)を使用しようとしましたが、これらは問題を解決するよりもKDE内でより多くの混乱をもたらします

2
yatsa

ユピ!解決策があります

コメントで見られる奇妙な動作を掘り下げる(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
yatsa