我有以下startupHook
我xmonad.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
文件末尾。
如果您使用的是 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
文件的目的是设置环境变量,而不是运行程序,但我不确定。