[첫화면으로]Tmux

마지막으로 [b]

tmux

ScreenUtility보다 좋다고 들어서... 일단 한 화면 내에서 다시 창을 분할할 수 있다니 솔깃하다. (screen의 경우는 공식 버전에는 없고 패치만 있다는 듯) 그러나 역시 터미널 프로그램들은 사용법 처음 읽히려면 으으...

1. 설치 시 문제
2. 튜토리알
2.1. 기본 사용법
2.2. 참조한 문서들
3. .tmux.conf 설정
4. 좌충우돌 사용기
4.1. 256컬러
4.2. vim solarized 테마
4.3. vim용 신택스 파일과 예제 conf 파일들
4.4. 윈도우 이름 자동 변경
4.5. 서로 다른 세션 만들기, 세션 이름 붙이기
4.6. 한 유저계정에서 서로 다른 설정을 따르는 tmux 세션 만들기
4.7. 플러그인
4.8. 시스템 재부팅할 때 세션 복원
4.9. pane분할 또는 새 창에서 작업 디렉토리 유지
4.10. 윈도우를 다른 세션으로 넘기거나 링크하기
5. 기타
5.1. 세션이 있는데도 attach 가 안 될 때
5.2. 인덱스 10 이상의 윈도우로 한 번에 점프하기
6. Comments

1. 설치 시 문제

컴파일 도중에 특정 상수의 정의를 못 찾는다고 에러가 나더라.
control.c:103: error: ‘EVBUFFER_EOL_LF’ undeclared (first use in this function)

이건 의존성이 걸려 있는 libevent 의 버전이 낮아서 생긴 문제. yum 으로 설치한 게 1.4.13 이었는데 [이 글]을 보니 1.4.14나 2.0이 필요하다고 함. 그래서 libevent 를 따로 다운받아 컴파일,설치하여야 했음.

게다가 기존 1.4.13을 지우지 않았더만 링킹 과정에서 그게 먼저 적용되었는지 다음과 같은 형태의 에러가 줄줄이 났고
undefined reference to `bufferevent_write'

1.4.13을 지우고 나서 시도하니 컴파일이 거의 다 잘 되었는데 막판에
undefined reference to `__b64_ntop'
이 에러가 났는데, [이 글]을 참고해서 MakefileLIBS 변수의 값에다가 -lresolv를 넣어주니 해결되었음.

2. 튜토리알

2.1. 기본 사용법

screen과 비슷하게, tmux를 실행하면 하나의 session이 되고, session 안에서 여러 개의 window를 생성할 수 있고, 각 window를 또 여러 pane으로 분할해서 사용할 수 있다.

prefix에 해당하는 키는 C-b인데, 이건 vi의 스크롤과 충동하기도 하고 누르기도 불편하여 screen과 같이 C-a로 설정함

시작과 종료

도움말

윈도우

pane

카피 모드

2.2. 참조한 문서들

기초 사용법을 읽어볼 만한 것들을 뒤져봐서 찾은 것들. 이 페이지의 내용 중 많은 부분은 아래 글들의 내용을 주인장이 테스트하며 적었음.

3. .tmux.conf 설정

# reload conf
# prefix r 을 누르면 .tmux.conf 를 읽어서 적용
bind r source-file ~/.tmux.conf \; display "Reloaded!"

# Ctrl+a 를 prefix 로
set -g prefix C-a
unbind C-b
bind C-a send-prefix

# visual bell
set-option -g visual-bell on

# pane 분할을 | 와 - 로
# 현재 pane의 cwd를 이어받도록 함
bind | split-window -h -c "#{pane_current_path}"
bind \ split-window -h -c "#{pane_current_path}"
bind - split-window -v -c "#{pane_current_path}"
# 새 window 생성 때도 현재 cwd를 사용
bind c new-window -c "#{pane_current_path}"

# 직전에 사용하던 윈도우 이동
bind a last-window

# C-o, o 둘 다 pane이동으로. rotate는 안 쓰니까 C-p로 이동
bind C-p rotate-window
bind C-o select-pane -t :.+

# monitor activity and silence
set-window-option -g monitor-activity on
# set-option -g visual-activity on
set-window-option -g monitor-silence 0
bind S   set-window-option monitor-silence 30
bind M-s set-window-option monitor-silence 0

# window 번호를 0이 아니라 1부터
set-option -g base-index 1
# pane 번호를 0이 아니라 1부터
set-window-option -g pane-base-index 1

# window swap
bind-key -n C-S-Left swap-window -t -1
bind-key -n C-S-Right swap-window -t +1

# 상태바 설정
# default statusbar colors
set-option -g status-bg blue
set-option -g status-fg white
set-option -g status-attr default
# default window title colors
set-window-option -g window-status-fg white
set-window-option -g window-status-bg default
set-window-option -g window-status-attr dim
# active window title colors
set-window-option -g window-status-current-fg white
set-window-option -g window-status-current-bg red
set-window-option -g window-status-current-attr bold

# pane border
set-option -g pane-border-fg colour235 #base02
set-option -g pane-active-border-fg colour240 #base0f
# message text
set-option -g message-bg colour235 #base02
set-option -g message-fg colour166 #orange
# pane number display
set-option -g display-panes-active-colour colour33 #blue
set-option -g display-panes-colour colour166 #orange
# clock
set-window-option -g clock-mode-colour colour64 #green

# mouse는 일단 끔
setw -g mode-mouse off
set -g mouse-select-pane off
set -g mouse-resize-pane off
set -g mouse-select-window off

# 윈도우를 닫으면, 남은 윈도우들의 번호를 다시 0부터 순차적으로 재정리
set-option -g renumber-windows on

# List of plugins
# Supports `github_username/repo` or full git repo URLs
set -g @tpm_plugins '              \
  tmux-plugins/tpm                 \
  tmux-plugins/tmux-resurrect   \
'
# Other examples:
# github_username/plugin_name    \
# git@github.com/user/plugin     \
# git@bitbucket.com/user/plugin  \

# Initializes TMUX plugin manager.
# Keep this line at the very bottom of tmux.conf.
# prefix+I - install new plugin and refresh
# prefix+U - update plugin(s)
run-shell '~/.tmux/plugins/tpm/tpm'

Upload:tmux05.png

4. 좌충우돌 사용기

4.1. 256컬러

실행할 때 tmux -2라고 해야 256컬러 지원이 됨

Upload:tmux01.png
(그냥 실행했을 때)

Upload:tmux02.png
(-2 옵션을 주었을 때)

4.2. vim solarized 테마

이 놈의 컬러테마 하나 맘에 든다고 골랐다가 두고두고 귀찮게 군다.

[PuTTY][vim]에 solarized 컬러 테마가 적용된 상태에서, tmux를 띄우고 vim을 실행하면 이게 또 색상이 요상하게 나온다. 눈치로 보면 색상 가짓수가 몇 개 안 되어 그런 듯하다. -2 옵션을 주어도 마찬가지.

Upload:tmux03.png
(색상이 제대로 적용되지 않은 모습)

[vim-colors-solarized breaks inside tmux]의 마지막 답변글을 보아하니, tmux를 실행하는 시점의 TERM변수의 값이 xterm이었는데 이 상태에서는 8컬러까지만 지원하는 걸로 tmux가 인식하나보다. TERM변수의 값을 xterm-16color로 설정하고 실행하니까 제대로 되었다. (오히려 -2 옵션이 없어도 되더라)

나는 아예 alias를 써서 tmux를 실행하면 TERM=xterm-16color tmux -2를 실행하도록 하였음.

Upload:tmux04.png
(제대로 적용된 모습)

4.3. vim용 신택스 파일과 예제 conf 파일들

tmux 소스 파일의 압축을 풀면 examples 디렉토리 안에 몇 가지 샘플 파일들이 있다. *.conf 파일들은 설정파일 예제들인데, tmux -f 파일명으로 해당 파일을 로드해서 실행할 수 있으나, 이 설정 파일의 내용을 보면 자기 멋대로 여러 개의 창을 만들고 어떤 창에서는 mutt를 실행하는 등의 동작을 하도록 되어 있으니 주의.

그리고 설정 파일을 VimEditor로 편집할 때 신택스 하일라이트를 적용할 수 있다. tmux.vim 파일의 주석에 적힌 설명 참조.

4.4. 윈도우 이름 자동 변경

tmux를 실행하면 기본적으로 각 윈도우의 이름은 현재 포어그라운드에서 실행 중인 프로세스의 이름이 반영된다. 그런데 prefix , 또는 :rename-window로 이름을 지정하면 그 이름으로 고정되어 버리는데, 이걸 다시 원래대로 자동으로 프로세스 이름이 반영되게 하고 싶으면 다음처럼 automatic-rename 옵션을 켜주면 됨. (이 옵션이 원래 켜져 있다가 이름을 수동으로 바꾸면 저절로 꺼지는 식이다)

:set-window-option automatic-rename on

4.5. 서로 다른 세션 만들기, 세션 이름 붙이기

한 세션에 윈도우 십 수개씩 띄워놓으니 이것도 정신 사납다. 세션을 여러 개 만들어서 각각 서버 프로그램 띄워두는 용도, 자잘한 작업하는 용도 등으로 구분하자.

위에 기본 사용법에도 적었지만, 세션을 만들 때 이름을 따로 주고

tmux new -s SERVICE

나중에 원하는 세션에 붙어서 작업

tmux attach -t SERVICE

세션 이름을 처음에 짓지 않았다면 나중에 prefix : 명령 모드 들어가서 rename-session

4.6. 한 유저계정에서 서로 다른 설정을 따르는 tmux 세션 만들기

예를 들어 어떤 서버에 web 이라는 계정이 있고, 여러 사람이 각자 그 계정으로 접속해서 작업하는데, 각자 자신이 선호하는 설정의 tmux 세션을 띄우고 싶다고 하자. 그런데 하나의 계정이기 때문에, 기본 상태에서는 제일 처음 tmux를 실행한 사람의 설정을 그대로 따라가서 두번째 사람부터는 -f 옵션을 써도 안 통한다. reload하면 다른 사람들까지 전부 바뀌어버린다.

이런 경우는 -L socket-name 옵션을 써서 별개의 tmux 서버를 띄워 자신만의 독립적인 환경을 만들 수 있다.

tmux -L mysocket -f myconfig_file new-session : 새 세션 만드는 경우

위 세션에 붙어 작업하고 싶다면 마찬가지로 -L 옵션을 쓴다.

tmux -L mysocket attach

4.7. 플러그인

잘은 모르겠는데 1.9 부터는 외부 플러그인을 가져와서 더 편한 기능을 덧붙여 쓸 수 있나보다. 게다가 그 플러그인들을 관리하는 툴도 또 따로 나왔다.

다른 플러그인은 모르겠고, 나중에 시스템 재부팅 등을 했을 때 tmux 세션과 윈도우 구성을 되살려주는 플러그인이 있더라.

4.8. 시스템 재부팅할 때 세션 복원

바로 위에서 말했듯이, 이런 플러그인이 있더라. 간단히 써보면 일단 윈도 구성까지는 잘 살려주는데, 실행 중이던 프로그램까지 복원해주는 건 다시 좀 복잡하게 설정해야 하는 것 같음

4.9. pane분할 또는 새 창에서 작업 디렉토리 유지

처음 tmux를 실행하고 인상적이었던 건 새 윈도우를 열 때나 pane을 가로, 세로로 분할했을 때, screen은 처음에 screen을 실행한 디렉토리에서 셸이 뜨지만 tmux는 현재 작업하던 디렉토리가 유지되는 것이었다.

그런데 1.9a를 설치하니까 그게 적용이 되지 않아서 살펴보니, 예전에는 default-path 설정이 있어서 그 값이 있다면 그 값을 새 창의 작업 디렉토리로 지정하고, 그 값이 없으면 현재 작업 디렉토리를 그대로 사용하게 했었나봄. 이제는 pane 분할 또는 새 창 생성 시에 -c path 옵션이 있고, #{pane_current_path}와 같은 미리 정의된 변수가 몇 가지 있어서 그것을 경로명 자리에 대신 줄 수도 있다.

.conf 파일에 이걸 넣어서 기존과 같이 동작하도록 함.

4.10. 윈도우를 다른 세션으로 넘기거나 링크하기

이쪽 세션에서 작업하던 윈도우를 다른 세션으로 넘기고 싶으면

move-window -s chat:irc -t other_session (세션:창 순으로 ID나 이름)

다른 세션에서 링크를 걸어 두 세션 모두에서 쓸 수 있게 하려면

link-window -s ... -t ...

5. 기타

5.1. 세션이 있는데도 attach 가 안 될 때

어느날 갑자기, ps 로 살펴보면 tmux 프로세스가 여전히 떠 있는데도 attach 를 시도하면 "no sessions"라고만 나오더라.

여기 답글에 있는 것처럼 killall -10 tmux 후 재시도하니 성공

5.2. 인덱스 10 이상의 윈도우로 한 번에 점프하기

prefix 0~9로 이동하는 것은 인덱스 10 이상의 윈도우에는 쓸 수 없다.

6. Comments

마우스 선택은 putty의 경우 시프트 누르면서 하면 되는 옵션이 있는데…
-- 라슈펠 2014-10-14 8:22 pm
이름:  
Homepage:
내용:
 

컴퓨터분류

마지막 편집일: 2016-1-2 3:47 am (변경사항 [d])
7944 hits | Permalink | 변경내역 보기 [h] | 페이지 소스 보기