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

Shr*_*rat 6 startup xmonad

我有以下startupHookxmonad.hs

, startupHook = spawn "~/.xmonad/autostart"
Run Code Online (Sandbox Code Playgroud)

我在这个脚本中启动了许多应用程序和守护进程,它被编写为在启动时运行一次。但是每次我点击时都会运行它Mod-q,即重新加载并测试我对xmonad.hs.

我可以有条件地运行自动启动脚本中的程序,但结果非常不稳定。所以,我想知道是否有办法让 xmonad 只在初始启动时运行这个启动钩子,而不是在重新加载时运行。

我试着用谷歌搜索,但结果是空的。这样的事情可能吗?

编辑:我正在 ubuntu 12.04 上运行从 cabal 安装的 xmonad 0.11。

小智 7

正如常见问题解答中提到的,startupHook每次使用MOD+重新启动 xmonad 时都会运行Q

另外,从软件的角度来看,似乎重要的是,重启并不比一个不同的后跟一个开始。因此,无法从 Xmonad 内部区分启动重启。因此每次 Xmonad 启动时,它都会启动startupHook

为了在启动时运行程序,他们建议使用通常的方式将它们添加到.xsession.Xinitrc

在你的情况下,你可以把

~/.xmonad/autostart
Run Code Online (Sandbox Code Playgroud)

在您的.Xinitrc文件末尾。


apl*_*ice 6

如果您使用的是 Ubuntu,可能还有其他基于 Debian 的系统,并且已经通过您的包管理器安装了 XMonad(这实际上并不能帮助提出最初问题的人,但可能会帮助其他人),这是一种非常狡猾的解决方法:

将您想要启动的任何程序添加到~/.xmonad/xmonad-session-rc,就好像它是一个 bash 脚本一样(您不需要使其可执行)。

解释

在 Ubuntu 中,由于/usr/share/xsessions/xmonad.desktop. 由它执行的程序不是xmonad它本身,而是 bash 脚本xmonad-session(出现在/usr/bin/xmonad),.xmonad/xmonad-session-rc当您第一次登录 xmonad 时,将执行该文件的源以及该文件的内容。

解决方法有点狡猾,因为我认为该xmonad-session-rc文件的目的是设置环境变量,而不是运行程序,但我不确定。