XMonad:dmenu在启动时没有启动/生成

时间:2012-12-20 05:10:53

标签: linux haskell ubuntu-12.04 xmonad

XMonad的新手并且热爱它到目前为止。我有一个相当普通/常规的XMonad设置,并且遇到 dmenu 的问题。当我登录并点击mod+p时,没有任何反应。如果我打开终端然后点击xmonad --restart然后点击mod+pdmenu将会正常运行。

xmonad.hs一定有问题吗?我尝试了XMonad的非自定义设置,但事情正常(即dmenu在登录后正在运行)。

我的问题:

  1. 我的xmonad.hs
  2. 出了什么问题
  3. 除非dmenu
  4. ,否则为什么xmonad --restart无效?
  5. xmonad.start中的某些内容是否会在启动xmonad时阻止dmenu正确加载?
  6. 以下是我的文件(借鉴overthink)。 :

    xmonad.hs

    import System.IO
    import XMonad
    import XMonad.Hooks.DynamicLog
    import XMonad.Hooks.ManageDocks
    import XMonad.Hooks.SetWMName
    import XMonad.Util.EZConfig(additionalKeys)
    import XMonad.Util.Run(spawnPipe)
    import XMonad.Hooks.ICCCMFocus
    
    myWorkspaces = ["1", "2", "3", "4", "5", "6"] 
    
    myManageHook = composeAll
      [ className =? "Gimp" --> doFloat
      , className =? "Vncviewer" --> doFloat
      ]
    
    main = do
      xmproc <- spawnPipe "/usr/bin/xmobar /home/aaron/.xmobarrc"
      xmonad $ defaultConfig { terminal = "urxvt" }
          { manageHook = manageDocks <+> manageHook defaultConfig
          , startupHook = takeTopFocus >> setWMName "LG3D" -- fix for Java apps
          , layoutHook = avoidStruts  $  layoutHook defaultConfig
          , logHook = dynamicLogWithPP xmobarPP
                          { ppOutput = hPutStrLn xmproc
                          , ppTitle = xmobarColor "green" "" . shorten 50
                          }
          , modMask = mod4Mask     -- Rebind Mod to the Windows key
          , workspaces = myWorkspaces
          } `additionalKeys`
          [ ((mod4Mask .|. shiftMask, xK_l), spawn "gnome-screensaver-command --lock") ]
    

    xmonad.desktop

    [Desktop Entry]
    Encoding=UTF-8
    Name=Xmonad-****
    Comment=Ligthweight, pretentious tiling window manager
    Exec=xmonad.start
    Icon=xmonad.png
    Type=XSession
    

    xmonad.start

    #!/bin/bash
    
    xrdb -merge .Xresources
    
    trayer --edge top --align right --SetDockType true --SetPartialStrut true --expand true --widthtype percent --width 10 --heighttype pixel --height 20 --transparent true --alpha 0 --tint 0x333333 &
    
    # settings daemon is a prereq for some other gnome apps
    gnome-settings-daemon &
    
    # Network monitor (connections, vpns) applet in tray
    if [ -x /usr/bin/nm-applet ] ; then
        nm-applet --sm-disable &
    fi
    
    # volume indicator in tray
    if [ -x /usr/bin/gnome-sound-applet ] ; then
      gnome-sound-applet &
    fi
    
    eval $(gnome-keyring-daemon --start)
    export GNOME_KEYRING_SOCKET
    export GNOME_KEYRING_PID
    
    #exec xmonad
    dbus-launch --exit-with-session xmonad
    

    感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

我有一种模糊的感觉,当你第一次启动xmonad时,它使用一个可执行文件+配置,然后当你重新编译时,它会找到“正确的”。在xmonad.desktop中,尝试更改Exec=行以包含xmonad.start的完整路径。

Exec=/full/path/to/xmonad.start

或者您可以尝试更改xmonad.start中的最后一行以包含xmonad可执行文件的完整路径。

dbus-launch --exit-with-session /full/path/to/xmonad

要尝试的另一件事是将最后两行更改为:

exec xmonad
#dbus-launch --exit-with-session xmonad

如果这些选项中的任何一个改变了您所看到的行为,那么这可能会给我们一些线索。


编辑:让我们尝试一种不同的方式启动它,看看我们是否可以学到任何东西。不要启动任何窗口管理器,而是登录普通终端。输入命令xinit -- xmonadxinit -- /full/path/to/xmonad

或者,创建文件.xinitrc,其中包含一行:

xmonad

然后输入命令startx

我也在Xmonad FAQ上找到了这个,这可能有所帮助:

  

2.6未找到错误或xmonad.hs的更改将不会生效

     

确保ghc和xmonad可执行文件都在环境中   从中开始X的路径。或者将它们符号链接到位置   已经在PATH中。 ghc-pkg列表应该显示ghc,xmonad,X11等。   没有括号,例如{xmonad}很糟糕。 ghc-pkg检查会告诉你是否   您有不一致的依赖关系或其他注册问题。

     

mod-q动作调用xmonad二进制文件来重新编译自己,所以如果   您的显示管理器正在使用/ path / to / xmonad启动它   必须编辑你的xmonad.hs mod-q绑定以使用完整路径和   重启X(或在较新版本中使用'xmonad --restart')重启   xmonad使用新的mod-q完整路径绑定。

答案 1 :(得分:1)

更新:

似乎解决问题的修复方法正在改变:

exec xmonad

要:

touch ~/.xmonad/xmonad.hs
exec xmonad

/usr/local/bin/xmonad.start (or .xinitrc/.xsession if xmonad is started using startx)

OLD:

如何改变:

} `additionalKeys`
 [ ((mod4Mask .|. shiftMask, xK_l), spawn "gnome-screensaver-command --lock") ]

要:

} `additionalKeys`
  [ ((mod4Mask .|. shiftMask, xK_l), spawn "gnome-screensaver-command --lock") 
  , ((mod4Mask, xK_p), spawn "dmenu_run -b -nb black") ]

我和你有同样的问题,因为我使用了类似的东西:

((mod4Mask, xK_p), spawn "exe=`dmenu_path | dmenu` && eval \"exec $exe\"")

由于某种原因,只有在“xmonad --restart”之后才能正常工作。将绑定更改为简单的“dmenu-run”修复了问题。但是,在你的情况下,看起来你根本就缺少了绑定。