仅在初始启动时运行 XMonad 的启动挂钩

仅在初始启动时运行 XMonad 的启动挂钩

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

相关内容