GNU Screen Utility
가장 큰 장점은
- 작업하다 접속이 끊어져도, 수행 중이던 작업은 여전히 살아 있다. 다시 접속해서 그 스크린에 attach하면 됨. 그러고보면 전화선으로 접속하던 시절에 이걸 잘 익혀뒀으면 정말 좋았을텐데.
- 여러 사람이 한 세션을 공유해서 볼 수 있다. 공동 작업을 할 때 유용하게 사용할 수 있다. 터미널계의 원격 데스크탑이랄까.
1. 기본 튜토리알
[GNU Screen: an introduction and beginner's tutorial || kuro5hin.org]의 내용과, 이 링크글 리플 및 구글링해서 찾은 다른 내용 정리
screen
을 실행시키면 그것은 하나의 session이 된다. 한 session 내에서 여러 개의 window를 생성하여 윈도우를 오가며 작업할 수 있다.
- C-a c : 윈도우 생성
- C-a C-a : 직전 윈도우로 이동
- C-a n , C-a p : 다음 윈도우, 이전 윈도우로 이동
- C-a " : 윈도우 리스트를 띄우고 이동할 윈도우 선택 가능
- C-a w : 하단에 윈도우 리스트를 잠시 보여줌
- C-a A : 현재 윈도우에 이름을 붙여줌. 리스트에서 알아보기 쉬워진다.
터미널을 종료하더라도 세션은 유지된다. 명시적으로 세션을 detach했다가 나중에 다시 attach할 수 있다.
- C-a d : 세션 detach
- screen -r : 세션 reattach
screen 내에서는 터미널의 스크롤 기능(PuTTY의 경우 Shift-PageUp/PageDown)을 쓸 수 없다.(수정 : 쓸 수 있음. 터미널의 스크롤기능 이용 참고) "copy mode"로 들어가서 과거 출력을 스크롤하고, 내용 일부를 복사, 붙여넣기 등을 할 수 있다.
- C-a [ : 카피 모드 진입
- 카피 모드 내의 이동:
h - Move the cursor left by one character
j - Move the cursor down by one line
k - Move the cursor up by one line
l - Move the cursor right by one character
0 - Move to the beginning of the current line
$ - Move to the end of the current line.
G - Moves to the specified line
(defaults to the end of the buffer).
C-u - Scrolls a half page up.
C-b - Scrolls a full page up.
C-d - Scrolls a half page down.
C-f - Scrolls the full page down.
/ - Search forward
? - Search backward
space - 복사를 내용의 시작 지점과 끝 지점 마크
- 카피 모드 종료는 ESC
- C-a ] : 붙여 넣기
다른 윈도우에서 컴파일을 할 경우 컴파일이 끝날 때 알려주고, 반대로 IRC를 띄워놨는데 누가 말을 걸면 알려주는 식의 모니터링
- C-a _ : 해당 윈도우가 30초 동안 조용할 경우 알려줌. 토글
- C-a M : 해당 윈도우에서 어떤 활동이 있을 경우 알려줌. 토글
그 외:
- 현재 윈도우를 닫으려면 윈도우에서 실행하던 마지막 프로그램(특히 쉘)을 종료하면 되고
- C-a K : 현재 윈도우 kill
- C-a :kill : 위와 동. 묻지도 않음
- C-a \ : 모든 윈도우 kill (주의!)
- C-a :quit : 위와 동. 묻지도 않음
관련 옵션들:
defscrollback 5000
hardstatus lastline
hardstatus string "%{.bW}%-w%{.rW}%n %t%{-}%+w %=%{..G} %H %{..Y} %m/%d %C%a "
caption always "%3n %t%? @%u%?%? [%h]%?%=%C%a"
defmonitor on
defsilence on
bindkey "^[^[[5~" eval "copy" "stuff ^u"
bindkey -m "^[^[[5~" stuff ^u
bindkey -m "^[^[[6~" stuff ^d
bindkey "^[[D" prev
bindkey "^[[C" next
bindkey "^[^[OD" prev
bindkey "^[^[OC" next
키바인딩을 할 때 'alt+왼쪽커서키' 이런 식의 특수키를 어떻게 적어줘야 할 지 몰랐는데, (특히 alt+커서키 조합은 구글링해서 나오는 글들마다 답이 달랐고, 내게는 효과가 없었다)
$ tput smkx; cat; tput rmkx
위 명령을 내린 후 키를 입력해서 화면에 출력되는 것을 옮겨 적으면 되는 듯.
2. 둘 이상의 터미널에서 하나의 세션을 공유하여 보기
두 사람이 하나의 계정으로 로긴했다면
- 한 명이 자신의 쉘에서 screen 을 실행한다
- 다른 사람이 자신의 쉘에서 screen -x 를 실행하면 두 사람의 터미널이 동기화되어 작업을 할 수 있다.
- 공동작업을 마친 후에는
- exit 명령을 할 경우는 screen 프로세스가 종료된다. (다시 attach 할 수 없으니 주의)
- C-a C-d 를 하여 detach 할 수 있다. (다시 attach 가능)
이것은, 혼자서 여러 터미널을 오가면서 작업해야 할 때도 유용하다. 예를 들어 몇 시간씩 걸리는 배치 작업 (FTP 로 화일 받기라던가, 웹 긁어오기 라던가..) 을 할 때 다음과 같은 시나리오가 가능하다.
- 학교 컴퓨터에서 작업 서버에 접속하여 screen 을 실행하고 그 screen 위에서 작업을 시작한다.
- screen 을 detach 하고 로그아웃하고 터미널을 종료한다. 이 때 screen 과 그 위에서 수행되는 작업은 종료되지 않는다
- 이제 집에 와서 작업 서버에 접속해서 screen -x 로 attach 하면 위에서 작업하던 그 터미널을 그대로 사용할 수 있다.
두 사람이 서로 다른 계정으로 로긴한 상태에서도 screen 을 공유할 수 있다. 이 때 screen 실행화일에 SetUID 퍼미션이 있어야 한다.
먼저, 유저 bob 은 자신의 ~/.screenrc 를 다음과 같이 설정한다.
multiuser on
acladd alice
bob 은 다음과 같이 세션이름을 옵션에 주어 screen 을 실행한다. (세션 이름을 주지 않을 수도 있긴 한데, attach 하는 쪽에서 tty 값을 넣어주어야 하니 불편하다)
$ screen -S bobscreen
그 이후, alice 는 다음과 같이 자신의 터미널에서 attach 한다.
$ screen -x -S bob/bobscreen
즉, 세션이름 옵션에 "유저이름/세션이름"의 형식으로 값을 주어야 한다. (이 얘기가 man page 에 없고 info page 구석에 박혀 있어서, 고민을 시작한 지 몇 달 만에 답을 찾게 되었다 -_-; 근데 방금 다시 보니 man page 의 SYNOPSIS 부분에 떡하니 적혀 있더라. ㅠ,.ㅠ)
이 때 alice 는 완전히 bob 과 동일한 권한을 갖는다. 이를 막기 위해서는 aclchg 옵션을 사용한다.
.screenrc 파일에 다음과 같이 설정[1]
termcapinfo xterm* ti@:te@
- 이 경우, screen의 카피모드를 쓰지 않고, 평소처럼 PuTTY에서 shift+pgup,pgdown 또는 마우스휠을 사용한 스크롤 기능을 사용할 수 있다. (카피모드와 별개)
또한 vim을 screen위에서 띄웠을 때의 마우스휠 사용에 대해서는 ViEditor 페이지 참조
4. 256 컬러 쓰기
PuTTY 로 접속했을 때는 256컬러가 잘 나오는데 그 위에서 screen을 띄우면 16컬러로 나오더라.
요 두 글을 참고해서,
- screen 을 다시 컴파일함. 이 때 configure 를 실행할 때 옵션으로
--enable-colors256
을 명시해야 한다.
- .screenrc 에는 다음과 같이 적어줌
attrcolor b ".I"
termcapinfo xterm 'Co#256:AB=\E[48;5;%dm:AF=\E[38;5;%dm'
defbce "on"
색상 테스트 코드는 위 첫번째 링크 안에 소개되어 있는 다음 두 가지를 써서 할 수 있다.
(screen 실행 전)
(screen 실행 후 16컬러로 나왔을 때. 256컬러로 컴파일한 경우는 TERM 값이 screen-bce
라고 나오더라)
기본 사용법 적힌 페이지들:
매뉴얼, 전체 명령어 목록, 설정 파일 샘플:
screen 실행 중에 지나가 버린 화면 스크롤이 안 되어서 당황.
종종 들리는 tmux 란 게 screen 보다 기능이 좋다는 듯? Tmux
6. Comments
색상 테스트 코드 주소가 변경된 것 같아요.
https://github.com/zhengkai/config/blob/master/script/256colors2.pl
- 감사합니다!
컴퓨터분류