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