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 lock и съм използване на американска клавиатура (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 беше моят проблем! Но - WTF? -- защо? Защо 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