JUQ123 (146.♡.205.174)
2025년 7월 30일 PM 11:48 · 수정됨(08. 07. 00:59)
0. 진정한 미니멀 : #000000 + 음악재생 (검은 화면 뜨고,소리 난다. 아싸아 컴터 잘 된다)
| 마우스 커서는 살려주었습니다. 간혹 저도 tty인지 X 진입 했는지 에러 화면인지 헷갈리네요.

1. AV Layout : 음악/애니메이션/유투브/TV 감상 및 웹서핑
3x 워크스페이스
| 좌: 스포티파이 앱, 유투브 뮤직 앱, (또는 최하단 mpv TV 채널)
|센터: 넷플릭스(qutebrowser), 또는 터미널
| 우: kitty terminal -> tmux (fastanime, rmpc, cava, yt-x) -> "Win + F8" 스크래치패드 토글 키
| 우측 하단: mpv 유투브 -> root window -> wm 제어권 밖으로 (wm
키 입력 안됨,워크스페이스가 아닌 물리 모니터 위치 고정, yt-x의 mpv 실행 터미널에서 mpv
단축키로 재생 제어, playerctl 툴 이용 mpris로 재생 제어,
아랫단의 어떠한 윈도우 창도 없는 자그마한 여백 부분에 마우스 커서로 전체스크린 토글, 또는 마우스 크릭 후 mpv 단축키 실행 가능)
-- 라면을 주시옷. "태권 소녀인가? 가라데 소녀인가?"

-- 1 Key Start, 터미널에서 영화 잘 나와요
https://drive.google.com/file/d/1oBzG5wr0aoTsBNCG1pKXSz21pJjlqRQX/view?usp=drive_link

2. Ricing-쌀질 모드: 2x 워크 스페이스
| 좌: gemini, qutebrowser, pdf viewer 등 강좌/메뉴얼/위키/git 설명서 보는 부분, 복사/다운로드/뷰어 용도.
| 우: 터미널들 nvim 아님, 설정파일들 vim으로 개별적으로 열어서 수정하는 용도
| 센터: rational Floating - "Win + F12" 스크래치패드 tmux 토글 메인 터미널 : ranger | yazi(듀얼 팬 이상,디렉토리 이동, 파일 복사/붙여넣기, 잘라내기/붙여넣기), 쉘 실행용,
CLI 앱들
* 좌에서 키보드나 마우스로 긁어서, 우로 붙여 넣기, '모방은 창조의 어머니'

* 쌀질 팁: 무수히 많은 설정 파일들을 열어서 수정해야 합니다.GUI 파일 매니저면 군데 군데 폴더들 찾아서 크릭하고 이동하고 파일 여는데 생각보다 시간이 많이 소모되어 던 거 같습니다
ranger나 yazi 같은 파일 매니저가 필요합니다
저는 주력이 ranger 인데 근데 요즈음 yazi가 대새인거 같습니다
-- ranger 치트 키

CLI 파일 매니저에서 zoxide 이용 폴더 이동, 폴더 북마크 기능 이용 폴더 이동, CLI
파일 매니저 내에서 fzf, ag, fd, ripgrep
이용 파일 검색 이동하면 시간을 절약 할 수 있습니다.
* 근데, 설정 파일 여는 용도,디렉토리 이동은 파일 매니저 없이, 그냥 fzf + fd + history 조합이면 충분 한 것 같습니다.
-- fzf 단축키
A. Ctrl + r : fzf 히스토리
B. Alt + t : fzf 파일 찾기
C. Alt + c : fzf 디렉토리 이동
D. 쉘의 자동 완성 기능
E. 쉘의 자체 history 기능
최초 설정파일을 B. Alt + t 단축키 이용 찾아서, vim으로 열어 줍니다. 그러면 history 에 쌓입니다.
이후 A. Ctrl + r 단축키로 설정 파일 이름 키워드로 치면 빠르게 찾아서 열수 있습니다.
제 사용 환경에서 사용빈도는 A >>>> B > C 정도 되는 것 같았습니다.
C는 생각 보다 쓸 일이 많이 없었구, rager나 yazi 의 다중팬에서 디렉토리 이동, 파일 관리 하는게 더 편했기 대문이였습니다.
프로그래머나 개발자분들은 프로젝트 단위의 파일들을 많이 다루시고, WM(윈도우 관리자)의 Tab 그룹, nvim 계열에 확장 플러그인을 많이 사용 하시는 것 같았습니다.
저와 같은 일반 데스크탑 사용자나 취미로 일상적인 용도로 리눅스를 사용하고 간혹 쌀질을 즐겨하는 사람이면 딱 여기까지가 마지노선 인거 같습니다. 이 정도만 해도 충분할 것 같습니다.
쌀질이나 설정파일 커스텀은 영문 문서들만 꾸준히 읽고 설정하면 되는 것 같은데요, quteborwer에 번역 단축키 하나 박아주면 편하게 한글로 메뉴얼/우키 문서들을 편하게 읽을 수 있었습니다.
리눅스 데탑 쓰다보니 간단한 기본적인 쉘 스크립트 정도는 쓸 수 잇게 되었느데. 역시 그이상은 프로그래밍이 능력이 필요 한거 같습니다.이건 본인에게 논외의 영역, 취미로 하기에는 쌀질 보다 더한 시간과 노력이 소모될 것 같았습니다. 무언갈 만들 거라는 목적 외식도 없구, 능력자 분들이 만들어 주신 프로그램들 잘 쓰는게 더 좋은 거 같습니다.
리눅스 오래 쓰면 덕력은 쌓이지만 프로그래밍 능력이 없다면 결국 실력은 쌓이지 않는 것 같습니다.덕력은 충만해지나 실력자들이나 관련 업계 종사자에게는 절대 비빌수가 없습니다.
그러나 우리에겐 AI가 있습니다. 데탑 용도의 본인에게 필요한 스크립트들을 질문만 던져 주면.
AI가 척척 만들어 줍니다. gemini 가 잘 만들어 주더라구요.
한 10일 정도 사용했는데 쌀질에 정말 유용한거 같습니다.
그러고 제미니 믿고 막 돌리다가 참사가 발생햇네요. '기존 영문 주석을 한글 주석으로 바꿔서 주석을 달라' 켔는데. 흠... 부산 사투리로 질문해서 삐꾸 난 걸 까요?

파일이 유실 되엇습니다ㅠ.ㅠ 2014년부터 설정해 왓던 파일인데. 하드 언저리에 2018년도 설정 백업 파일을 찾앗습니다. 앞으로 중요한 파일은 재미니에게 파일을 새로 생성하거나 덮어 쓸거면 무조건 백업 파일도 만들어 달라고 질문을 날려야 하게씁니다.
새로 복구/세팅하면서 mpv man 페이지를 읽어보니 vo=kitty 프로토콜이 추가 되어 있네요.
적용 해 봤는데 잘 되지만 성능 저하가 있습니다(하드웨어 GPU 디코딩+소프트웨어 CPU 렌더링은 가능한것 같다.)
4K/1080p는 shm(공유메모리기능)을 켜야 정상 재생이 가능하다). 기본 옵션으로도 720p 토랭이는 실시간 재생하는 데 전혀 문제가 없엇습니다.
기존 파이션 vapoursyntch, lua, 쉘 스크립트들은 동일하게 사용 할 수 있었지만, 커스텀 세이터는 모두 비활성화 되었습니다
최신 mpv-git 버젼이 필요합니다.
man 페이지에는 tmux 상에서도 가능하다 나와서 좋아라 했는데.시스팀 프리징 났습니다.
이것 저것 버그가 좀 있는 거 같앗지만, 언제가 해결 될 꺼라 기대합니다.터미널에서 이미지/영상 뷰어용도로는 부족함은 크게 없는 거 같습니다
[메인 mpv key binding]
- 데모 영상(강력 후방 주의): https://drive.google.com/file/d/1ee1PN1_wFCruhU7AYbKI2P-vJxbHf0ou/view?usp=sharing
- 영상 재생용 Mpv Default Key Binding

------- Image Viewer용 mpv custom key binding --------
1. ~/.config/mpv/input-image.conf
[code=bash]# vim:ft=cfg:foldmethod=marker
##################################################
### mpv 이미지 뷰어용 설정 파일 (feh/vi 단축키 스타일)
### by nietz
### Last updated : 2025-07-13
##################################################
# --- 탐색 ---
# 다음/이전 이미지로 이동
n repeatable playlist-next force
p repeatable playlist-prev
k playlist-next
j playlist-prev
SPACE playlist-next
BS playlist-prev
RIGHT playlist-next
LEFT playlist-prev
WHEEL_DOWN playlist-next # 마우스 스크롤 밑으로
WHEEL_UP playlist-prev # 마우스 스크롤 위로
HOME no-osd set playlist-pos 0 # Playlist 처음으로
END no-osd set playlist-pos-1 ${playlist-count} # Playlist 마지막으로
# --- 확대 및 이동 ---
# 확대
UP add video-zoom 0.1
= add video-zoom 0.1
KP_ADD add video-zoom 0.1
# 축소
DOWN add video-zoom -0.1
- add video-zoom -0.1
KP_SUBTRACT add video-zoom -0.1
# 확대 축소(마우스 휠 스크롤) : 위 WHEEL_DOWN/UP 키와 겹침/증복, 주석 해제하면 줌으로 동작,주석시 이전/다음 페이지로 동작
#MOUSE_BTN3 add video-zoom 0.1
#MOUSE_BTN4 add video-zoom -0.1
# 확대 초기화
0 set video-zoom 0
KP_MULTIPLY set video-zoom 0
# 이미지 이동 (패닝)
K add video-pan-y -0.01
J add video-pan-y 0.01
H add video-pan-x -0.01
L add video-pan-x 0.01
Alt+UP add video-pan-y -0.01
Alt+DOWN add video-pan-y 0.01
Alt+LEFT add video-pan-x -0.01
Alt+RIGHT add video-pan-x 0.01
Ctrl+UP add video-pan-y -0.1
Ctrl+DOWN add video-pan-y 0.1
Ctrl+LEFT add video-pan-x -0.1
Ctrl+RIGHT add video-pan-x 0.1
# 이미지 이동 (패닝) : 키패드(NumLock on)
Ctrl+KP2 add video-pan-y 0.01
Ctrl+KP4 add video-pan-x -0.01
Ctrl+KP6 add video-pan-x 0.01
Ctrl+KP8 add video-pan-y -0.01
Ctrl+KP1 add video-pan-x -0.01;add video-pan-y 0.01
Ctrl+KP3 add video-pan-x 0.01;add video-pan-y 0.01
Ctrl+KP7 add video-pan-x -0.01;add video-pan-y -0.01
Ctrl+KP9 add video-pan-x 0.01;add video-pan-y -0.01
# 이동 초기화
r set video-pan-x 0; set video-pan-y 0
Ctrl+KP5 set video-pan-x 0; set video-pan-y 0
# 확대/이동 초기화 (화면에 맞춤)
z set video-zoom 0; set video-pan-x 0; set video-pan-y 0
u set video-zoom 0; set video-pan-x 0; set video-pan-y 0
# --- 기타 제어 ---
# 시계 방향으로 90도 회전
#> add video-rotate 90 # "Shift + ."
> no-osd cycle-values video-rotate "90" "180" "270" "0"
# 반시계 방향으로 90도 회전
#< add video-rotate -90 # "Shift + ,"
< no-osd cycle-values video-rotate "270" "180" "90" "0"
# 좌우 반전
h vf toggle hflip
| vf toggle hflip
# 상하 반전
v vf toggle vflip
_ vf toggle vflip
# Toggle Aspect Ratio: 화면비 전환
A cycle-values video-aspect-override "16:9" "4:3" "2.35:1" "no"
# 스케이링 알고리즘 전환
a cycle-values scale bilinear lanczos ewa_lanczos ewa_lanczossharp ewa_lanczos4sharpest mitchell hermite catmull_rom oversample
# Toggle Color Management on or off
Alt+i cycle icc-profile-auto
# Load an ICC profile and use it to transform video RGB to screen output. Needs LittleCMS 2 sup‐ port compiled in. This option overrides the --target-prim, --target-trc and --icc-profile-auto options.
#Ctrl+i cycle icc-profile="<icc profile file>"
# 전체 화면 전환
f cycle fullscreen
# 마우스 커서 보이기/숨기기
Ctrl+o cycle mouse-passthrough
# 스크린샷 (현재 보이는 화면을 파일로 저장)
s screenshot
# --- 애니메이션 이미지 제어 (GIF 등) ---
# 앞/뒤/ 한프레임씩 이동
, frame-back-step
. frame-step
# 일시정지/재생
/ cycle pause
# --- 바탕화면 설정 ---
# {png|jpg|webp} 단일 프레임 파일만,animation gif/webp와 동영상 파일은 lua script 필요. 작성 후 키바인딩
b run "/bin/sh" "-c" "notify-send -h string:x-canonical-private-synchronous:my-notification -i '${path}' '배경화면 지정' '${filename}'; feh --bg-scale '${path}'"
# HTTP 스트림을 포함한 모든 영상, 이미지 : ~/.config/stripts/set-wallpaper.lua
alt+b script-binding set_wallpaper
# --- 이미지 파일 삭제/휴지통 이동 ---
# 파일 시스템에서 현재 파일을 영구적으로 삭제하고, 재생목록에서 현재 이미지를 제거합니다.
Shift+Ctrl+Alt+DEL run "/bin/sh" "-c" "rm '${path}'"; playlist-remove current
# 파일 시스템에서 현재 파일을 휴지통으로 보내고, 재생목록에서 현재 이미지를 제거합니다.
Shift+Ctrl+Meta+DEL run "/bin/sh" "-c" "trash '${path}'"; playlist-remove current
# --- 현재 보고 있는 이미지 포스터의 영화/드라마 파일을 찾아서 바로 재생한다.---
alt+p run "/bin/sh" "-c" "play-video.sh '${filename}' rofi"; quit
# --- 종료 ---
q quit
ESC quit
## --- Lua Custom Keybind --- {{{
###########################################################
## Lua script custom keybinding
## lua scripts file: ~/.config/mpv/scripts/
## cutomization conf: ~/.config/mpv/lua-settings/
## mpv-manga-reader https://github.com/dudemanguy/mpv-manga-reader
D script-message double-page-mode
## stats.lua https://github.com/Argon-/mpv-stats
# stats.conf
# 1 stats (as usual)
# 2 frame timings
#i script-binding stats/display-stats # 아래 jumtofile 중북된다.
I script-binding stats/display-stats-toggle
## autocrop.lua https://github.com/mpv-player/mpv/blob/master/TOOLS/lua/autocrop.lua
C script-binding auto_crop
## autoload.lua https://github.com/mpv-player/mpv/blob/master/TOOLS/lua/autoload.lua
## easycrop.lua https://github.com/aidanholm/mpv-easycrop
#c script-binding easy_crop
## playlistmanager.lua https://github.com/jonniek/mpv-playlistmanager/blob/master/playlistmanager.luao
# playlistmanager.conf https://github.com/jonniek/mpv-playlistmanager/blob/master/playlistmanager.conf
#enter playlist-next ; script-message playlistmanager show playlist
# shitft+enter: show playlist toggle
Ctrl+p script-message playlistmanager sort startover
P script-message playlistmanager show playlist toggle # P로 변경, 상단 p playlist-prev 키(이전 이미지로 이동)를 덮어쓴다.
i script-binding jumptofile
## Encode, Various scripts for mpv https://github.com/occivink/mpv-scripts#encodelua
# vo mode: no hwdec, no vapoursynth
# {blacklist-extensions,blur-edges,crop,encode,misc,seek-to}.lua
# {blacklist-extensions,blur-edges,crop,encode_slice,encode_webm}.conf
## crop.lua
c script-message-to crop start-crop # start cropping
ctrl+c vf del -1 # (Deprecated. Use mvp-live-filters) remove video filter by 1 setp
alt+c script-message-to crop toggle-crop # or use the ready-make "toggle" binding
d script-message-to delogo start-delogo # start deloging
## delogo.lua
ctrl+d script-message-to delogo toggle-delogo # or use the ready-make "toggle" binding
## encode.lua
alt+e script-message-to encode set-timestamp # encode (default profile: vp8 webms)
e script-message-to encode set-timestamp encode_mp4 # encode (custom mp4 profile)
E script-message-to encode set-timestamp encode_slice # slice (custom profile)
## blur-edges.lua
#b script-message-to blur_edges toggle-blur # 위 b run /bin/sh feh 와 중복
## seek-to.lua
t script-message-to seek_to toggle-seeker
## mpv-live-filters: https://github.com/hdb/mpv-live-filters
################################
#ctrl+z undo last filter
#ctrl+shift+z re-do filter
#ctrl+x toggle filters on/off
#ctrl+shift+x clear all filters
################################
## image-viewer.lua https://github.com/occivink/mpv-image-viewer
#
## mpv-gallery-view https://github.com/occivink/mpv-gallery-view
# {gallery|gallery-thumbgen}.lua
# gallery.conf
#g script-message gallery-view
g script-message contact-sheet-close; script-message playlist-view-toggle
ctrl+alt+c script-message playlist-view-close; script-message contact-sheet-toggle
#g ignore
#g-y script-message-to playlist_view playlist-view-toggle
## mpv_thumbnail_script
shift+alt+s script-binding generate-thumbnails[/code]
2. ~/.local/bin/play-video.sh
[code=bash]#!/bin/bash
# 스크립트 실행 시 키워드가 주어졌는지 확인합니다.
if [ -z "$1" ]; then
echo "사용법: $0 <검색 키워드> [fzf|rofi]"
echo " - 두 번째 인자로 fzf 또는 rofi를 지정하여 선택 도구를 변경할 수 있습니다 (기본값: rofi)."
exit 1
fi
KEYWORD="$1"
UI_CHOICE="$2"
# 영화/드라마 파일 : 제목.{mp4|mkv|mov|ts}
# 영화/드라마 포스터 : 제목-poster.{jpg|png|webp}
# 이미지 포스터 파일에서 제목만 추출한다.
# ex) OFES-024-poster.jpg ----> OFES-024
KEYWORD=$(echo "$KEYWORD" | sed -E 's/(.*)(-poster.*)/1/')
SEARCH_DIR="/run/media/nietz/External_HDD/Jav/Studio/__Uploading"
# fd로 동영상 파일을 검색하고, 결과를 배열로 저장합니다.
# -i: 대소문자 무시, -t f: 파일 타입, -e <ext>: 확장자
mapfile -t files < <(fd -i -t f -e mp4 -e mkv -e avi -e mov -e wmv -e flv -e webm "$KEYWORD" "$SEARCH_DIR")
# 검색된 파일의 개수를 확인합니다.
file_count=${#files[@]}
if [ "$file_count" -eq 0 ]; then
# 파일이 없을 경우
echo "키워드 '$KEYWORD'에 해당하는 영상 파일을 찾을 수 없습니다."
exit 0
elif [ "$file_count" -eq 1 ]; then
# 파일이 하나일 경우, 바로 재생
echo "파일 1개를 찾았습니다. 바로 재생합니다: ${files[0]}"
mpv "${files[0]}"
else
# 파일이 여러 개일 경우, 선택한 UI 도구를 사용
echo "${file_count}개의 파일을 찾았습니다. 재생할 파일을 선택하세요:"
if [ "$UI_CHOICE" == "fzf" ]; then
# fzf로 선택
printf "%sn" "${files[@]}" | fzf | xargs -r mpv
else
# rofi로 선택 (기본값)
chosen_file=$(printf "%sn" "${files[@]}" | rofi -dmenu -p "재생할 파일 선택")
if [ -n "$chosen_file" ]; then
mpv "$chosen_file"
else
echo "아무 파일도 선택되지 않았습니다."
fi
fi
fi[/code]
- 실행: $ mpv --input-conf=~/.config/mpv/input-image.conf ~/Wallpaper
위 단축키 파일이 작동하는 지 확인합니다.
3. ~/.config/mpv/mpv.conf
커스컴 profile 을 만들어서 설정파일 하단에 전부 추가 해 줍니다.
[code=bash]
##################################################
### mpv.conf : [kitty] [imgae] Profile 관련 부분
### by nietz
### Last updated : 2025-07-13
##################################################
[kitty]
profile-desc="profilefor kitty terminal play"
# mpv의 --vo=kitty 옵션은 비디오 출력을 Kitty 터미널 내에서 직접 처리하도록 설정합니다.
# 1. `--vo` (Video Output): 이 옵션은 mpv가 비디오를 렌더링(표시)하기 위해 사용할 드라이버를 지정합니다.
# 예를 들어, --vo=gpu는 그래픽 카드를 사용하고, --vo=x11은 X11 윈도우 시스템을 사용합니다.
# 2. `kitty`: Kitty (https://sw.kovidgoyal.net/kitty/)는 GPU 가속을 지원하는 최신 터미널 에뮬레이터입니다.
# Kitty의 특별한 기능 중 하나는 터미널 내에서 직접 이미지와 비디오를 표시할 수 있는 자체 그래픽 프로토콜을 가지고 있다는 것입니다.
# --vo=kitty의 작동 방식
# 이 옵션을 사용하면 mpv는 별도의 창을 띄우는 대신, Kitty 터미널의 그래픽 프로토콜을 사용하여 비디오 프레임을 터미널 창 안에 직접
# 렌더링합니다.
# 장점:
# * SSH를 통해 원격으로 서버에 접속한 상태에서도 터미널에서 바로 비디오를 재생할 수 있습니다.
# * 별도의 GUI 환경 없이 터미널 환경에서 작업하는 사용자에게 유용합니다.
# 단점:
# * GLSL Shader 사용할 수 없는 것 가탇.
# * [하드웨어 1008p 보간 정상, 하드웨어 4K 60fps 보간시 버벅인다. 소프트웨어 렌더링이라 CPU 점유율 급증한다]
vo=kitty
# 매우 낮은 사양의 시스템이나 그래픽 드라이버가 제대로 작동하지 않는 환경에서 비디오를 재생하기 위한 설정 모음(프로파일)
# * `sw`: Software (소프트웨어)
# * 비디오 디코딩(압축 해제)과 렌더링(화면 출력)을 그래픽 카드(GPU)의 도움 없이 오직 CPU의 힘(소프트웨어)으로만 처리하겠다는 의미입니다.
# * 이는 하드웨어 가속(--hwdec=auto 등)을 사용하지 않는다는 뜻입니다.
# * `fast`: Fast (빠르게)
# * 화질보다는 재생 속도와 성능을 최우선으로 고려한 설정을 사용합니다.
# * 이를 위해 다음과 같은 저사양 설정을 포함할 수 있습니다:
# * 낮은 품질의 업스케일링/다운스케일링 필터 사용 (예: --scale=bilinear)
# * 프레임 드랍 허용: CPU가 따라가지 못하면 일부 프레임을 건너뛰어 싱크를 맞춤 (예: --framedrop=yes)
# * 기타 화질 향상 기능 비활성화
profile=sw-fast
# 기능; 이미지 출력이 끝난 후, 터미널에서 이미지 표시 영역을 지울 것인지 여부를 제어합니다.
# no: 출력이 끝나도 터미널에서 이미지가 사라지지 않음 (그대로 남아 있음).
# yes: mpv가 종료되면 kitty 프로토콜을 통해 이미지 영역을 초기화함.
# yes 로 두고 실행시, 창 사이즈 변경되면 Crash 나서 꺼짐
vo-kitty-config-clear=no
# Kitty 터미널 내에서 동영상을 재생할 때, 비디오 데이터 전송 방식으로 공유 메모리(Shared Memory, shm)를 사용하도록 강제한다
# `--vo-kitty-use-shm`: kitty 드라이버의 세부 옵션입니다. mpv가 동영상 프레임 데이터를 Kitty 터미널로 어떻게 보낼지를 결정합니다.
# * 공유 메모리 (shm) 방식: mpv 프로세스와 Kitty 터미널 프로세스가 시스템의 '공유 메모리' 공간을 함께 사용합니다. mpv가 비디오
# 프레임을 이 메모리에 쓰면, Kitty가 디스크를 거치지 않고 메모리에서 직접 데이터를 읽어와 화면에 표시합니다.
# * 임시 파일 방식 (shm을 사용하지 않을 경우): mpv가 각 비디오 프레임을 디스크에 임시 파일로 저장하면, Kitty가 그 파일을 읽어서
# 화면에 표시합니다. 이 방식은 디스크 I/O가 발생하여 속도가 느립니다.
# * 목적: 성능 향상
# * 장점:
# * 디스크에 데이터를 쓰고 지우는 과정이 없어 재생 속도가 훨씬 빠릅니다.
# * CPU와 디스크 사용량이 줄어들어 시스템 부하가 적습니다.
# * 특히 고화질, 고주사율 영상 재생 시 더 부드러운 화면을 제공합니다
# * 기본값: no
vo-kitty-use-shm=yes
# 기능:kitty 터미널이 멀티플렉서 환경 (예: tmux, screen) 안에서 실행 중일 때, 자동으로 프로토콜을 우회해서 passthrough 출력할지를 설정.
# no: 멀티플렉서 안에서도 kitty 그래픽 프로토콜을 직접 사용하려고 시도합니다.
# yes: 멀티플렉서 감지 시 kitty 이미지 출력 대신 fallback (텍스트 등) 사용합니다.
# no 로 두고 tmux서 실행시, key 입력 먹통 프리징 발생
vo-kitty-auto-multiplexer-passthrough=yes
# 모든 서브시스템의 로그 출력을 비활성화합니다.즉, 터미널에 아무 메시지도 표시되지 않게 됩니다 — 경고, 정보, 디버그 등 포함.
msg-level=all=no
term-status-msg=
term-osd-bar=no
input-ipc-server=/tmp/mpvsocket
hr-seek-framedrop=no
# 상기 sw-fast profile 적용햇지만,다시 아래 하드웨어 가속 옵션 지정해도 "Vulkan-copy"로 하드웨어 가속 디코딩 잘 된다.
# vo=gpu 인 경우, hevc 4k 30fps -> 4K 60 fps NVOF 보간시 CPU 점유율 30프로이고 hwdec: vulkan 인 반면
# vo=kitty 는 hwdec=vulkan-copy(디코딩 후 메모리 적재), 소프트웨어 렌더링 이라 4K 60fps NVOF 보간시 CPU 거의 65% 쳐 먹는다. 보간시 1080p는 자연스럽고, 4K 해상도는 먼가 프레임이 끊기는 느낌이 있다.
gpu-api=auto
gpu-context=auto
hwdec=auto
hwdec-codecs="h264,hevc,vp8,vp9,av1,mpeg2video" # vc1(wmv) 코덱, 녹색 스크린, 하드웨어 디코딩 에러남.
af-clr
vf-clr
glsl-shaders-clr
keepaspect
screen=0
fs-screen=current
scale=bilinear
cscale=bilinear
dscale=bilinear
scale-antiring=0.0
cscale-antiring=0.0
dither-depth=no
correct-downscaling=no
sigmoid-upscaling=no
deband=no
### 이미지 뷰어 프로필 (Image Viewer Profile) ###
# 사용법: mpv --profile=image [이미지 파일 또는 디렉토리]
# 예시: mpv --profile=image my_picture.jpg
# 예시 (디렉토리 내 모든 이미지 보기): mpv --profile=image ./*
[image]
profile-desc="정적 이미지 뷰어 프로필 (Static image viewer profile)"
# --- 기본 설정 ---
# 다음 이미지를보기 전에 다음 이미지를 로드
prefetch-playlist
# 다음 이미지 재생시 zoom/alignment/rotation/pan 위치 초기화, on/off check
reset-on-next-file=video-zoom,panscan,video-unscaled,video-align-x,video-align-y,video-rotate
# 비디오에서 resume-playback 유용하지만, 이미지 모드에선 불필요하다.
no-resume-playback
# 새 파일을로드 한 후에 표시하십시오. osd-msg1 을 설정하여 텍스트를 영구적으로 표시 할 수 있습니다.
osd-playing-msg=${!playlist-count==1:[${playlist-pos-1}/${playlist-count}] }${media-title} ${?width:${width}x${height}} ${?current-tracks/video/image==no:${?percent-pos==0:${duration}}${!percent-pos==0:${time-pos} / ${duration} (${percent-pos}%)}}
osd-playing-msg-duration=5000
# 대부분의 플랫폼에서 배경을 투명하게 만들고 검은 색을 피할 수 있습니다.
# 막대는 여전히 축소 할 수있는 모든 화면 공간을 사용할 수 있습니다.
#background=none
#background-color=0/0
background=color
background-color='#ff312e39'
#
# Valid colors must be in the form #RRGGBB or #AARRGGBB (in hex)
# or in the form 'r/g/b/a', where each component is a value in the
# range 0.0-1.0. (Also allowed: 'gray', 'gray/a', 'r/g/b').
#
# 투명도가 없으면 다음 옵션이 유용할 수 있습니다.
#background-color=.2 # 순수한 검정색을 사용하지 않음
force-window-position # X11에서 재생 목록 위치를 변경할 때 창을 중앙에 다시 배치
auto-window-resize=no # 재생 목록 항목을 변경할 때 창 크기 유지
# --- 동작 설정 ---
# 이미지 표시 시간 (초). 'inf'는 무한대를 의미하며, 사용자가 다음 이미지로 넘기기 전까지 계속 표시합니다.
image-display-duration=inf
# 파일 재생 끝난 후 창 유지
keep-open=yes
# 이미지 반복 안함
loop-file=no
# 원본 이미지 비율 유지
keepaspect=yes
# 파일 로드 시 '일시정지' 상태로 시작합니다. 이미지 뷰어에 적합한 설정입니다.
pause=yes
# 재생목록(여러 이미지)을 무한 반복합니다.
loop-playlist=inf
# --- 비디오/이미지 렌더링 설정 ---
# 비디오 보간(interpolation)을 비활성화합니다. 이미지의 픽셀이 뭉개지지 않고 선명하게 보이도록 합니다.
interpolation=no
tscale=box
tscale-antiring=0
# 작은 이미지를 창 크기에 맞게 강제로 확대하거나 하지 않습니다. 원본 크기를 유지/유지 하지 않습니다.
# 일반적으론 "no" 값 추천,or "downscale-big" ~big는 레터박스 생성, 플레이리스트 창사이즈를 고정할 수 있다
# --video-unscaled=<no|yes|downscale-big>
# Disable scaling of the video. If the window is larger than the video, black bars are added. Otherwise, the video is cropped, unless the op‐
# tion is set to downscale-big, in which case the video is fit to window. The video still can be influenced by the other --video-... options.
# This option disables the effect of --panscan.
#
# Note that the scaler algorithm may still be used, even if the video isn't scaled. For example, this can influence chroma conversion. The
# video will also still be scaled in one dimension if the source uses non-square pixels (e.g. anamorphic widescreen DVDs).
#
# This option is disabled if --keepaspect=no is used.
video-unscaled=downscale-big
# Haasn으로 According, PNG 및 JPG의 종횡비 정보는 보편적입니다.
video-aspect-override=no
# --- OSD 및 창 설정 ---
# 화면 컨트롤러(OSD 막대 등)를 비활성화하여 이미지만 깔끔하게 표시합니다.
osc=no
# 창 제목을 미디어 제목(주로 파일명)으로 설정합니다.
#title='${media-title}'
# 창 제목에 파일명과 해상도 표시
title='[Image] ${filename} (${width}x${height})'
# 쓸모없는 라인을 제거한다 V: 00:00:00 / 00:00:00 line
term-status-msg=
# 모든 서브시스템의 로그 출력을 비활성화합니다.즉, 터미널에 아무 메시지도 표시되지 않게 됩니다 — 경고, 정보, 디버그 등 포함.
#msg-level=all=no
#
# 특정 서브시스템의 로그 메시지 레벨을 'fatal'(치명적 오류만 표시)로 제한하는 설정입니다.
#| 항목 | 의미 | 설정 효과 |
#| ---------------------- | -------------------------------------- | ------------------ |
#| `vapoursynth=fatal` | VapourSynth 필터 관련 | 치명적 오류만 표시 |
#| `ffmpeg/video=fatal` | FFmpeg 비디오 디코딩 관련 | 경고/정보 숨김 |
#| `ffmpeg/demuxer=fatal` | FFmpeg 디먹서 (container 해석기) 관련 | 최소 출력 |
#| `osd/libass=fatal` | 자막 렌더링 (libass) 관련 | 디버그/경고 숨김 |
#| `mpv_lastfm=fatal` | Last.fm 관련 Lua 스크립트 메시지 | 대부분의 로그 숨김 |
#
#| 레벨 | 설명 |
#| ------------------ | ------------------------ |
#| `no` | 메시지 출력 안 함 |
#| `fatal` | **치명적인 오류**만 출력 |
#| `error` | 오류 |
#| `warn` | 경고 |
#| `info` | 일반 정보 |
#| `v` 또는 `verbose` | 상세 정보 |
#| `debug` | 디버깅용 로그 |
msg-level=vapoursynth=fatal,ffmpeg/video=fatal,ffmpeg/demuxer=fatal,osd/libass=fatal,mpv_lastfm=fatal
# 유휴 상태(아무 동작 없을 때)에서도 마우스 커서를 숨기지 않습니다. (필요 시 'yes'로 변경)
cursor-autohide=no
# 자막을 비활성화합니다.
sub=no
# 오디오 출력을 비활성화합니다. 이미지 뷰어이므로 소리가 필요 없습니다.
audio=no
# 필터 및 디코딩 설정 초기화
vf-clr # 다른 프로필의 비디오 필터 초기화
af-clr # 다른 프로필의 오디오 필터 초기화
glsl-shaders-clr # 다른 프로필의 세이더 초기화
hwdec=no # 이미지에는 하드웨어 디코딩 불필요
# 렌더링 및 화질 설정
vo=gpu-next,gpu,drm,tct # 비디오 출력 드라이버
profile=gpu-hq # 고화질 렌더링 프로필 사용
scale=ewa_lanczossharp # 확대 시 고품질 스케일러
cscale=ewa_lanczossoft # 색상 공간 변환 시 스케일러 # Vlukan에서 에러난다 "[vo/gpu-next] Failed mapping filter function 'ewa_lanczossoft', no libplacebo analog?", 바꿔 쓰거나 시간이 지나면 해결될 듯
dscale=mitchell # 축소 시 스케일러
dither-depth=auto # 색상 양자화(quantization) 시 발생하는 밴딩(banding) 현상을 줄이기 위해 디더링(dithering) 깊이를 자동으로 설정합니다. 8비트 출력 디스플레이에서 그라데이션이 부드럽게 보이도록 합니다.
correct-downscaling # 다운스케일링 시 디테일 손실을 최소화하도록 보정합니다. 영상/이미지를 축소할 때 모아레(moire) 현상이나 블러를 줄이고 선명도를 유지합니다. CPU/GPU 부하가 다소 늘어날 수 있으나 품질은 확실히 향상됩니다.
sigmoid-upscaling # 업스케일링 시 대비(contrast)를 보존하는 방식으로, 일반적인 스케일링에서 생길 수 있는 경계 왜곡이나 뿌연 느낌을 완화합니다.이미지나 영상 확대 시 품질 유지에 도움됩니다.확대 품질은 좋아지지만, 일부 영상에서 대비가 강해 보일 수 있음.
# UI 설정
osc=no # On-Screen-Controller 비활성화
border=no # 창 테두리 없음
screen=0 # <0|1|2|...> 다중모니터일 경우 구분이 필요하다.
fs-screen=current # <current|all> current: 현재 모니터 풀스크린, all: 전체 모니터 확장 풀스크린
autofit-larger=72%x72% # 창 크기에 맞춰 이미지 크기를 자동으로 조절합니다. (예: 가로/세로 72% 이내로)
geometry= # 창 크기 초기화
# 기본 input.conf에 있는 키바인딩 모두 제거
#input-default-bindings=no
# [가장 중요] # 이미지용 키 바인딩 파일 로드
# 쉘에서 --pofile을 명시해서 실행하면 커스텀 키바인딩이 적용되지만 Auto 프로파일로 호출될때는 커스텀 키바인딩이 자동 호출되지 않는다.
input-conf=~/.config/mpv/input-image.conf
### 애니메이션 GIF/WebP 프로필 (Animated GIF/WebP Profile) ###
[gif-webp]
profile-desc="애니메이션 GIF/WebP 프로필 (Animated GIF/WebP profile)"
profile="image" # image 프로필을 상속한다.
pause=no # start 이하 반대 속성들만 재정의 한다.
loop-file=inf # 단일 파일(주로 GIF 같은 움직이는 이미지)을 무한 반복합니다.
title='[Animation] ${filename} (${width}x${height})'
[jjal]
profile-desc="profile for Image, Animatied-GIF/Webp"
profile=gif-webp
# normal top-level option
#no-config
#no-resume-playback
vo=gpu-next
gpu-api=vulkan
hwdec=vulkan
gpu-context=x11vk
#hwdec=no
#keepaspect
#fullscreen=no
#screen=0
#fs-screen=current
#loop-file=yes # <N|inf|no> yes is equal inf
#geometry=
osd-status-msg='${time-pos}-${=time-pos} / ${duration} (${percent-pos}%) #${estimated-frame-number} framen${osd-ass-cc/0}{1c&H725761&}{b1} ${osd-sym-cc}${osd-ass-cc/0}{1c&H725761&}{b1}t${media-title}nFilename: ${filename}'
### Extension Specific #########################################################
# Ignore aspect ratio information for PNG and JPG, because it's universally bust
[extension.png]
profile=image
[extension.jpg]
profile=image
[extension.jpeg]
profile=image
[extension.swf]
profile=jjal
[extension.gif]
profile=jjal
[extension.webp]
profile=jjal
[extension.vpy]
demuxer-lavf-format=vapoursynth[/code]
- 실행 :
A. $ mpv --profile=image(또는 jjal) ~/Wallpaper
이미지 폴더일 경우 image 또는 jjal, 이미지에 gif/webp 잇을시 jjal,
mpv 윈도우 창이 뜬다.
B. $ mpv --profile=image --profile=kitty ~/Wallpaper
이미지 파일들이 kitty 터미널 창에 나타난다
C. $ mpv --profile=kitty [영상파일]
영상 파일이 kitty 터미널 창에 나타난다.
4. ~/.zshrc : 자주 수정하는 설정파일들과 command는 alias 를 설정/사용한다
[code=bash]# Viewer
alias mw='mpv --profile=jjal --profile=kitty $HOME/Wallpapers/'
alias mpi='mpv --profile=jjal'
alias mpik='mpv --profile=jjal --profile=kitty'
alias tlswkr="fd --print0 'poster' /mnt/Media/신작 | sort -z | xargs -0 mpv --profile=image --profile=kitty "
alias f='feh'
# Config file
alias v='vim'
alias nv='nvim'
alias soz='source ~/.zshrc; source ~/zshrc.d/aliases.zsh'
alias zacfg='vim ~/.zshrc'
alias zcfg='vim ~/zshrc.d/aliases.zsh'
alias xcfg='vim ~/.xmonad/xmonad.hs'
alias mcfg='vim ~/.config/mpv/mpv.conf'
alias micfg='vim ~/.config/mpv/input.conf'
# Gemini
alias gemini='cd ~/gemini; gemini'
# ls, exa
alias lse='ls_extended -s'
alias ls='eza --icons'
alias la='eza -a --icons'
alias l='eza --icons'
alias ll='eza -lah --icons'
alias lt="eza -aT -L1 --color=always --group-directories-first --icons"
alias lt2="eza -aT -L2 --color=always --group-directories-first --icons"
alias lt3="eza -aT -L3 --color=always --group-directories-first --icons"
# music ID3 tag conversion
alias m3='mid3iconv -e cp949 *.mp3;mid3iconv -e cp949 *.flac'
# https://github.com/naelstrof/maim
alias cs='maim -s | xclip -selection clipboard -t image/png'
# This command will allow you to select an area on your screen, then copy the selection to your clipboard. This can be used to easily post images in mumble, discord, gimp-- or any other image supporting application.
alias ccs='maim -s | convert - ( +clone -background black -shadow 80x3+5+5 ) +swap -background none -layers merge +repage shadow.png; mv shadow.png "/home/nietz/Pictures/Screenshots/$(echo $(date --rfc-3339=ns) | sed -e 's/:/_/g')-shadow.png"'
alias css='maim -st 9999999 | convert - ( +clone -background black -shadow 80x3+5+5 ) +swap -background none -layers merge +repage shadow.png; mv shadow.png "/home/nietz/Pictures/Screenshots/$(date --rfc-3339=second)-shadow.png"'
# This messy command forces a user to select a window to screenshot, then applies a shadow effect using imagemagick, then saves it to shadow.png. It looks really nice on windows that support an alpha channel.
# youutbe-viewer
alias yyi="youtube-viewer --video-player=mpv --append-arg='bestvideo[height<=?1080][fps<=?60][vcodec=av01.0.09M.08]'"
alias pvi="pipe-viewer --yt-dlp --ytdl-cmd="yt-dlp" --resolution=1080p --prefer-av1 --hfr"
# Bandizip
alias bandzip='wine ~/.wine/drive_c/Program Files/Bandizip/Bandizip64.exe'
# Yazi
function y() {
local tmp="$(mktemp -t "yazi-cwd.XXXXXX")" cwd
yazi "$@" --cwd-file="$tmp"
if cwd="$(command cat -- "$tmp")" && [ -n "$cwd" ] && [ "$cwd" != "$PWD" ]; then
builtin cd -- "$cwd"
fi
rm -f -- "$tmp"
}
# youtubd-dl audio with search
function mm() { mpv --ytdl-format=bestaudio ytdl://ytsearch:"$@" }
# youtubd-dl video with search and play
function mmm() {
mpv --ytdl-format="bestvideo[ext=mp4][vcodec^=avc]+bestaudio[ext=m4a]/bestvideo[ext=mp4]+bestaudio[ext=m4a]/bestvideo+bestaudio/best[ext=mp4]/best" ytdl://ytsearch:"$@"
}
# VPN
alias nc="nordvpn connect Japan"
alias ncu="nordvpn connect United_States"
alias nd="nordvpn disconnect"
# Play Dmm Trailer
function p() {
local trailer_url=""
content_id_prefix=$(echo ${1} | tr '[a-z]' '[A-Z]' | cut -d "-" -f1)
content_id_suffix=$(echo ${1} | cut -d "-" -f2)
content_id_cap="${content_id_prefix}-${content_id_suffix}"
trailer_url=$(psql -h localhost -p 5432 -U postgres -d r18dev -c "select url from source_dmm_trailer where content_id = '$(psql -h localhost -p 5432 -U postgres -d r18dev -c "select content_id from derived_video where dvd_id = '${content_id_cap}';" | tail -n3 | head -n1 | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//' -e 's/[[:space:]]//g')'; " | head -n3 | tail -n1 | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//' -e 's/[[:space:]]//g')
if [[ ( ${trailer_url} == "(0 rows)" || ${trailer_url} == "(0rows)" || ${trailer_url} == "" ) ]]; then
trailer_url=$(psql -h localhost -p 5432 -U postgres -d r18dev -c "select url from source_dmm_trailer where content_id = '$(psql -h localhost -p 5432 -U postgres -d r18dev -c "select content_id from derived_video where dvd_id = '${content_id_cap}';" | tail -n3 | head -n1 | sed -E 's/([0-9]{3}$)/001/'| sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//' -e 's/[[:space:]]//g')'; " | head -n3 | tail -n1 | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//' -e 's/[[:space:]]//g')
if [[ ( ${trailer_url} == "(0 rows)" || ${trailer_url} == "(0rows)" || ${trailer_url} == "" ) ]]; then
trailer_url=""
else
:
fi
else
:
if [[ $(pgrep mpv | wc -l) -ge 1 ]]; then mpv ${trailer_url} --x11-name=jav_sidefloat --profile=side_float;
else
mpv ${trailer_url}
fi
fi
}
# Fanart image Cutting
function frcut () { [[ !$# -eq 0 ]] && convert ${1} -quality 90 -gravity East -crop 47.25%x100+0+0 `echo ${1} | sed -e 's/fanart/poster/'` || return; }
# RealEsrGan Upscale
function esrd () { [[ !$# -eq 0 ]] && realesrgan-ncnn-vulkan -i "${1}" -o "${1}" -n RealESRGAN_x4plus -s 4 -x -g auto && convert -quality 90 -resize x1080 "${1}" "${1}" || return; }[/code]
5. 터미널 헤더 로고/정보
~/.zshrc (or ~/.bashrc) 파일 젤 아랫 부분에 fastfetch 커맨드 또는 아래 스크립트 파일 이름을 한 줄 넣어 준다.
~/.local/bin//terminal_header.sh : kitty, urxvt, tty 터미널 구분용
[code=bash]#!/bin/zsh
kitty_image_dir="/mnt/Media/신작/드라마"
kitty_search_keyword=".*-poster"
kitty_height=40
other_search_keyword=".*poster.jpg"
other_image_dir="/mnt/Media/신작/어른영화"
other_height=35
[[ ! -d ${kitty_image_dir} || ! -d ${other_image_dir} ]] && exit;
kitty_logo=$(fd "${kitty_search_keyword}" -t f ${kitty_image_dir} | shuf -n 1)
other_logo=$(fd "${other_search_keyword}" -t f ${other_image_dir} | shuf -n 1)
[[ ${kitty_logo} == "" && ${other_logo} == "" ]] && exit;
if [[ $TERM == "xterm-kitty" || $TERM == "kitty" ]] ;then
[[ ${kitty_logo} == "" ]] || { clear; fastfetch --logo ${kitty_logo} --logo-type kitty-icat --logo-width ${kitty_height} -c ~/.config/fastfetch/10.jsonc; }
else
[[ ${other_logo} == "" ]] || { clear; fastfetch --logo ${other_logo} --logo-type auto --logo-width ${other_height} --logo-preserve-aspect-ratio -c ~/.config/fastfetch/11.jsonc; }
fi
print -Pn "e]0;%~a"[/code]
긴 글 읽어 주시어 감사합니다. 누군가에게는 도움이 되시길...
댓글 (7)
-
신신사아님당
25.07.31 · 125.♡.243.26
-
JJUQ123
→ 신사아님당 작성자
25.08.03 · 146.♡.205.174
생 처음부터 참 무서운 일입니다.
"그랬던니 1번워스크페이스의 왼쪽 영역에 창을 열고 2번 워크스페이스로 가면 거기 오른쪽 영역에 1번스페이스에서 열었던 창이 보이는.. 그런 증상을 해결하지 못해서 결국 포기했습니다. 싹 지우고 원복시켰죠."
워크 스페이스 쪼개면 인접 워크스페이스가 쪼개진 영역에 나타나는데. 윗 말은 사실 무슨 말인지 이해를 못하고 있어요 ㅠ.ㅠ. 저는 일단 수동으로 쪼개고, 각가각 조절 해요.
fcitx4 만 썼었는데.. 무슨 바림이 들어서 fcitx5 를 설치햇다가. 맘에 안들어서,, fctix5 를 지우고 다시 fcitx4 로 원복햇는데요
한칸 띠워쓰기 (반각 공백 문자 문제가 발생햇네요) 복구를 못하고 있어요. 이런 현상은 리눅스 사용하면서 또 처음 격어 봅니다. 아 한글과 폰트는 여전히 어렵다. 10년 전에도 잘되는 것이 5년 전에도 잘되던 것이. 업데이트 하면 더 이상해 지는 경우가 ㅎㅎㅎ. 이번 반각 공백과, xmobar 한글 폰트 크기 안티애리어스 다 깨지는 건 이해가 안되네요.오래전 cabal 컴파일 인스톨, xft 폰트 수동 설정할 때는 다 잘 됫었는데 말이죠. 흠..시간이 지낫느데 왜 더 안 좋아 졋을가요? ㅠ.ㅠ -
신신사아님당
→ JUQ123
25.08.03 · 125.♡.243.26
https://www.youtube.com/watch?v=m_7BLra7_2E
이런 증상이 있었습니다. 그래서 화면 나누기는 포기하고 원복시켰는데, 얼마전에 외부 모니터를 연결한 상태에서 비슷한 증상을 겪게 되서 챗GPT한테 물어보고 시도해볼만한 자료는 얻은 상태입니다.
https://chatgpt.com/share/688e4da1-5554-8002-9756-8946ef06eb6b
요건데요, 먼저 해야 할 일들 처리하고 좀 쉬었다가 다시 시도해볼 생각입니다. :)
그러고 보니 공백이 전각문자인 것 같네요? @_@;;; xmobar는 또... 아이고;; 무슨 일이 있으셨나요. ㄷㄷㄷ -
JJUQ123
→ 신사아님당 작성자
25.08.04 · 193.♡.16.110
일단 제가 영상을 제대로 이해 한 것인지 아니지 확신 할 수 없습니다만..
혹시 obs 를 스크래치패드 단축킼롤 사용하시는 건가요?
1~9번 워크스페이스, 그리고 9번 웤크 스페이스 다음 워크스페이스가 nsp 워크스페이스 입니다.
9번에서 스크래치패드로 obs를 띠우고 한번 더 토글하면,obs가 nsp 워크스페이스로 보내집니다.
3번 워크에서 obs를 다시 토글하면, nsp에 있던 obs 스크래치패드가 3번 워크로 호출 되는 방식이구요.
nsp 토글 앱을 사용 할대, 보통 nsp 워크를 unvisible 하는 설정과 단축키가 nsp 워크를 무시하도록 처리하는 루틴을 추가해서 사용해주어야 합니다.
저는 아래 단축키 세팅을 사용하는데요. 보통은 llayoutScreen 보다는 layoutSplitScreen 주로 사용하는 편입니다ㅏ
-- NamedScratchPad Pass
notSP :: X (WindowSpace -> Bool)
notSP = return $ ("NSP" /=) . W.tag
nextWS' :: X ()
nextWS' = moveTo Next (WSIs notSP)
prevWS' :: X ()
prevWS' = moveTo Prev (WSIs notSP)
-- 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.3 0.7 )) -- 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_a), layoutSplitScreen 2 (TwoPane 0.75 0.25) <+> nextScreen <+> nextWS') -- divide single screen to 2 screen
, (((modMask x .|. controlMask .|. shiftMask), xK_a), layoutSplitScreen 2 (TwoPane 0.75 0.25)) -- divide single screen to 2 screen
, (((modMask x .|. controlMask .|. shiftMask), xK_r), layoutScreens 2 (TwoPane 0.25 0.75))
-- Physical Screen control
--, (((modMask x .|. controlMask ), xK_a), onPrevNeighbour W.view )
--, (((modMask x .|. controlMask ), xK_s), onNextNeighbour W.view )
--, (((modMask x .|. controlMask .|. shiftMask), xK_a), onPrevNeighbour W.shift)
--, (((modMask x .|. controlMask .|. shiftMask), xK_s), onNextNeighbour W.shift)
-- Return Default Layout
, (((modMask x .|. controlMask .|. shiftMask), xK_space), rescreen)
제가 상황을 잘못 이해 한 것이면, 위 댓글을 모두 무시해도 좋을 듯 합니다. -
신신사아님당
→ JUQ123
25.08.05 · 125.♡.243.26
전에 워스스페이스 분리 시도할 때는 "심플 미니멀 XMonad 스크린샷" 글에 있는 설정을 참고했었는데요, (지금도 탭으로 열어놓은 상태입니다. ) 다시 시도할 때는 이번에 달아주신 댓글을 좀 갖다 쓰겠습니다. ㅎㅎㅎ 스크래치패드도 지금까지 없었는데 이번 기회에... {emo:onion-016.gif:50}
모니터를 추가했더니 워스스페이스 분리했을 때처럼 다른 워크스페이스에 이미 연 창의 일부가 미러링 되서 나오는 이상 증상이 보여서, 이번 기회에 그동안 제미나이가 해준 설정에 대해서 이해도 좀 하고 모니터 설정도 제대로 좀 해보려구요.
밀린 일이 있어서 바로 손을 대지는 못하고 있는데, 중간 중간 GPT에게 궁금한게 생기면 물어도 보고... 반의 반보씩 앞으로 나가고 있습니다.(?)
:: 가 타입 정의 할 때 쓰는 기호고, nextWS' :: X()라고 하면 X서버를 제어하는 명령 같은건데 반환값은 없나보다... 정도는 생각할 수 있게 되었습니다. ㅋㅋㅋㅋㅋ {emo:onion-051.gif:50}
+
layoutScreen 과 layoutSplitScreen 뒤에 나오는 숫자가 설정 1, 설정 2 같은게 아니라 실제 몇개로 나눴는지에 대한 값이었군요!? 완전 잘못 알고있었네요. ==;;
+
챗GPT한테 물어가며 배워가는 중입니다. 오늘은 이런 내용으로...
https://chatgpt.com/share/6890dbeb-3ec0-8002-ab9f-460e520dedf5 -
JJUQ123
→ 신사아님당 작성자
25.08.07 · 138.♡.22.138
아.. 제가 잘못 이해햇엇군요ㅗ..민망하네요
멀티 모니터일때.워크 미러 나오는 경우 간속 봣는데ㅔ.
싱글 모니터에서. 워크 확장서. 미러 워크 나오는 건 상상도 못햇네요.
챗 gpt 내용 쭈욱 읽어 봣습니다. 역시 교과서네요.. 설명이 ㄷ ㄷ ㄷ
과거 xorg.conf > xrnadr > xmonad > xcinerama > layoutsplitScreen 순으로 1개월 공부햇엇던게 10분이면 끝나는군요..AI 교과서 파워 드드드
저는 아래 xrandr 단축 커맨드를 사용하고 잇어요.
-- Mornitor on/off
, (((modMask x .|. controlMask .|. shiftMask), xK_Scroll_Lock), submap . M.fromList $
[
((0, xK_a), spawn "xrandr --auto --output HDMI-0 --primary --mode 1920x1080 --left-of DP-5") -- dual mornitor on
, ((0, xK_l), spawn "xrandr --output HDMI-0 --off" ) -- left mornitor off
, ((0, xK_r), spawn "xrandr --output DP-5 --off" ) -- rifht moritor off
, ((0, xK_o), spawn "xset dpms force suspend" ) -- all monitro off
, ((0, xK_0), spawn "betterlockscreen -l dim" ) -- screen lock
])
근데 AI 가 틀린 답변도 하는 거 같아요.
"1920x1080 스크린이 독립적으로 두개가 사용되던 중에, 그러니까 xrandr로 보면 1920x1080의 독립된 디스플레이 2개가 설정된 상태인데, layoutScreens 1 (fixedLayout [Rectangle 0 0 3840 1080]) 설정을 사용하면 두 화면을 한 화면처럼 사용할 수 있게 되는 거야?"
---> 2모니터를 한 화면 처럼 쓸 수 있습니다.
오래전에 처음에는 Xorg.conf 에서 멀티 모니터 구성하고, 멑티 확장 뷰를 구성햇는데. 이게 상황에 따라 수정/재부팅 해야 해서.
X를 키고 끌 필요 없이, 실시간으로 확장/분활이 가능한 XMonad 스크린 확장/분할 모듈 기능 때문에 xmonad로 넘어 왓거던요.
xrandr 로 모니터 2개 잡혀 있고,아래 처럼 하나의 스크린으로 사용하고. 여기서 다시 스크린 무한 분할 할 수 있습니다.
[https://damoang.net/data/editor/2508/comment_2328303242_DTsxfbZy_7774555eda7ea87fa14621eeacf3bf44a1d1b0d1.webp]
ChatGPT의 말:
아주 정확한 포인트를 짚었어요. 이걸 정리하면 다음과 같이 설명할 수 있습니다:
❓질문 요약
xrandr로 보면 1920x1080 해상도의 독립된 디스플레이 2개가 사용 중인데,
layoutScreens 1 (fixedLayout [Rectangle 0 0 3840 1080])을 사용하면
➤ 두 화면을 하나의 화면처럼 쓸 수 있나?
🧩 정답
❌ 아니요. -----> 네 그렇습니다.
layoutScreens 1 (fixedLayout [...])은 XMonad가 인식한 단일 스크린에만 적용됩니다.
만약 xrandr로 두 개의 **독립된 물리 스크린(예: eDP-1, HDMI-1)**이 설정되어 있다면,
각각은 XMonad 내부적으로 Screen 0, Screen 1 등으로 분리됩니다.
그 상태에서 layoutScreens 1을 써봤자, 오직 하나의 스크린(예: Screen 0)에만 적용되며,
다른 스크린(Screen 1)은 전혀 영향을 받지 않습니다. -
신신사아님당
→ 신사아님당
25.08.07 · 125.♡.243.26
@JUQ123님에게 답글
chatgpt에서 추가했던 모니터 제거하면 어떻게 되냐고 질문한걸 보셨군요. {emo:onion-002.gif:50}
듀얼모니터 설정할 때 참고하겠습니다. 감사합니다. :>
[mod + ctrl + shift + ScrollLock] → 진입
├─ [a] : 듀얼 모니터 ON (HDMI-0 왼쪽, 주 화면)
├─ [l] : 왼쪽 모니터 OFF (HDMI-0)
├─ [r] : 오른쪽 모니터 OFF (DP-5)
├─ [o] : 전체 화면 OFF (절전)
└─ [0] : 화면 잠금 + 어둡게
저는 모니터 연결 상태가 변했을 때 문제가 생기는걸 막연하게 걱정했는데, 능동적으로 설정하는 방식이 있었군요.
+
개별로 켜는 명령은 왜 없을까.. 하고 잠깐 생각했었는데 굳이 필요가 없겠군요. 켤 땐 다 켜고 끌 때만 일부, 전체 끄기를 선택하면 되나까.. 단축 명령 개수도 2개가 줄고.. 정말 괜찮네요.
+
서브맵 이거 잘 쓰면 참 좋겠다 싶습니다.
+
LayoutScreen도 있고 LayoutScreens도 있었군요. {emo:onion-045.gif:50}
https://chatgpt.com/share/68937b6c-2278-8002-99ef-441ea45116c5
+ 독립된 두개의 FHD모니터를 3840x1080 한 화면으로 설정하신거군요. xorg로 설정하신 것도 아니구요. 마음의 짐이 덜어진 것 같습니다.(?) . 다음번엔 기존 설정 백업해 놓고 화면 분할 하는 것만 테스트를 해봐야겠습니다. :I
댓글을 작성하려면 이 필요합니다.
+
얼마 전에 LayoutScreen과 layoutSplitScreen 모듈을 사용해서 화면을 나눠 봤습니다.
그랬던니 1번워스크페이스의 왼쪽 영역에 창을 열고 2번 워크스페이스로 가면 거기 오른쪽 영역에 1번스페이스에서 열었던 창이 보이는.. 그런 증상을 해결하지 못해서 결국 포기했습니다. 싹 지우고 원복시켰죠.
그러다가 어제 오랜만에 외부 모니터를 연결더니 증상이 재혔됐습니다. 메인 모니터 1번 공간에서 창을 열었더니 서브 모니터 2번 공간에 동일 창이 보이는 거죠. 정확히는 1번 갔다가 다른데 가면 2가 아니고 3, 4 어디를 가도 메인 모니터 1번 공간에서 열었던 창이 서브 모니터에 나타나는 거죠.
... 시간이 좀 지나 에너지가 보충이 되면 원인을 찾아볼까 하고 있습니다. 지쳐쓰요~ /_\;
+
LayoutScreen과 layoutSplitScreen 설정의 문제는 아니었다는 점은 다행인 것 같슴다. 핫핫