XMonad的新手并且热爱它到目前为止。我有一个相当普通/常规的XMonad设置,并且遇到 dmenu 的问题。当我登录并点击mod+p
时,没有任何反应。如果我打开终端然后点击xmonad --restart
然后点击mod+p
,dmenu
将会正常运行。
xmonad.hs
一定有问题吗?我尝试了XMonad的非自定义设置,但事情正常(即dmenu
在登录后正在运行)。
我的问题:
xmonad.hs
dmenu
?xmonad --restart
无效?
xmonad.start
中的某些内容是否会在启动xmonad时阻止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
感谢您的帮助!
答案 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 -- xmonad
或xinit -- /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”修复了问题。但是,在你的情况下,看起来你根本就缺少了绑定。