3

我正在尝试在 Ubuntu 14.04 的同一个启动器下将多个 Chrome 独立窗口分组。似乎不可能简单地WM_CLASS在 .desktop 文件中指定多个变量(请参阅对此答案的评论)。

我遇到的第一个解决方案是在短暂延迟后使用 xprop 将额外窗口的 WM_CLASS 更改为与所选主窗口相同。如果我没有在命令行中指定要更改的窗口,这将起作用,让它给我一个十字准线,然后单击任性的窗口,使用如下命令:

xprop -f WM_CLASS 8s -set WM_CLASS crx_kphgejagakmceapfinpoopapfdnkkepf

(从这个答案中对同一问题没有太多理解)

它得到了新的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 问题,因此对完全不同的方法持开放态度。

4

3 回答 3

4

WM_CLASS名称和类的元组,不能xprop设置采用多个值的属性(或者更确切地说,它只能设置第一个值)。我没有找到任何可以做到这一点的工具,最后写了这个小的 c 脚本如果您愿意的话,您可以使用python-xlib将它翻译成 Python (我通常会这样做,但由于完全缺乏文档而被吓倒了)。

于 2016-09-08T16:36:48.773 回答
3

Fmstrat @github指出xdotool ( man ) 可以做到:

apt install -y xdotool
xdotool search --name "Title of App" set_window --class "New WM Class"
于 2020-11-11T20:33:00.070 回答
1

在与 Microsoft Teams 窗口名称作斗争时找到了答案。

我使用 window 类在桌面上显示窗口列表,并使用该类的右侧部分来获取应用程序名称,例如:

 0x0320002c  0 Navigator.Firefox     LSA-XPS-13-9310 Messages pour le Web - Mozilla Firefox

将显示“火狐”

然而,团队在类名中使用了一个空格:

0x04800005  0 microsoft teams - preview.Microsoft Teams - Preview  LSA-XPS-13-9310 Microsoft Teams

所以我的任务栏根本没有显示名称。

我用了:

xdotool search --name "Teams" set_window --class "Microsoft"
xdotool search --name "Teams" set_window --classname "Teams"

修改类的左右部分,由 xprop 显示为 this : WM_CLASS(STRING) = "Microsoft", "Teams"因此我的任务栏现在可以工作了

于 2021-12-02T11:14:26.423 回答