심플 미니멀 XMonad 스크린샷
페이지 정보

본문
돌고 돌아. 역시 컴퓨터의 주용도는 음악 감상이네요.
- 심플하고 미니멀한 XMonad 초기화면입니다.
1. $ startx 이후 초기 자동 화면
1번 워크스페이스 : btop
5번 워크스페이스 : nsxiv(mpd | mopidy | spotify 의 cover art), tmux(ncmpcpp + cava)
1-1. xmonad 워크스페이스 화면 분할
https://xmonad.github.io/xmonad-docs/xmonad-contrib/XMonad-Layout-LayoutScreens.html
:: file name :: ~/.xmonad/xmonad.hs
import XMonad.Layout.LayoutScreens
import XMonad.Layout.TwoPane
----------------------------------------------------------------------------}}}
-- Key Binding {{{
-------------------------------------------------------------------------------
-- FOR MULTIMEDIA KEYS RUN:
-- xev | grep -A2 --line-buffered '^KeyRelease' | sed -n '/keycode /s/^.*keycode ([0-9]*).* (.*, (.*)).*$/1 2/p'
-- Then look in /usr/include/X11/XF86keysym.h and look for the name and code.
--
-- Graphics.X11 keysym definitions:https://wiki.haskell.org/Xmonad/Key_codes
-- /usr/include/X11/keysymdef.h
-- Define keys to add
keysToAdd x =
[
-- Fixed Singgle Layout expand & divide 2 pane
(((modMask x .|. controlMask .|. shiftMask), xK_x), layoutScreens 1 (fixedLayout [Rectangle 0 0 3840 1080]))
, (((modMask x .|. controlMask .|. shiftMask), xK_d), layoutSplitScreen 2 (TwoPane 0.5 0.5 )) -- divide single screen to 2 screen
, (((modMask x .|. controlMask .|. shiftMask), xK_f), layoutSplitScreen 2 (TwoPane 0.25 0.75)) -- divide single screen to 2 screen
, (((modMask x .|. controlMask .|. shiftMask), xK_r), layoutScreens 2 (TwoPane 0.25 0.75))
-- Return Default Layout
, (((modMask x .|. controlMask .|. shiftMask), xK_space), rescreen)
]
-- Compose all my new key combinations.
myKeys x = M.union (strippedKeys x) (M.fromList (keysToAdd x ))
-- startup program
myStartupHook :: X()
myStartupHook = do
layoutSplitScreen 2 (TwoPane 0.25 0.75) -- divide single screen to 2 screen
1-2. 유직 전용 5번 워크스페이스에 music을 실행시키고 자동 이동
:: file name :: ~/.xmonad/xmonad.hs
import XMonad.ManageHook --https://hackage.haskell.org/package/xmonad-0.15/docs/XMonad-ManageHook.html
----------------------------------------------------------------------------}}}
-- Window rules: Manage Hook {{{
-------------------------------------------------------------------------------
-- Execute arbitrary actions and WindowSet manipulations when managing
-- a new window. You can use this to, for example, always float a
-- particular program, or have a client always appear on a particular
-- workspace.
--
-- To find the property name associated with a program, use
-- > xprop | grep WM_CLASS
-- and click on the client you're interested in.
--
-- To match on the WM_NAME, you can use 'title' in the same way that
-- 'className' and 'resource' are used below.
--
-- The class name of an application corresponds to the first
-- value of WM_CLASS (“Pidgin”).
-- The resource corresponds to the second value of WM_CLASS (also “Pidgin”).
-- The title corresponds to WM_NAME (“Buddy List”).
-- Define the workspace on application has to go to
myManageHook :: ManageHook
myManageHook = (composeAll . concat $
[
---------------------------------------------------------------------------------
--- !.local/bin/music
---------------------------------------------------------------------------------
, [ resource =? "nsxiv-mpd" <||> className =? "music-tmux" --> doF (W.shift (myWorkspaces !! 4)) ]
, [ resource =? "nsxiv-mpd" <||> className =? "music-tmux" --> doF (W.view (myWorkspaces !! 4)) ]
]) <+> manageHook def
-- startup program
myStartupHook :: X()
myStartupHook = do
spwan "urxvt -e btop"
nextScreen
spwan "~/.local/bin/music"
----------------------------------------------------------------------------}}}
-- Now run xmonad with all the defaults we set up. {{{
-------------------------------------------------------------------------------
--
-- Run xmonad with the settings you specify. No need to modify this.
--
--main = xmonad defaults
defaults = def {
-- Simple stuff
-- terminal = myTerminal
--, focusFollowsMouse = myFocusFollowsMouse
--, clickJustFocuses = myClickJustFocuses
--, borderWidth = myBorderWidth
--, modMask = myModMask
--, workspaces = myWorkspaces
--, normalBorderColor = myNormalBorderColor
--, focusedBorderColor = myFocusedBorderColor
-- key bindings
, keys = myKeys <+> customKeys (const []) inskeys
--, mouseBindings = myMouse
-- hooks, layouts
--, layoutHook = myLayouts
, manageHook = myManageHook
--, handleEventHook = myEventHook
}
1-1 과 1-2 를 합치면 위 스크린샷 결과가 됩니다.
::file name:: ~/.local/bin/music
#!/bin/bash
session="Music"
cover="/home/nietz/Music/cover_ori.png"
#mpv --profile=tv --x11-name=livetv --keepaspect --playlist-start=15 ~/TVChannels/my_tvheadend.m3u & >/dev/null 2>&1
if ! pidof mpd >/dev/null; then mpd; fi
[[ ! -f $cover ]] && ffmpeg -f lavfi -i color=c=red:s=320x240:d=10 -vf "drawtext=fontsize=30:box=1:boxborderw=5:boxcolor=white@0.25:fontcolor=white:x=(w-text_w)/2:y=(h-text_h)/2:text='Clien Linuxer'" $cover;
tmux -2 has-session -t $session
if [ $? -eq 0 ]; then
tmux -2 attach -t $session
/usr/bin/kitty --class=music-tmux --hold sh -c "tmux attach-session -t Music" & >/dev/null 2>&1
/usr/bin/nsxiv -b -N nsxiv-mpd $cover & >/dev/null 2>&1
exit 0
fi
tmux new-session -d -s $session
tmux set-option status off
tmux send-keys -t "$session:1" '/usr/bin/ncmpcpp' C-m
tmux split-window -t "$session:1" -v -p 30 -d '/usr/bin/cava'
tmux new-window -t "$session:2"
tmux send-keys -t "$session:2" '~/.local/bin/notification music 2>/dev/null' C-m
tmux select-window -t "$session:1"
#tmux attach-session -t $session
/usr/bin/kitty --class=music-tmux --hold sh -c "tmux attach-session -t Music" & >/dev/null 2>&1
/usr/bin/nsxiv -b -N nsxiv-mpd $cover & >/dev/null 2>&1
:: file name :: ~/.local/bin/notification
#!/bin/bash
MUSIC_DIR="$HOME/Music/"
ICON="$MUSIC_DIR/cover.png"
ICON2="$MUSIC_DIR/cover_ori.png"
spotify_app="ncspot" # spotify, ncspot
#spotify_app="spotify" # spotify, ncspot
#spotify_app="chromium.instance3290" # spotify, ncspot
spotify_cover="$HOME/Music/cover_spotify.jpg"
# mpd or mopidy
function music
{
while true; do
mpc idleloop |
while read update; do
if [ $update == "player" ]; then
ffmpeg -i "$MUSIC_DIR/`mpc current -f '%file%'`" -vf scale=100:-1
-codec png -y $ICON >/dev/null 2>&1;
ffmpeg -i "$MUSIC_DIR/`mpc current -f '%file%'`" -vf scale=480:-1
-codec png -y $ICON2 >/dev/null 2>&1;
# Get fields from mpc, split by tabs.
IFS=$'t' read album artist title
<<< "$(mpc --format="%album%t%artist%t%title%")"
notify-send --urgency=normal --expire-time=5000 --app-name=mpd
--icon=$ICON " $title" " by $artist"
elif [ $update == "mixer" ]; then
# Get volume
vol=`mpc | tail -n1 | awk '{print $2}'`
notify-send --urgency=low --expire-time=1000 --app-name=mpd
--icon=$ICON " Volume: $vol" "Mixer Changed"
fi
done
done
}
# spotify
function music_spotify
{
if pidof ${spotify_app} >/dev/null; then
old_cover=$(playerctl -p ${spotify_app} metadata mpris:artUrl)
wget ${old_cover} -O ${spotify_cover} & >/dev/null 2>&1;
while true; do
new_cover=$(playerctl -p ${spotify_app} metadata mpris:artUrl)
if [[ ${old_cover} != ${new_cover} ]]; then
wget ${new_cover} -O ${spotify_cover} & >/dev/null 2>&1;
fi
old_cover=${new_cover}
done
else
:
#ffmpeg -f lavfi -i color=c=red:s=320x240:d=10 -vf "drawtext=fontsize=30:box=1:boxborderw=5:boxcolor=white@0.25:fontcolor=white:x=(w-text_w)/2:y=(h-text_h)/2:text='Clien Linuxer'" -frames:v 1 -y ${spotify_cover};
fi
}
case $1 in
music) music ;;
music_s) music_spotify ;;
*) exit 1 ;;
esac
tmux music 스크립트 하나 만들고, msuic cover art 데몬 스크립트 하나 만들어서, 위 xmonad.hs 파일에 적절한 룰을 설정하면, 로그인시 자동 화면 구성 완료.
스크린샷 자체는 깔끔한데요. 스크립트 2개 만들고, 전체 xmonad 설정과 키바인딩 설정은 방대 합니다. 기타 스크핍트들과 유기적으로 연결하여야 하구요.
그래도 이게 젤 편한거 같아요. 10년 전에도 이 구성, 현재도 이 구성.. arch 리눅스 한번 깔면 10년은 거뜬히 가는 것 같습니다.
2. 선호 하는 XMonad 의 레이아웃 중 하나
- 듀얼 Pane(= Dual Workspace) 에 "ResizableThreeCol" Layout 에 magnifiercz 1.5(=활성화된 윈도우 창이 1.5배 확대됩니다) 적용
요즈음은 유투부도 핸드폰으로 보고, 드라마/영화 같은 것도 넷플릭스나 다른 OTT로 보고,, 그것 감상할 때 말고는 토랭이 사용할 일이 거의 없는 것 같아요.
-- Mirror transformation:
, ("M-C-S-m" , sendMessage $ XMonad.Layout.MultiToggle.Toggle MIRROR ) -- bottom xmobar toggle struct. then properly works.
그리고 위 단축키 하나 지정해서 사용하면, 아래 화면의 1번 워크스페이스의 활성화된 윈도우 창 4개가 간단하게 가로 세로 모드로 단축키 누를때 마다 양방 변환 되구요
defaultLayouts = avoidStruts ( Circle ||| gaptiled ||| resize_threecol ||| resize_threecolmid )
where
-- default tiling algorithm partitions the screen into two panes
--tiled = gaps [(U,5), (D,5), (R,5), (L,5)] $ spacing 2 $ Tall nmaster delta ratio -- gap all direction 5
tiled = spacing 0 $ ResizableTall nmaster delta ratio []
--tiled = Tall nmaster delta ratio
gaptiled = gaps [(U,4), (D,4), (L,4), (R,4)] $ spacing 8 $ ResizableTall nmaster delta ratio []
-- The default number of windows in the master pane
resize_threecol = gaps [(U,4), (D,4), (L,4), (R,4)] $ spacing 8 $ magnifiercz' 1.5 $ ResizableThreeCol 1 (3/100) (1/2) []
resize_threecolmid = gaps [(U,4), (D,4), (L,4), (R,4)] $ spacing 8 $ magnifiercz' 1.5 $ ResizableThreeColMid 1 (3/100) (1/2) []
nmaster = 1
-- Default proportion of screen occupied by master pane
ratio = 3/5
-- Percent of screen to increment by when resizing panes
delta = 3/100
3. $ startx 이후 초기 자동 화면 : 우측 최하단의 ncspot(=spotify 프리미엄 계정일 때) 앱을 music tmux 에 추가하고 spotify cover art 데몬 스크립트도 추가한 화면, nsxiv의 covar art 는 spotify cover 또는 mpd cover
돌고 돌아 역시 데스크탑 컴퓨터의 용도는 음악 감상이네요.
추후, 10년 후에도 위 XMonad 화면이 제 로그인 화면이 될 것 같아요.
-- 컴퓨타 커면 노래 틀고, 30초 후 모니터 절전화면 모드 --
예전에는 다른 WM이 궁금하거, 필요한 용도가 있을시. 메인 tty1 은 xmonad 로 x를 띠운 상태고, "ctrl + alt + f2" 를 눌러 tty2 에서 로그인해서, openbox나 kde wm 을 띠우곤 했는데. 요즈음은 F1 X에도 xmonad, F2번 X에도 xmonad 를 띠우네요.
tty 2번 X 에는 edge 웹브라우저를 하나를 전체 화면으로 띠워놓고, 유투브 탭은 하나 띠워 놓고요.
"아들아 컴퓨타로 유투브를 보고 싶으면 "Ctrl + Alt + F2" 를 눌르거라 "
그러합니다. XMonad 는 키보드 단축키와 rofi 단축키와 터미널 단축키 등을 모르면 평범한 데스크탑 사용자는 아무것도 할 수 없습니다. 미니멀 그 자체 입니다.
4. 빅뉴스 입니다. (여자)아이돌 걸그룹 리눅스 "스웨이" 쓰는 덕후랍니다.
긴 글 읽어 주셔서 감사합니다. 즐거운 한 주 되세요
JUQ123님의 댓글의 댓글
마우스가 없고 무각 키보드에 리모컨 하나 보안상 완벽합니다. 음핳핫
신세경은 이쁜 한국 배우 맞슴까 ???
신사아님당님의 댓글의 댓글

마우스도 키보드의 각인도 없어야 한다니... 보안의 길은 멀고도 험하군요.

가끔씩 xmonad.org의 news/blog 에 들어가 보곤 합니다. 혹시 웨일랜드 관련 소식 있을까 하고요..

+
xrandr로 모니터를 가상으로 나눌 필요도 없이 별도의 워크스페이스로 나눠버리다니... ㄷㄷㄷ xmonad의 layout 기능은 정말 부럽습니다.

JUQ123님의 댓글의 댓글
가상 스크린은 와이드 화면 쓰시는 분들에게 유용하죠. 스크린 무한 분할... 와이드 스크린이면 3개 정도로 분활 하면 딱일 것 같아요(외관은 보통의 three_colom layout 와 분할하지만, 독립된 워크스페이스라는)
제가 주목했던 XMonad의 장점은. 1. 키보드 Based , 2. Layout Based 왼도우 매니져. 온갖 레이아웃 다 있어요. 서브 레이아웃 모듈 써서 한 워크스페이스에서 다중 레이아웃 설정도 할 수 있구요.
저 신사아님당님 의 경험처럼. 새벽에 아치 업데이트 작살났었는데. 드뎌 업데이트 다 했어요. 재부팅하니 잘 되네요.
fastfetch 처음으로 설치하고, 한장 찍었어요. 듀얼모니터에 3x 워크스페이스(1번, 5번, tv), 4개까진 확장해서 써봤는데, . 그 이상은 역시 와이드 모니터나 인치수 큰 모니터가 필요합니다. ㅠ.ㅠ, 한때는 27인치 모니터 3대를 세로로 놓고 반대로 X시네라마로 모니터 물리스크린 3개를 하나의 스크린으로 병합해서 kodi 앱으로 영화 본다고 사용한적도 있는데, 다중 모니터는 전기세가 역시 무섭습니다.
- 저처럼 fastfetch 을 이번에 처음 접하는 유저분들을 위한. fastfetch 설치/사용법
* 설치 : $ sudo pacman -S fastfetch
* config 파일 복사 : $ cp -a /usr/share/fastfetch/presets/examples ~/.config/fastfetch
* 이미지 로고는 kitty 터미널에서 잘 뜨네요 (--logo-height 는 안적어도 될것 같아요. 정확한 수치 기재 안하니, ratio 깨지는 경우가 많아서, 아래 옵션으로, 흠 옵션값들 참으로 방대하네요. 먼 말인지(???) )
$ clear && fastfetch --logo /tmp/SSIS-888-poster-korean.jpg --logo-type auto --logo-width 88 --logo-preserve-aspect-ratio -c ~/.config/fastfetch/25.jsonc
2번부터 25번 설정파일 전부 찍어봤는데 저는 25번 설정파일이 가장 맘에 드네요.

케이블 TV의 종편 방송은 대역폭 8Mbps 조금 넘네요.
신사아님당님의 댓글의 댓글

아치 업데이트 icu 관련 댓글 작성하신거 봤습니다.
8년된 pacman.conf 라니요, 저는 종가집 씨간장을 떠올렸답니다.

fastfetch 보기 설정이 /usr/share/fastfetch에 있었군요. 이런건 어떻게 하는건가 궁금했었습니다.
저도 따라해 봤는데 foot터미널에서는 정말 사진이 안뜨더군요. kitty에서는 잘 표시되네요.

저도 예전엔 모니터 3대 썼었는데, 지금은 한 대만 쓰고있습니다. 전기요금... 무섭습니다.

Realtime님의 댓글

저는 미디어는 그냥 크롬이나 데스크탑앱 쓰는게 편하더라구요.
코딩이나 파일 관리 정도만 터미널로...
JUQ123님의 댓글의 댓글
3. 세번째 한국 가수 소향 - 세계 최정상급 넘버 원 가수
2. 두뻔째 일본 가수 카와키타 사이카 - 일본 최정상급 가수(???) 노래 실력은 과연 ?
- 카와키타 사이카 •즛토 이쇼니(언제나 함께)•
2-2. 일본 최정상급 여배우 연기실력은 과연?
- “카오키타 사이카의 출장 앤티알” (직장인의 출장지에서의 “애환” 을 “깊게” 다룬 영화, ¥ 흠 과음이 이렇게 위헙합니다 아 맥주 먹고 싶어요 ¥)
저는 미디어는 mpv 하나로 거진 퉁치는 것 같아요. 웹브라우저에서 mpv확장 익스텐션으로 브라우저의 영상을 mpv로 토스하면 하드웨어 가속 잘되서 좋고 각종 옵션 설정할 수 잇어서 유용하엿어요
세로 영상 보기애도 편햇구요
그러합니다. 오늘은 정말 건전하엿습니다
JUQ123님의 댓글의 댓글
다만 “내 용도에 부합하는 나만의 커스텀 wm”이라는 목표 방향이 잇엇던지라, 방대한 xmonad 관련 문서는 다 읽엇던 기억이 납니다.
각종 앱의 세팅/테마 파일들과 잡다한 스크립트 들 - 파일 100개 이상에, 라인수 5만 라인 가량(??), 사용하는 단축키 1,000여개, - 키보드로 90% 가량 다 되긴 하는데, 컴터 한동안 안 쓰다 다시 쓰려하면, 자주 사용하는 필수 단축키 제외라면, 설정햇던 앱들의 대다수 단축키가 기억이 안 나는 난감함이 발생하네요. 음 ㅠㅠ
진정 커스텀 세팅 노가다 작업. 지금 다시 하라면 못할것 가타요. 한번 딥세팅하고 사골처럼 오래오래 우려먹자. 10년동안 세팅햇고 20년은 족히 그대로 사용할 듯 합니다
신사아님당님의 댓글
xmonad는 문법이 일단 어려워 보이고 또 wayland 지원도 요원해 보이기도 하고... 그래서 지금 들어가기는 좀 그렇다며 포기했는데, JUQ123님께서 올려주시는 글, 스샷을 보면 또 마음이 들썩이곤 합니당. ㅎㅎㅎ
+
가족에게 PC가 노출될 때 wm이 갖는 보안상의 장점이 있군요. 참고하겠습니다. (응?)
++
ctrl + alt + f1을 누르니 GDM 로그인 화면이 뜨고 f2를 누르니 원래 사용중인 그놈화면이 떠서, ctrl + alt + f3을 누르고 로그인 해서 hyprland를 실행했더니, 오! 되네요!
X를 두 개 띄우는건 생각도 못해봤는데;; 그동안은 wm 찍먹 할 때마다 그놈에서 로그아웃하고 찍먹용 계정으로 로그인 하는 식으로 했거든요. 신세경입니다. ㅠㅠ*