XMonad ничего не порождает с mod4Mask

Я видел несколько похожих проблем на форумах Arch, но не смог найти для них решения.

Итак, я запускаю XMonad 0.1 в XFCE4 на Fedora 17 x64, и у меня также установлен 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, кажется, ничего не порождают/не делают.

Любые идеи? Эта конфигурация кажется мне хорошей, я понятия не имею, почему она не будет работать.


person geniass    schedule 03.10.2012    source источник


Ответы (2)


Я не знаю, что не так, но у меня есть несколько предложений по отладке.

  1. У меня были ситуации, когда я думал, что запускаю свой текущий пользовательский xmonad.hs, но на самом деле я запускал предыдущую версию или версию по умолчанию. Исключите это, внеся другие изменения в файл xmonad.hs и убедившись, что он работает.

  2. Попробуйте сопоставить mod4Mask p с чем-то другим и посмотрите, сработает ли это.

  3. Используя xev, нажмите mod4Mask + p и убедитесь, что он действительно генерирует ожидаемые события. Сравните с mod4Mask + v и посмотрите, есть ли какая-либо разница, кроме изменения с p на v.

  4. Убедитесь, что у вас не активны NumLock, Fn или что-то в этом роде! (Я думаю, NumLock изменит ваш p ​​на число.)

Какую клавиатуру вы используете? НАС? СОЕДИНЕННОЕ КОРОЛЕВСТВО? Что-то другое?

person mhwombat    schedule 17.10.2012
comment
1. Я думаю, что использую xconfig по умолчанию, мне не нужно его менять. 2. mod4Mask p ничего не запускает 3. xev выглядит нормально, он показывает Super_L (mod4Mask) и меняется код клавиши (очевидно, p или v) 4. NumLock не имеет значения, у меня нет блокировки FN, и я с помощью клавиатуры США (HP KU-0316) - person geniass; 22.10.2012
comment
Я до сих пор не понял проблему; Я просто изменил комбинацию клавиш на mod4Mask и d - person geniass; 29.10.2012
comment
У меня нет большого опыта в этой области, но единственные варианты, которые я могу придумать, это то, что что-то еще перехватывает событие mod4mask p или что-то необычное в вашей раскладке клавиатуры. Вы можете попробовать запустить xmodmap -pke. В выводе этой команды посмотрите, есть ли что-нибудь необычное в каких-либо сопоставлениях для ключа p (сравните с ключом v). Вы используете только xmonad или в сочетании с чем-то вроде Gnome? - person mhwombat; 30.10.2012
comment
Я тоже думаю, что что-то цепляет эту комбинацию клавиш. Здесь я использую xfce, но я посмотрел сочетания клавиш и не нашел ничего необычного. Я попробую ваше предложение и отпишусь - person geniass; 30.10.2012
comment
Хм, я установил MATE, чтобы попробовать, и у него нет такой проблемы - mod4Mask P работает нормально. - person geniass; 07.11.2012
comment
Случайно, если вы откроете терминал и наберете xmonad --restart, это решит проблему? Если это так, ваша проблема может быть связана с этим: stackoverflow.com/questions/13965699/ - person mhwombat; 03.01.2013
comment
Действительно NumLock был моей проблемой! Но -- ВТФ? -- Зачем? Почему NumLock должен превратить мою mon4Mask+p в число? - person user98761; 12.02.2013
comment
Поскольку на большинстве ноутбуков нет цифровой клавиатуры, клавиша NumLock настроена на превращение части обычной клавиатуры в цифровую клавиатуру. - person mhwombat; 12.02.2013

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!

person Jonatan Kallus    schedule 01.12.2013