5

我在 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,第二个绑定可以完美运行。问题是第一个绑定,对于 dmenu,根本什么都不做。奇怪的是,如果我将mod4Mask(对于 dmenu)更改为,mod1Mask那么它可以工作。此外,如果我从终端运行 dmenu ,它也可以正常工作。

编辑: mod4Mask 和 P 似乎没有产生/做任何事情。

有任何想法吗?这个配置对我来说似乎很好,我不知道为什么它不起作用。

4

2 回答 2

2

我不知道出了什么问题,但我有一些调试它的建议。

  1. 我遇到过一些情况,我认为我正在运行我当前的自定义 xmonad.hs,但我实际上是在运行以前的版本或默认版本。通过对 xmonad.hs 进行一些其他更改来排除这种情况,并验证它是否有效。

  2. 尝试将 mod4Mask p 映射到其他东西,看看是否有效。

  3. 使用 xev,按 mod4Mask + p,并验证它确实生成了您期望的事件。对比一下mod4Mask + v,看看除了p到v的变化有没有区别。

  4. 确保您没有启用 NumLock 或 Fn 或类似的东西!(我认为,NumLock 会将您的 p 更改为数字。)

你用的是什么类型的键盘?我们?英国?还有什么?

于 2012-10-17T14:52:32.177 回答
1

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 中工作!

于 2013-12-01T15:00:55.220 回答