Ubuntu 与XMonad配对

Ubuntu 与XMonad配对,ubuntu,xmonad,mate-desktop,Ubuntu,Xmonad,Mate Desktop,由于MATE只是GNOME2的一个分支,显然可以使用以下命令将窗口管理器替换为另一个(即xmonad):mateconftool-2-s/desktop/MATE/session/required\u components/windowmanager xmonad--type string。这是在我登录MATE时启动XMonad的意义上起作用的,但是,看起来XMonad正在尝试平铺面板或其他东西。其中一个面板几乎填满了所有不该占用的空间(顶部和底部都是空的),系统完全无法使用(需要重新启动) 我

由于MATE只是GNOME2的一个分支,显然可以使用以下命令将窗口管理器替换为另一个(即xmonad):
mateconftool-2-s/desktop/MATE/session/required\u components/windowmanager xmonad--type string
。这是在我登录MATE时启动XMonad的意义上起作用的,但是,看起来XMonad正在尝试平铺面板或其他东西。其中一个面板几乎填满了所有不该占用的空间(顶部和底部都是空的),系统完全无法使用(需要重新启动)

我的xmonad.hs:

{-# LANGUAGE OverloadedStrings #-}

import XMonad
import XMonad.Hooks.DynamicLog
import XMonad.Hooks.SetWMName
import Control.Monad
import qualified XMonad.StackSet as W
import XMonad.Util.EZConfig
import qualified XMonad.Actions.FlexibleResize as Flex
import XMonad.Hooks.EwmhDesktops

import XMonad.Config.Desktop
import XMonad.Hooks.ManageDocks
import XMonad.Layout.NoBorders
import XMonad.Layout.LayoutHints

import XMonad.Util.Run (safeSpawn)

import System.Environment (getEnvironment)

main = xmonad mateConfig

mateConfig = desktopConfig
            { logHook = spawn "wmname LG3D"
            , manageHook = myManageHook <+> manageHook mateConfig
            , workspaces = ["1", "2", "3", "4", "5", "="]
            , modMask = mod4Mask
            , terminal = "gnome-terminal"
            , startupHook = takeTopFocus >> setWMName "LG3D"
            , handleEventHook = fullscreenEventHook
            --, layoutHook = layoutHints $ avoidStruts (noBorders Full) ||| Mirror (Tall (1 (3/100) (1/2))) 
            , layoutHook = avoidStruts ((noBorders Full) ||| Mirror (Tall 1 (3/100) (1/2)))
         }

         `additionalKeys` [ ((mod4Mask, xK_d), spawn "dmenu_run -fn \"Ubuntu_Mono-13:Normal\" -nb black -nf skyblue -sb skyblue -sf black")
                           ,((mod4Mask, xK_v), spawn "gvim")
                           ,((mod4Mask, xK_x), spawn "gvim ~/.xmonad/xmonad.hs")
                           ,((mod4Mask, xK_p), spawn "gnome-terminal")
                           -- ,((0       , xF86XK_AudioPlay), spawn "echo \"PLAY\" > ~/Desktop/hi")
                            ]

         `additionalMouseBindings` [ ((mod4Mask, button3), (\w -> focus w >> Flex.mouseResizeWindow w))
                                    ]


myManageHook = composeAll
    [ className =? "Amarok" --> doShift "="
    , manageDocks
    ]


{--- DBus Stuff-}
-- | Register xmonad with mate. 'dbus-send' must be in the $PATH with which
-- xmonad is started.
--
-- This action reduces a delay on startup only only if you have configured
-- mate-session>=2.26: to start xmonad with a command as such:
--
-- > mateconftool-2 -s /desktop/mate/session/required_components/windowmanager xmonad --type string
mateRegister :: MonadIO m => m ()
mateRegister = io $ do
    x <- lookup "DESKTOP_AUTOSTART_ID" `fmap` getEnvironment
    whenJust x $ \sessionId -> safeSpawn "dbus-send"
            ["--session"
            ,"--print-reply=string"
            ,"--dest=org.mate.SessionManager"
            ,"/org/mate/SessionManager"
            ,"org.mate.SessionManager.RegisterClient"
            ,"string:xmonad"
            ,"string:"++sessionId]




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
{-#语言重载字符串}
导入XMonad
导入XMonad.Hooks.DynamicLog
导入XMonad.Hooks.SetWMName
进口管制
导入合格的XMonad.StackSet作为W
导入XMonad.Util.EZConfig
导入限定的XMonad.Actions.FlexibleResize作为Flex
导入XMonad.Hooks.EwmhDesktops
导入XMonad.Config.Desktop
导入XMonad.Hooks.ManageDocks
导入XMonad.Layout.NoBorders
导入XMonad.Layout.LayoutHints
导入XMonad.Util.Run(safeSpawn)
导入System.Environment(getEnvironment)
main=xmonad mateConfig
mateConfig=desktopConfig
{logHook=spawn“wmname LG3D”
,manageHook=myManageHook manageHook mateConfig
,工作区=[“1”、“2”、“3”、“4”、“5”和“=”]
,modMask=mod4Mask
,terminal=“gnome终端”
,startupHook=takeTopFocus>>设置WMName“LG3D”
,handleEventHook=fullscreenEventHook
--,layoutHook=layoutHints$avoidStruts(订单已满)| | |镜子(高(1(3/100)(1/2)))
,layoutHook=avoidStruts((订单满)| |镜子(高1(3/100)(1/2)))
}
`附加键“[(mod4Mask,xK_d),生成“dmenu_run-fn\”Ubuntu_Mono-13:Normal\”-nb black-nf skyblue-sb skyblue-sf black)
,((mod4Mask,xK_v),生成“gvim”)
,((mod4Mask,xK_x),生成“gvim~/.xmonad/xmonad.hs”)
,((mod4Mask,xK_p),生成“侏儒终端”)
--,((0,xF86XK_AudioPlay),生成“echo\”PLAY\“>~/Desktop/hi”)
]
`其他鼠标索引“[(mod4Mask,button3),(\w->focus w>>Flex.mouseResizeWindow))
]
myManageHook=composell
[className=?“Amarok”-->doShift=”
,manageDocks
]
{--DBus-Stuff-}
--|向mate登记xmonad。”“dbus send”必须位于
--xmonad已启动。
--
--此操作仅在您已配置的情况下减少启动延迟
--mate session>=2.26:要使用如下命令启动xmonad:
--
-->mateconftool-2-s/desktop/mate/session/required\u components/windowmanager xmonad——输入字符串
mateRegister::MonadIO m=>m()
mateRegister=io$do
x安全产卵“dbus发送”
[“--会议”
,“--打印答复=字符串”
,“--dest=org.mate.SessionManager”
,“/org/mate/SessionManager”
,“org.mate.SessionManager.RegisterClient”
,“字符串:xmonad”
,“字符串:”++sessionId]
原子WM\u获取焦点::
X原子
原子对焦=
getAtom“WM\u获取焦点”
takeFocusX::
窗口
->X()
takeFocusX w=
使用窗口集。const$do

dpy啊,我找到了。我在
mateConfig
部分的
manageHook
中犯了一个愚蠢的错误。行
manageHook=myManageHook-manageHook-mateConfig
没有真正意义,因为它引用的是mateConfig,它仍然由这行定义。它实际上应该是
manageHook=myManageHook manageHook desktopConfig
。mateConfig应该是desktopConfig


还有,logHook,handleEventHook等。。。缺少了Hook desktopConfig
部分,它破坏了一大堆东西。

我正在使用XMonad运行MATE。检查配置。在此

谢谢!桌面环境的舒适性和平铺窗口管理器的效率!这太棒了!非常感谢您的配置,我不认识任何haskell,我有点懒=)