startupHook
我的中有以下内容xmonad.hs
, startupHook = spawn "~/.xmonad/autostart"
我在这个脚本中启动许多应用程序和守护进程,它被编写为运行仅有的一旦启动。但是每次我点击 时都会运行它Mod-q
,即重新加载并测试我对 的更改xmonad.hs
。
我可以有条件地运行自动启动脚本中的程序,但事实证明这非常不稳定。所以,我想知道是否有一种方法让 xmonad 仅在初始启动时运行此启动挂钩,而不是在重新加载时运行。
我尝试用谷歌搜索,但一无所获。这样的事可能吗?
编辑:我正在 ubuntu 12.04 上运行从 cabal 安装的 xmonad 0.11。
答案1
正如在常问问题,startupHook
每次使用MOD+重新启动 xmonad 时都会运行Q。
同样从软件的角度来看,似乎很重要重新开始与 a 没有什么不同停止随后是一个开始。因此没有办法区分开始从一个重新开始来自 Xmonad 内部。因此,每次启动 Xmonad 时,它都会启动startupHook
为了在启动时运行程序,他们建议使用通常的方式将它们添加到.xsession
或.Xinitrc
。
在你的情况下你可以把
~/.xmonad/autostart
在你的文件的末尾.Xinitrc
。
答案2
如果您使用 Ubuntu 以及可能其他基于 Debian 的系统,并且通过包管理器安装了 XMonad(这实际上对提出最初问题的人没有帮助,但可能对其他人有帮助),则有一个非常棘手的解决方法:
将您想要启动的任何程序添加到~/.xmonad/xmonad-session-rc
,就好像它是 bash 脚本一样(您不需要使其可执行)。
解释
在 Ubuntu 中,XMonad 是通过登录屏幕启动的/usr/share/xsessions/xmonad.desktop
。由此执行的程序不是xmonad
它本身,而是 bash 脚本xmonad-session
(位于/usr/bin/xmonad
),.xmonad/xmonad-session-rc
当您第一次登录到 xmonad 时,该脚本及其内容将被执行。
解决方法有点狡猾,因为我认为该文件的目的xmonad-session-rc
是设置环境变量,而不是运行程序,但我不确定。
答案3
如果您使用 xmonad-contrib,只需在启动挂钩中import Xmonad.Util.SpawnOnce
使用spawnOnce
而不是。spawn