Arch フォーラムで似たような問題をいくつか見たことがありますが、解決策を見つけることができませんでした。
そのため、Fedora 17 x64 の XFCE4 で XMonad 0.1 を実行しており、xmonad-contrib もインストールしています。ここに私の xmonad.hs ファイルがあります:
import System.Posix.Env (getEnv)
import Data.Maybe (maybe)
import Control.Monad
import XMonad.Hooks.SetWMName
import qualified XMonad.StackSet as W
import XMonad.Util.EZConfig
import XMonad
import XMonad.Config.Desktop
import XMonad.Config.Gnome
import XMonad.Config.Kde
import XMonad.Config.Xfce
main = do
session <- getEnv "DESKTOP_SESSION"
xmonad $ xfceConfig --(maybe desktopConfig desktop session)
{
modMask = mod4Mask
, terminal = "gnome-terminal"
, logHook = takeTopFocus >> setWMName "LG3D"
}
`additionalKeys` [ ((mod4Mask, xK_p), spawn "dmenu_run")
,((mod4Mask, xK_v), spawn "gvim")
]
-----------------------------------------
------------Custom Keys------------------
-----------------------------------------
-----------------------------------------
------------Other horrible stuff---------
-----------------------------------------
desktop "gnome" = gnomeConfig
desktop "kde" = kde4Config
desktop "xfce" = xfceConfig
desktop "xmonad-gnome" = gnomeConfig
desktop _ = desktopConfig
atom_WM_TAKE_FOCUS ::
X Atom
atom_WM_TAKE_FOCUS =
getAtom "WM_TAKE_FOCUS"
takeFocusX ::
Window
-> X ()
takeFocusX w =
withWindowSet . const $ do
dpy <- asks display
wmtakef <- atom_WM_TAKE_FOCUS
wmprot <- atom_WM_PROTOCOLS
protocols <- io $ getWMProtocols dpy w
when (wmtakef `elem` protocols) $
io . allocaXEvent $ \ev -> do
setEventType ev clientMessage
setClientMessageEvent ev w wmprot 32 wmtakef currentTime
sendEvent dpy w False noEventMask ev
takeTopFocus ::
X ()
takeTopFocus =
withWindowSet $ maybe (setFocusX =<< asks theRoot) takeFocusX . W.peek
この部分で気付くとadditionalKeys
思いますが、私には 2 つのバインディングがあります。どちらも を使用してmod4Mask
おり、これは私のデフォルトの mod キーでもあります。gvim の 2 番目のバインドは完全に機能します。問題は、dmenu の最初のバインドが単に何もしないことです。奇妙なのは、mod4Mask
(dmenuの場合)に変更mod1Mask
すると機能することです。また、ターミナルから実行すると、dmenu は正常に動作します。
編集: mod4Mask と P は何も生成/実行しないようです。
何か案は?この構成は私には問題ないように思えますが、なぜ機能しないのかわかりません。