6

XMonad 的新手,到目前为止很喜欢它。我有一个相当普通/常规的 XMonad 设置,并且遇到了dmenu问题。当我登录并点击时,mod+p什么也没有发生。如果我然后打开一个终端并点击xmonad --restartthen mod+pdmenu将会工作。

我的一定有什么问题xmonad.hs?我尝试了 XMonad 的非自定义设置,一切正常(即dmenu登录后工作)。

我的问题:

  1. 我的有什么问题xmonad.hs吗?
  2. 为什么不dmenu工作,除非我xmonad --restart
  3. 在启动 xmonad 时,是否会出现某些故障xmonad.start会阻止 dmenu 正确加载?

这是我的文件(从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

谢谢你的帮助!

4

2 回答 2

1

更新:

似乎已经解决问题的修复正在改变:

exec xmonad

至:

touch ~/.xmonad/xmonad.hs
exec xmonad

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

老的:

怎么改:

} `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”解决了这个问题。但是,在您的情况下,您似乎根本没有绑定。

于 2013-03-05T04:37:25.387 回答
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 not found 错误或对 xmonad.hs 的更改不会生效

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

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

于 2012-12-20T17:45:30.777 回答