2016-04-15 4 views
0

Я пытаюсь сгруппировать несколько автономных окон Chrome под одной и той же установкой в ​​Ubuntu 14.04. Не представляется возможным просто указать несколько переменных WM_CLASS в файле .desktop (см. Комментарии к 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 нельзя доверять.

Вместо этого, я обнаружил, что я могу использовать питон пакет 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 class и xprop не могут устанавливать свойства, которые принимают несколько значений (точнее, оно может устанавливать только первое значение). Я не нашел инструмента, который мог бы это сделать, и в конце концов написал this small c script. Вероятно, вы могли бы перевести его на Python, используя python-xlib, если вы предпочитаете это (я обычно был бы, но был бы удержан из-за отсутствия документации).

+0

В конце концов я решил аналогичную проблему, хотя с Firefox, используя xprop и [этот метод] (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