Linux Teams预览版+XMonad:能否让通知窗口悬浮?
绝对可行!要实现Teams主窗口平铺、仅通知窗口悬浮的效果,核心是精准匹配Teams通知窗口的专属属性,然后给它单独设置doFloat规则,完全不影响主窗口。下面是具体操作步骤:
第一步:获取Teams通知窗口的专属标识
XMonad靠窗口的属性来区分不同窗口,所以首先得搞清楚你的Teams通知窗口有什么独特标记。打开终端运行:
xprop
运行后鼠标会变成十字光标,点击弹出的Teams通知窗口,终端会输出一堆窗口属性。重点关注这几个字段:
WM_CLASS(STRING):包含两个值,第一个是resource,第二个是className(比如可能是("teams-for-linux", "Microsoft Teams Preview"))WM_NAME(STRING):窗口的标题(比如可能是"Microsoft Teams Notification")
第二步:添加精准的悬浮规则到ManageHook
根据你查到的属性,在myManageHook里添加针对性规则,下面是几个常见场景的示例:
场景1:通过标题匹配通知窗口
如果通知窗口标题包含"Notification",可以用正则匹配(需要先在配置文件顶部导入正则模块):
-- 配置文件顶部添加导入语句 import Text.Regex.Posix ((=~)) -- 在composeAll列表里新增规则 className =? "Microsoft Teams Preview" <&&> title =~ "Notification" --> doFloat
这个规则的逻辑是:仅当窗口属于Teams,且标题包含"Notification"时,才设置为悬浮,完美避开主窗口。
场景2:通过resource匹配
如果xprop显示通知窗口的resource是专属值(比如"teams-notification"),直接用resource匹配更精准:
resource =? "teams-notification" --> doFloat
场景3:多条件组合匹配
如果想更保险,同时匹配className和resource:
className =? "Microsoft Teams Preview" <&&> resource =? "teams-notification" --> doFloat
把新规则加到你的composeAll列表里即可,比如放在其他doFloat规则之后:
myManageHook = composeAll [ resource =? "desktop_window" --> doIgnore , className =? "Galculator" --> doFloat , className =? "Steam" --> doFloat , className =? "Gimp" --> doFloat , resource =? "gpicview" --> doFloat , className =? "MPlayer" --> doFloat , -- 新增的Teams通知悬浮规则 className =? "Microsoft Teams Preview" <&&> title =~ "Notification" --> doFloat , -- , className =? "VirtualBox" --> doShift "6:vm" , className =? "Xchat" --> doShift "7:media" , className =? "stalonetray" --> doIgnore , isFullscreen --> (doF W.focusDown <+> doFullFloat ) ]
第三步:重新加载XMonad
修改完配置文件后,按Mod+Q重新加载XMonad,发个Teams测试通知就能看到效果:主窗口保持平铺,通知窗口会乖乖悬浮显示~
如果第一次匹配没成功,再用xprop仔细核对通知窗口的属性,调整规则里的匹配值即可——不同版本的Teams预览版属性可能略有差异,精准匹配是关键。
内容的提问来源于stack exchange,提问作者Konrad Eisele
相关产品推荐
相关产品推荐

