我在Arch论坛上看到了一些类似的问题,但是我一直没能find解决scheme。
所以我在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,完美的作品。 问题是dmenu的第一个绑定根本就没有任何作用。 奇怪的是,如果我将mod4Mask
(对于dmenu)更改为mod1Mask,那么它将起作用。 另外,如果我从terminal运行它,dmenu可以正常工作。
编辑:mod4Mask和P似乎不会产卵/做任何事情。
有任何想法吗? 这configuration对我来说似乎很好,我不知道为什么它不会工作。
我不知道什么是错的,但是我有一些调试的建议。
我曾经有过这样的情况,我认为我正在运行当前的自定义xmonad.hs,但是我确实运行了以前的版本或默认的版本。 通过对xmonad.hs进行一些其他更改并验证它是否有效来解决这个问题。
尝试映射mod4Mask p到别的东西,看看是否有效。
使用xev,按下mod4Mask + p,并确认它确实生成了你期望的事件。 与mod4Mask + v比较,看看除了从p到v的变化之外是否有任何区别。
确保你没有NumLock或Fn或类似的东西活跃! (我想,NumLock会把你的p改成一个数字。)
你使用什么样的键盘? 我们? 英国? 别的东西?
XFCE将Mod4-p绑定到这个文件中的东西
~/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-keyboard-shortcuts.xml
通过在该文件中搜索“Super”,我找到两行<Super> -p。 一个似乎是“空的”,另一个执行“xfce4-display-settings -minimal”设置外部显示输出。
我改变了这个文件中的两个事件来使用o而不是p,然后退出XFCE并返回。现在Mod4-p在XMonad中工作!