2016-04-15 166 views
0

我想在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問題,所以我開放給完全不同的方法。

回答

0

WM_CLASSa tuple of name and classxprop不能設置具有多個值的屬性(或者說,它只能設置第一個值)。我沒有找到任何可以做到的工具,最後寫了this small c script。如果你更喜歡(我通常會但是完全沒有文檔),你可以使用python-xlib將它翻譯成Python。

+0

我最終解決了一個類似的問題,儘管在Firefox中,使用xprop和[this method](https://superuser.com/questions/1118101/use-multiple-firefox-wm-classes-in-same-profile) 。如果我將窗口類傳遞爲'0x5800001'這樣的話,你的腳本似乎改變了第二個段,所以我將它標記爲答案,並且稍後可能會使用它;謝謝。 – tsbertalan

+0

另外,爲了後人,我將它編譯爲'gcc set_wm_class.c -lX11 -o set_wm_class'。 – tsbertalan

相關問題