【问题标题】:XMonad won't spawn anything with mod4MaskXMonad 不会使用 mod4Mask 生成任何东西
【发布时间】:2012-10-03 19:27:38
【问题描述】:

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

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

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

【问题讨论】:

    标签: linux haskell fedora xmonad xfce


    【解决方案1】:

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

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

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

    3. 使用 xev,按 mod4Mask + p,并验证它确实生成了您期望的事件。对比一下mod4Mask + v,看看除了p改成v有什么不同。

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

    您使用的是哪种键盘?我们?英国?还有什么?

    【讨论】:

    • 1.我想我使用的是默认的 xconfig,我不需要更改它。 2. mod4Mask p 没有启动任何东西 3. xev 看起来很好,它显示 Super_L (mod4Mask) 和一个键码更改(显然是 p 或 v) 4. NumLock 没有区别,我没有 FN 锁,我是使用美式键盘 (HP KU-0316)
    • 我还没有发现问题;我只是将组合键更改为 mod4Mask 和 d
    • 我在这方面没有太多专业知识,但我能想到的唯一选择是其他东西正在捕获 mod4mask p 事件,或者你的键盘映射有什么不寻常之处。您可以尝试运行xmodmap -pke。在该命令的输出中,查看 p 键的任何映射中是否有任何异常(与 v 键比较)。您是单独使用 xmonad,还是与 Gnome 之类的工具结合使用?
    • 我也认为有些东西正在抓住这个关键组合。我在这里使用 xfce,但我查看了键盘快捷键并没有什么异常。我会尝试你的建议并回复
    • 嗯,我安装了 MATE 来试用它,它没有同样的问题 - mod4Mask P 工作正常
    【解决方案2】:

    XFCE 将 Mod4-p 绑定到此文件中的某些内容

    ~/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-keyboard-shortcuts.xml
    

    通过在该文件中搜索“Super”,我找到了两行带有 -p 的行。一个似乎是“空的”,另一个执行“xfce4-display-settings --minimal”来设置外部显示输出。

    我将该文件中的两个匹配项都更改为使用 o 而不是 p,然后退出 XFCE 并重新登录。现在 Mod4-p 在 XMonad 中工作!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-19
      • 2011-02-14
      • 1970-01-01
      • 2014-09-27
      • 1970-01-01
      • 2018-08-20
      • 1970-01-01
      相关资源
      最近更新 更多