XMonad IndependentScreens启动时第二显示器工作区加载异常求助
XMonad IndependentScreens 启动时第二显示器默认工作区异常问题
问题描述
配置XMonad的IndependentScreens实现单显示器独立工作区,此前运行正常,但重启电脑后第二台显示器默认打开0_code工作区。切换至该显示器并手动切到1_web工作区后,功能恢复正常。已确认xrandr在XMonad启动前已正确配置显示器。
相关配置与输出
工作区配置
def { workspaces = withScreens 2 [ "web", "code", "spare" ], }
布局配置
myLayout = onWorkspaces [ "1_web","1_code","1_spare" ] myVerticalLayout $ myDefaultLayout where myDefaultLayout = tall myVerticalLayout = three
Xrandr输出
Screen 0: minimum 8 x 8, current 3640 x 1920, maximum 32767 x 32767 DP-0 connected 1080x1920+2560+0 right (normal left inverted right x axis y axis) 544mm x 303mm 1920x1080 60.00 + 164.92 144.00 119.98* 99.93 84.90 59.94 50.00 DP-2 connected primary 2560x1440+0+0 (normal left inverted right x axis y axis) 598mm x 336mm 2560x1440 144.00 + 119.99* 59.95
解决方法
1. 启动时强制指定各屏幕的默认工作区
在XMonad配置中添加startupHook,明确为每个屏幕设置初始工作区:
首先导入必要模块:
import XMonad.Actions.OnScreen (viewOnScreen)
然后定义启动钩子:
myStartupHook = do -- 屏幕0(主显示器DP-2)默认打开0_web viewOnScreen 0 "0_web" -- 屏幕1(副显示器DP-0)默认打开1_web viewOnScreen 1 "1_web"
最后将钩子加入主配置:
def { workspaces = withScreens 2 [ "web", "code", "spare" ], startupHook = myStartupHook, layoutHook = myLayout, -- 其他配置项... }
2. 验证工作区命名与布局的匹配性
withScreens 2生成的工作区命名规则为[屏幕编号]_[工作区名称],即屏幕0对应0_web、0_code、0_spare,屏幕1对应1_web、1_code、1_spare。你的布局配置已经正确针对屏幕1的工作区设置了垂直布局,启动时强制指定工作区可以消除XMonad初始映射的不确定性。
3. 确保Xrandr配置稳定后再启动XMonad
即使xrandr在XMonad前执行,也可能存在显示器配置未完全生效的时序问题。可以修改启动脚本,加入短暂延迟:
xrandr --output DP-2 --primary --mode 2560x1440 --rate 144 --output DP-0 --mode 1920x1080 --rate 144 --right-of DP-2 && sleep 1 && xmonad
内容的提问来源于stack exchange,提问作者Allusive
相关产品推荐
相关产品推荐

