初期起動時にのみXMonadの起動フックを実行してください。

初期起動時にのみXMonadの起動フックを実行してください。

startupHook私の中には次のものがありますxmonad.hs

, startupHook = spawn "~/.xmonad/autostart"

実行するために作成されたこのスクリプトで、多くのアプリケーションとデーモンを起動します。ただ一度起動しました。ただし、クリックするたびに実行されますMod-q。つまり、変更を再ロードしてテストしますxmonad.hs

自動起動スクリプトで条件付きでプログラムを実行できますが、これは非常に不安定であることが判明しました。そのため、xmonadがこの起動フックを初めて起動したときにのみ実行し、再ロードするときに実行しないようにする方法があるかどうか疑問に思います。

インターネットを検索しようとしましたが、何も見つかりませんでした。そのようなことは可能ですか?

編集:Ubuntu 12.04のcabalからインストールされたxmonad 0.11を実行しています。

答え1

のようによくある質問、xmonadが+をstartupHook使用してMOD再起動されるたびに実行されますQ

また、ソフトウェアの観点からも重要に見えます。再起動と変わらない止めるそれからスタート。したがって、区別する方法はありません。スタートから再起動Xmonad内で。したがって、Xmonadを起動するたびにstartupHook

起動時にプログラムを実行するには、.xsessionまたはにプログラムを追加する一般的な方法を使用することをお勧めします.Xinitrc

あなたの場合は置くことができます

~/.xmonad/autostart

ファイルの末尾に.Xinitrc

答え2

Ubuntuや他のDebianベースのシステムを使用してパッケージマネージャを介してXMonadをインストールした場合(実際には、元の質問をした人には役に立たなかったが他の人には役に立つかもしれません)、非常に厳しい解決策があります。

~/.xmonad/xmonad-session-rcbashスクリプトのように起動したいプログラムを追加します(実行可能にする必要はありません)。

説明する

Ubuntuでは、XMonadがログイン画面から起動します/usr/share/xsessions/xmonad.desktop。これによって実行されるプログラムはそれ自体ではなく、xmonadに初めてログインしたときにその内容とともに実行されるxmonadbashスクリプトxmonad-session(に位置/usr/bin/xmonad)です。.xmonad/xmonad-session-rc

回避策は少し面倒です。ファイルの目的はプログラムを実行するのではなく、環境変数を設定することだと思いますxmonad-session-rcが、わかりません。

答え3

xmonad-contribを使用している場合は、起動フックで代わりにimport Xmonad.Util.SpawnOnce使用してください。spawnOncespawn

関連情報