我想在Ubuntu 14.04的同一個啓動器下將多個Chrome獨立窗口分組。似乎不可能簡單地在.desktop文件中指定多個WM_CLASS
變量(請參閱this answer上的註釋)。設置WM_CLASS(使用wnck,xprop或其他)
我碰到的第一個解決方案是使用xprop將額外窗口的WM_CLASS更改爲與所選主窗口相同的短暫延遲。這工作,如果我不指定在命令行來改變哪個窗口,讓它給我一個十字,然後單擊任性窗口上,有這樣的命令:
xprop -f WM_CLASS 8s -set WM_CLASS crx_kphgejagakmceapfinpoopapfdnkkepf
(不採取從太多的瞭解this回答同一問題)
它得到新的WM_CLASS
,Ubuntu立即在選定的啓動器下重新組合它,而不是Chrome。
然而,儘管窗口具有非常簡單的名稱Todoist
(這是標題欄上顯示的內容,並xprop | grep -i name
悉數亮相給人
WM_NAME(UTF8_STRING) = "Todoist"
_NET_WM_NAME(UTF8_STRING) = "Todoist"
WM_LOCALE_NAME(STRING) = "en_US.UTF-8"
所以,我決定xprop不能被信任。
相反,我發現我可以使用Python包wnck訪問此窗口,成爲時尚後:
import wnck
todoist = [w for w in wnck.screen.get_defaults().get_windows()
if 'todoist' in w.get_name().lower()][0]
那麼,如何才能我使用這個對象todoist
來更改底層的WM_CLASS
?
我意識到這完全是一個xy問題,所以我開放給完全不同的方法。
我最終解決了一個類似的問題,儘管在Firefox中,使用xprop和[this method](https://superuser.com/questions/1118101/use-multiple-firefox-wm-classes-in-same-profile) 。如果我將窗口類傳遞爲'0x5800001'這樣的話,你的腳本似乎改變了第二個段,所以我將它標記爲答案,並且稍後可能會使用它;謝謝。 – tsbertalan
另外,爲了後人,我將它編譯爲'gcc set_wm_class.c -lX11 -o set_wm_class'。 – tsbertalan