जब xmonad प्रारंभ होता है तो xmobar विंडो स्टैक के ऊपर दिखाई नहीं देता है


16

xmobarमैं प्रवेश करने के तुरंत बाद एक अजीब व्यवहार का अनुभव कर रहा हूं xmonad। जब मैं xmonad(से .xinitrc, मैं एक्सडीएम का उपयोग करता हूं) मेरी xmobarप्रकट होती है, लेकिन यह या तो विंडो स्टैक के ऊपर या नीचे नहीं है । एक बार जब मैं एक एप्लिकेशन शुरू करता हूं (उदाहरण के लिए दबाकर टर्मिनल एमुलेटर Mod + Shift + Return) तो एप्लिकेशन पूरी स्क्रीन का उपयोग करता है, जैसे xmobarकि नीचे था। फिर मैं दबाता हूं Mod + Bऔर कुछ भी नहीं होता है, एक बार जब मैं Mod + Bदूसरी बार दबाता हूं xmobarतो एप्लिकेशन विंडो का आकार कम करके शीर्ष पर पहुंच जाता है।

उसके बाद Mod + Bशेष xmonadसत्र के लिए सही तरीके से काम करता है , अर्थात यह कम (उठाता / दिखाता है) करता है xmobar

मुझे भरोसा है कि मैंने कुछ गलत किया है। मेरी xmonad.hsतरह दिखता है:

import XMonad
import XMonad.Hooks.SetWMName
import XMonad.Hooks.DynamicLog

main = do
  xmonad =<< statusBar "xmobar" myPP toggleStrutsKey defaultConfig
    { terminal           = "urxvt"
    , focusFollowsMouse  = True
    , clickJustFocuses   = False
    , borderWidth        = 1
    , modMask            = mod4Mask
    , workspaces         = myworkspaces
    , normalBorderColor  = "#dddddd"
    , focusedBorderColor = "#00dd00"
    , manageHook         = mymanager
    , startupHook        = setWMName "LG3D"
    }

myPP = xmobarPP { ppOutput          = putStrLn
                , ppCurrent         = xmobarColor "#336433" "" . wrap "[" "]"
                --, ppHiddenNoWindows = xmobarColor "grey" ""
                , ppTitle           = xmobarColor "darkgreen"  "" . shorten 20
                , ppLayout          = shorten 6
                --, ppVisible         = wrap "(" ")"
                , ppUrgent          = xmobarColor "red" "yellow"
                }

toggleStrutsKey XConfig { XMonad.modMask = modMask } = (modMask, xK_b)

myworkspaces = [ "code"
               , "web"
               , "media"
               , "irc"
               , "random"
               , "mail"
               , "docs"
               , "music"
               , "root"
               ]

mymanager = composeAll
  [ className =? "gimp" --> doFloat
  , className =? "vlc"  --> doFloat
  ]

जबकि मेरे .xmobarrcरूप की शुरुआत इस प्रकार है:

Config {
  -- appearance
    font =         "xft:Bitstream Vera Sans Mono:size=9:bold:antialias=true"
  , bgColor =      "black"
  , fgColor =      "#646464"
  , position =     Top
  , border =       BottomB
  , borderColor =  "#646464"

  -- layout
  , sepChar =  "%"   -- delineator between plugin names and straight text
  , alignSep = "}{"  -- separator between left-right alignment
  , template = "%battery% | %multicpu% | %coretemp% | %memory% | %dynnetwork% | %StdinReader% }{ %date% || %kbd% "

  -- general behavior
  , lowerOnStart =     False   -- send to bottom of window stack on start
  , hideOnStart =      False   -- start with window unmapped (hidden)
  , allDesktops =      True    -- show on all desktops
  , overrideRedirect = True    -- set the Override Redirect flag (Xlib)
  , pickBroadest =     False   -- choose widest display (multi-monitor)
  , persistent =       True    -- enable/disable hiding (True = disabled)

  -- plugins (i do not use any)

  , commands = [  -- actually several commands are in here
  ]
}

मैंने कई संयोजनों की कोशिश की:

, lowerOnStart =
, hideOnStart =

(सच / सच, सच / गलत, गलत / सच्चा और गलत / गलत जैसा अब दिखाया गया है)। लेकिन इससे पहले कि मैं Mod + Bदो बार प्रेस करता हूं व्यवहार नहीं बदलता है। मेरा मानना ​​है कि मैंने xmonadकिसी तरह गलतफहमी की है , xmobarलेकिन यह सिर्फ एक अनुमान है।

मेरी .xinitrcमदद हो सकती है:

#!/bin/sh

if test -d /etc/X11/xinit/xinitrc.d
then
    # /etc/X11/xinit/xinitrc.d is actually empty
    for f in /etc/X11/xinit/xinitrc.d/*
    do
        [ -x "$f" ] && source "$f"
    done
    unset f
fi

# uk keyboard
setxkbmap gb

xrdb .Xresources
xscreensaver -no-splash &

# java behaves badly in non-reparenting window managers (e.g. xmonad)
export _JAVA_AWT_WM_NONREPARENTING=1

# set the background (again, because qiv uses a different buffer)
/usr/bin/feh --bg-scale --no-fehbg -z /usr/share/archlinux/wallpaper/a*.jpg

# pulse audio for alsa
then
    /usr/bin/start-pulseaudio-x11
fi

exec xmonad

जवाबों:


24

दो महीने बाद मैंने इसका पता लगाया। समस्या यह है कि ठीक से statusBarघटनाओं को पंजीकृत नहीं करता Hooks.manageDocksहै। एक बार xmonadसभी काम अच्छे से चल रहे हैं क्योंकि हर विंडो इवेंट manageDocksको अपडेट करने में सक्षम है Struts। लेकिन उस पल में जो xmonadपहली विंडोज़ को फुलस्क्रीन बनाने की घटना शुरू कर रहा है, उससे होने वाली घटनाओं से पहले manageDocks। यह पहली बार खुली खिड़की के अस्तित्व की अनदेखी करता है xmobar

manageDocksइसके ईवेंट हैंडलर को अंतिम ईवेंट हैंडलर के रूप में सेट किया जाना चाहिए, इसलिए statusBarइसका उपयोग नहीं किया जा सकता है। इसके बजाय, यह सुनिश्चित करने के लिए आवश्यक है xmonadकॉल और कॉन्फ़िगर xmobarमैन्युअल के माध्यम से dynamicLog, manageHook, layoutHookऔर handleEventHook। इसके लिए एक न्यूनतम विन्यास होगा:

main = do
    xmproc <- spawnPipe "xmobar"
    xmonad $ defaultConfig
      { modMask            = mod4Mask
      , manageHook         = manageDocks <+> manageHook defaultConfig
      , layoutHook         = avoidStruts  $ layoutHook defaultConfig
      -- this must be in this order, docksEventHook must be last
      , handleEventHook    = handleEventHook defaultConfig <+> docksEventHook
      , logHook            = dynamicLogWithPP xmobarPP
          { ppOutput          = hPutStrLn xmproc
          , ppTitle           = xmobarColor "darkgreen"  "" . shorten 20
          , ppHiddenNoWindows = xmobarColor "grey" ""
          }
      , startupHook        = setWMName "LG3D"
      } `additionalKeys`
      [ ((mod4Mask, xK_b), sendMessage ToggleStruts) ]

यह सभी घटनाओं को संसाधित docsEventHookकरता है और यह सुनिश्चित करता है कि किए गए लेआउट परिवर्तन docsEventHookअंतिम लागू होते हैं। अभी

lowerOnStart = False

(या True) की उम्मीद के रूप में काम सभी मामलों में भीतर xmobarrc


1
जब तक डायनेमिकलॉग पैकेज ठीक नहीं हो जाता है तब तक आप उपयोग कर सकते हैं statusBarऔर बस ओवरराइट कर सकते हैं handleEventHook = handleEventHook defaultConfig <+> docksEventHook
तिमकारो

2

आपके विन्यास की तुलना, मेरे सरल से, जो इस संबंध में सही ढंग से काम करता है, मुझे एक अंतर दिखाई देता है जो कुछ कर सकता है:

general behaviourआपके पास सभी विकल्पों में से केवल मेरे पास है

lowerOnStart = True

और एक भी की hideOnStart, overrideRedirectआदि

जिस तरह से आप xmobar को जोड़ते हैं xmonad.hs, जितना मैं पढ़ सकता हूं, उतना ही मेरा भी।

इस मामले में मैं यथासंभव डिफ़ॉल्ट सेटिंग्स के साथ कोशिश करूँगा, उदाहरण के लिए नाम बदलें .xmobarrcताकि इसे उठाया न जाए, और xmonad.hsउदाहरण के लिए बदल दें

main = xmonad =<< statusBar "xmobar" xmobarPP toggleStrutsKey defaultConfig
toggleStrutsKey XConfig { XMonad.modMask = modMask } = (modMask, xK_b)

और देखें कि क्या यह काम करता है। बाद में थोड़ा-थोड़ा करके डालें, और देखें कि यह कब टूटता है।


धन्यवाद, आपके उत्तर ने मुझे याद दिलाया कि मुझे इसे खाली से शुरू करके डीबग करना चाहिए xmonad.hs। इससे मुझे वास्तविक समस्या का पता चला :)
grochmal
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.