稳定,快速的xmonad

一台旧电脑跑stumpwm有点吃力,就换成了很久以前使用过的xmonad,网上一搜,发现xmonad的开发还比较活跃!简单修改了以前的配置就可以运行了,系统跑起来既快又稳定,很适合编程序。updated on github

.安装(先装好GHC)

$cabal update && cabal install xmonad && cabal install xmonad-contrib

$ghc-pkg list|grep -i xmonad
xmonad-0.11
xmonad-contrib-0.11


.编译(将xmonad.hs拷入~/.xmonad)

$xmonad --recompile


.将`exec xmonad`写入~/.xinitrc


.附xmonad.hs

import qualified Data.Map as M
import System.IO
--import Graphics.X11.Xlib
import Data.Char (isSpace)

import XMonad
import qualified XMonad.StackSet as W 

import XMonad.Actions.GridSelect
--import XMonad.Actions.WindowMenu

import XMonad.Hooks.ManageDocks
--import XMonad.Hooks.EwmhDesktops
import XMonad.Hooks.DynamicLog
import XMonad.Hooks.ManageHelpers
--import XMonad.Hooks.UrgencyHook
-- Java swing fix
import XMonad.Hooks.ICCCMFocus (takeTopFocus)
import XMonad.Hooks.SetWMName (setWMName)

import XMonad.Layout.IM
import XMonad.Layout.NoBorders
import XMonad.Layout.WindowNavigation
import XMonad.Layout.ResizableTile
import XMonad.Layout.PerWorkspace  (onWorkspace)
import XMonad.Layout.LayoutHints   (layoutHintsWithPlacement)
import XMonad.Layout.SimplestFloat (simplestFloat)
import XMonad.Layout.Column
import XMonad.Layout.ShowWName

import XMonad.Prompt
import XMonad.Prompt.RunOrRaise (runOrRaisePrompt)

import XMonad.Util.Run
import XMonad.Util.EZConfig(additionalKeys)
import XMonad.Util.WindowProperties (getProp32s)
import XMonad.Util.Scratchpad --招之既来,挥之既去的xPad。这里只配置了作为计算嚣的Prolog Pad,使用XMonad.Util.NamedScratchpad可配置各种各样的Pad,很方便。

--myStatusBar = "dzen2 -x '0' -y '0' -h '24' -w '1280' -ta 'l' -fg '#FFFFFF' -bg '#161616' -fn '-*-simsun-medium-r-normal-*-12-*-*-*-*-*-iso10646-1'"
--myBtmStatusBar = "conky -c /home/serrghi/.conky_bottom_dzen | dzen2 -x '0' -w '1280' -h '24' -ta 'c' -bg '#161616' -fg '#FFFFFF' -fn '-*-bitstream vera sans-medium-r-normal-*-11-*-*-*-*-*-*-*' -y '776'"
--xmobar   = "~/.cabal/bin/xmobar"
--xmobarrc = "~/.xmonad/xmobarrc"

main = do
    --xmobar <- spawnPipe $ xmobar ++ " " ++ xmobarrc
    --dzenTopBar <- spawnPipe myStatusBar
    --dzenBtmBar <- spawnPipe myBtmStatusBar
    xmonad {- $ withUrgencyHook FocusHook -} $ {- ewmh -} defaultConfig {
        --handleEventHook = handleEventHook defaultConfig <+> fullscreenEventHook
       borderWidth		= 1
      , focusedBorderColor 	= "#ff6666"
      , normalBorderColor 	= "#2222aa"
      , manageHook = manageHook defaultConfig <+> myManageHook
      , workspaces = ["1-work","2-game","3-test"] -- ++ map show [3..9]
      , terminal = "xterm"
      , modMask  = mod4Mask
      , focusFollowsMouse  = False
      , startupHook = myStartupHook
        --, logHook = myLogHook dzenTopBar
        --, logHook = takeTopFocus >> myLogHook xmobar
      , logHook = myLogHook
      , layoutHook = showWName myLayout
   } `additionalKeys` myKeys

myStartupHook :: X ()
myStartupHook = do 
	return ()
    --spawnOnce "fcitx"
    --spawnOnce "lxpanel"

myLogHook :: X ()
myLogHook = return ()

--myLogHook :: Handle -> X ()
-- myLogHook h = dynamicLogWithPP $ defaultPP
--       {   ppCurrent	= dzenColor "black" "green" . pad
-- 	, ppVisible	= dzenColor "black" "lightgreen" . pad
-- 	, ppHidden	= dzenColor "#cccccc" "" . pad
-- 	, ppHiddenNoWindows = dzenColor "#444444"  "" . pad
-- 	, ppUrgent	= dzenColor "" "red"
-- 	, ppWsSep    = " "
-- 	, ppSep      = " | "
-- 	, ppTitle    = (" " ++) . dzenColor "green" "" . dzenEscape
-- 	, ppOutput   = hPutStrLn h 
--       }

-- myLogHook xmproc = dynamicLogWithPP xmobarPP
--   { ppOutput = hPutStrLn xmproc
--   , ppTitle  = xmobarColor "#ca8f2d" "" . shorten 72
--   , ppLayout = const ""
--   , ppHidden = \ws -> if ws == "NSP" then "" else ws
--   , ppCurrent = xmobarColor "yellow" ""
--   }

myLayout = windowNavigation $ avoidStruts $ noBorders --smartBorders
           $ onWorkspace "1-work" simplestFloat
           $ onWorkspace "2-game" simplestFloat
           $ onWorkspace "3-test"  (Column 0.60)
           $ simplestFloat  --stdLayouts
     -- where
    --      stdLayouts = Mirror tall ||| tall ||| full      

    --      tall 	= Tall nmaster delta ratio
    --      full    = hinted (noBorders Full)

    -- -- like hintedTile but for any layout
    --      hinted l        = layoutHintsWithPlacement (0,0) l
    --      nmaster         = 1
    --      delta           = 3/100
    --      ratio           = toRational (2 / (1 + sqrt 5 :: Double)) -- golden ratio

myManageHook :: ManageHook
myManageHook = (composeAll . concat $
    [[className =? c --> doIgnore | c <- myIgnores]
    ,[className =? c --> doFloat | c <- myCFloats]
    ,[isFullscreen --> doFullFloat]
    ]) <+> manageTypes <+> manageDocks <+> scratchpadManageHook (W.RationalRect 0.50 0.375 0.50 0.60)
  where
    myIgnores = ["trayer", "desktop", "desktop_window"]
    myCFloats = ["GQview", "MPlayer", "Vncviewer","Xmessage"]
    role = stringProperty "WM_WINDOW_ROLE"
    name = stringProperty "WM_NAME"

manageTypes :: ManageHook
manageTypes = checkType --> doCenterFloat

checkType :: Query Bool
checkType = ask >>= \w -> liftX $ do
    m <- getAtom "_NET_WM_WINDOW_TYPE_MENU"
    d <- getAtom "_NET_WM_WINDOW_TYPE_DIALOG"
    u <- getAtom "_NET_WM_WINDOW_TYPE_UTILITY"
    mbr <- getProp32s "_NET_WM_WINDOW_TYPE" w

    case mbr of
        Just [r] -> return $ elem (fromIntegral r) [m,d,u]
        _        -> return False

-- Theme {{{
-- Color names are easier to remember:
colorOrange          = "#ff7701"
colorDarkGray        = "#171717"
colorPink            = "#e3008d"
colorGreen           = "#00aa4a"
colorBlue            = "#008dd5"
colorYellow          = "#fee100"
colorWhite           = "#cfbfad"
 
colorNormalBorder    = "#1c2636"
colorFocusedBorder   = "#ebac54"
barFont  = "terminus"
barXFont = "inconsolata:size=14"
xftFont = "xft: inconsolata-14"
--}}}

-- Prompt Config {{{
myXPConfig :: XPConfig
myXPConfig = defaultXPConfig {
          font                  = "xft:WenQuanYi Zen Hei:pixelsize=16"
        , bgColor               = colorDarkGray
        , fgColor               = colorGreen
        , bgHLight              = colorGreen
        , fgHLight              = colorDarkGray
        , promptBorderWidth     = 0
        , height                = 14
        , historyFilter         = deleteConsecutive
}

-- Run"" or Raise Menu
largeXPConfig :: XPConfig
largeXPConfig = myXPConfig
                { font = xftFont
                , height = 20
                }
-- }}}

emacs = "emacs -geometry 176x33+0+376"
xterm="xterm -geometry 159x25+0+438"
eweiqi="wine \"c:/Program Files/eweiqi/LiveBaduk.exe\""
winxp="VBoxManage startvm winxp"

myKeys = let modm = mod4Mask in
    [ ((modm, xK_w), spawn "opera")
    , ((modm, xK_e), spawn emacs)
    , ((modm, xK_g), goToSelected defaultGSConfig)
    , ((modm, xK_p), spawnSelected defaultGSConfig [
              xterm, "opera", emacs, eweiqi, winxp])
    , ((modm .|. shiftMask, xK_p),runOrRaisePrompt largeXPConfig)
    , ((modm, xK_F11), spawn "sudo /sbin/shutdown -r now")
    , ((modm, xK_F12), spawn "sudo /sbin/shutdown -p now")
    --, ((modm .|. shiftMask, xK_Print), spawn "sleep 0.2; scrot -s")
    , ((modm, xK_Print), spawn "scrot '/tmp/%Y-%m-%d_%H:%M:%S_$wx$h_scrot.png' -e 'mv $f ~'")
    , ((modm, xK_k), kill)
    , ((modm, xK_space), scratchpadSpawnActionCustom "xterm -name scratchpad -e pl")

    --, ((modm, xK_c), inputPrompt myXPConfig "Word" >>= flip whenJust (\word-> spawn $ "wn " ++ word ++ " -over" ++ "|dmenu -l 30 -nb '#000000' -nf '#FFFFFF' -fn '-*-simsun-medium-r-normal-*-16-*-*-*-*-*-iso10646-1'")) -- use dmenu to display E-E dictionary
   , ((modm, xK_c), inputPrompt myXPConfig "Word" >>= flip whenJust (\word-> spawn $ "~/bin/sdcv.sh " ++ word))  --use zenity to show E-C dictionary

    -- Window Navigation
    , ((modm, xK_Right), sendMessage $ Go R)
    , ((modm, xK_Left ), sendMessage $ Go L)
    , ((modm, xK_Up   ), sendMessage $ Go U)
    , ((modm, xK_Down ), sendMessage $ Go D)

    -- swap...
    , ((modm .|. controlMask, xK_Right), sendMessage $ Swap R)
    , ((modm .|. controlMask, xK_Left ), sendMessage $ Swap L)
    , ((modm .|. controlMask, xK_Up   ), sendMessage $ Swap U)
    , ((modm .|. controlMask, xK_Down ), sendMessage $ Swap D)
    --, ((modm .|. controlMask, xK_Up), windows W.swapUp)
    --, ((modm .|. controlMask, xK_Down), windows W.swapDown)
      
    -- sound control
    -- , ((modm .|. shiftMask, xK_Up), spawn "aumix -v+6") -- volume++ 
    -- , ((modm .|. shiftMask, xK_Down ), spawn "aumix -v-6") -- volume-- 
    -- , ((modm .|. shiftMask, xK_Left ), spawn "amixer set Master toggle") -- mute

    , ((modm .|. shiftMask, xK_r), spawn "xmonad --recompile && xmonad --restart")
    ]



.附sdcv.sh

#!/bin/sh
res=`sdcv -n $1`

if [ $? -eq 0 ]
then
zenity --info --text="$res"
else
zenity --error --text="No input provided"
fi


在Linux命令行下设置显示器镜像显示通常涉及到调整系统的显示配置。这需要对X Window System有基本了解,因为它是大多数Linux桌面环境的基础。以下是在Ubuntu或基于Debian的系统中设置双屏或多屏镜像显示的一般步骤: 1. **安装必要的工具**: 打开终端(`Ctrl+Alt+T`),首先更新软件包列表并安装xrandr工具: ``` sudo apt update sudo apt install xserver-xorg-input-all x11-apps -y ``` 2. **查看当前显示器信息**: 使用`xrandr`命令查看所有可用的显示器设备: ``` xrandr ``` 3. **创建镜像模式**: 如果有多块屏幕,可以使用`xrandr`的`--output`选项指定要改变的显示器,并加上`--primary`设置为活动显示器,然后添加`-mirror`或`-reflect`创建镜像模式。例如,假设你的显示器分别连接到"DP-1"和"HDMI-1": ``` xrandr --output DP-1 --primary --mode <your_mode> --panning 0 0 +1920+0 xrandr --output HDMI-1 --same-as DP-1 ``` 将 `<your_mode>` 替换为你想要的分辨率,如 `1920x1080`。 4. **保存设置**: 若要永久更改此设置,可以在`.xinitrc`、`~/.config/xmonad/xmonad.hs`或其他启动脚本中添加上述命令,或者编辑`/etc/X11/xorg.conf.d/`下的相关配置文件。 5. **重启显示服务**: 最后,你需要注销当前用户并重新登录或者运行以下命令来应用新的显示设置: ``` sudo restart lightdm (对于轻量级DM) sudo service gdm restart (对于GNOME Display Manager) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值