You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

XMonad v0.15启动时应用无法分配到指定工作区的问题

解决XMonad启动应用到指定工作区失效的问题

针对你遇到的Firefox、Spotify、Slack全部启动在工作区1的问题,按以下步骤修复:

1. 导入必要模块

确保配置文件顶部导入XMonad.Actions.SpawnOn模块,它提供spawnOn和manageSpawn的核心实现:

import XMonad.Actions.SpawnOn

2. 更新manageHook,添加manageSpawn

spawnOn需要配合manageSpawn才能生效,它负责跟踪通过spawnOn启动的窗口并将其移动到指定工作区。修改你的manageHook:

manageHook = manageDocks <+> manageSpawn <+> manageHook defaultConfig

3. 优化应用启动逻辑(可选但推荐)

部分应用启动较慢,可能导致spawnOn无法正确关联窗口,建议用spawnOnOnce替代spawnOn,它会确保应用只启动一次,且等待窗口出现后再执行工作区跳转:

myStartupHook :: X()
myStartupHook = composeAll [ spawnOnOnce "1:web" "firefox"
                           , spawnOnOnce "3:music" "spotify" 
                           , spawnOnOnce "4:chat" "slack"]

4. 备用方案:手动指定窗口匹配规则

如果上述方法仍不生效,可以直接通过窗口类名强制指定工作区。先在终端执行xprop | grep CLASS,点击目标应用窗口获取正确的类名,然后在manageHook中添加规则:

manageHook = manageDocks <+> manageSpawn <+> composeAll
    [ className =? "Firefox" --> doShift "1:web"
    , className =? "Spotify" --> doShift "3:music"
    , className =? "Slack" --> doShift "4:chat"
    ] <+> manageHook defaultConfig

修改完成后,执行xmonad --recompile重新编译配置,再重启XMonad即可生效。

内容的提问来源于stack exchange,提问作者Anthony W

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 03:01:21