XMonad启动重编译报错 udiskie托盘无法在xmobar显示问题求助
报错原因
该错误是XMonad配置文件的Haskell语法错误,和udiskie本身无关:
spawnOnce函数的类型为String -> X (),仅接受1个字符串类型的参数,执行对应命令- 你在配置的do代码块中,将
spawnOnce "udiskie -t &"和spawnOnce "volumeicon &"两个语句写在了同一行、没有分隔符,编译器会判定你尝试给第一个spawnOnce传入3个参数("udiskie -t &"、spawnOnce函数本身、"volumeicon &"),和函数定义的参数数量不匹配,触发类型错误。 - 因为配置编译失败,XMonad不会执行配置里的自启动逻辑,所以udiskie没有运行,托盘图标自然不会显示。
末尾的字符集警告不影响核心功能,非本次报错的诱因。
解决方案
- 打开配置文件
/home/arturo/.xmonad/xmonad.hs,定位到105行的自启动do块 - 将挤在同一行的两个
spawnOnce语句拆分,以下两种写法二选一即可:- 推荐写法(可读性更高):
do spawnOnce "lxsession &" spawnOnce "picom &" spawnOnce "nm-applet &" spawnOnce "udiskie -t &" spawnOnce "volumeicon &" -- 其他自启动语句保持不变 - 若要保留在同一行,用
>>操作符连接两个动作:spawnOnce "udiskie -t &" >> spawnOnce "volumeicon &"
- 推荐写法(可读性更高):
- 保存文件后执行
xmonad --recompile重新编译配置,确认无报错后执行xmonad --restart重启XMonad即可,udiskie托盘图标会随程序启动正常显示。
如果需要消除字符集警告,可在系统环境变量配置中添加LC_CTYPE=en_US.UTF-8(或对应你使用的UTF-8格式locale),重新登录后生效。
内容的提问来源于stack exchange,提问作者Arturo
相关产品推荐
相关产品推荐

