2016-04-15 20 views
0

Ich versuche, mehrere Chrome-Standalone-Windows unter dem gleichen Launcher in Ubuntu 14.04 zu gruppieren. Es scheint nicht möglich zu sein, einfach mehrere Variablen WM_CLASS in der .desktop-Datei anzugeben (siehe Kommentare unter this answer).Set WM_CLASS (mit wnck, xprop oder etwas anderes)

Die erste Lösung, die ich getroffen habe, ist die Verwendung von xprop, um die WM_CLASS der zusätzlichen Fenster nach einer kurzen Verzögerung so zu ändern, dass sie mit einem ausgewählten Hauptfenster übereinstimmt. Dies funktioniert, wenn ich nicht angeben, welche Fenster in der Befehlszeile zu ändern, lassen Sie es mich ein Fadenkreuz geben, und klicken Sie auf den unberechenbaren Fenster, mit einem Befehl wie folgt aus:

xprop -f WM_CLASS 8s -set WM_CLASS crx_kphgejagakmceapfinpoopapfdnkkepf 

(genommen, ohne viel Verständnis von this Antwort auf die gleiche Frage)

Es wird die neue WM_CLASS, und Ubuntu gruppiert es sofort unter dem gewählten Launcher statt Chrome.

Doch trotz der Fenster allem Anschein nach den sehr einfachen Namen mit Todoist (das ist, was in der Titelleiste angezeigt wird, und xprop | grep -i name gibt

WM_NAME(UTF8_STRING) = "Todoist" 
_NET_WM_NAME(UTF8_STRING) = "Todoist" 
WM_LOCALE_NAME(STRING) = "en_US.UTF-8" 

Also, ich entscheiden xprop nicht trauen kann.

Stattdessen fand ich, dass ich den python-Paket wnck verwenden kann, um dieses Fenster zu öffnen, nach einer Mode:

import wnck 
todoist = [w for w in wnck.screen.get_defaults().get_windows() 
      if 'todoist' in w.get_name().lower()][0] 

So, wie kann Ich verwende dieses Objekt todoist, um die zugrunde liegende WM_CLASS zu ändern?

Ich realisiere, dass dies eine xy-Problem-Frage ist, und bin daher offen für völlig andere Ansätze.

Antwort

0

WM_CLASS ist a tuple of name and class und xprop kann keine Eigenschaften festlegen, die mehrere Werte annehmen (oder vielmehr nur den ersten Wert festlegen). Ich habe kein Werkzeug gefunden, das es könnte und schrieb am Ende this small c script. Sie könnten es wahrscheinlich in Python mit python-xlib übersetzen, wenn Sie das bevorzugen (normalerweise würde ich aber durch den völligen Mangel an Dokumentation davon abgehalten).

+0

Ich löste schließlich ein ähnliches Problem, obwohl mit Firefox, mit Xprop und [diese Methode] (https://superuser.com/questions/1118101/use-multiple-firefox-wm-classes-in-same-profile) . Ihr Skript scheint das zweite Segment zu ändern, wenn ich die Fensterklasse als etwas wie "0x5800001" übergebe, also werde ich es als die Antwort markieren und es vielleicht später verwenden; Vielen Dank. – tsbertalan

+0

Auch für die Nachwelt habe ich es als 'gcc set_wm_class.c -lX11 -o set_wm_class' kompiliert. – tsbertalan