screen으로 multi-user multi-display mode 사용하기

터미널 하나를 가지고 여러 개의 쉘을 동시에 실행하기 위해 screen 명령을 사용하는 것이 보통이다. 그런데 이 screen 명령에 숨겨진 기능이 하나 있는데, 바로 multi-display 모드이다.

하나의 터미널을 띄우면 기본 터미널 화면이 할당되어 있는데, screen을 실행하면 새로운 가상 터미널 세션을 생성하고 이것을 attach/detach해가며 쓸 수 있다. (물론 여러 개의 터미널 세션을 생성할 수 있다.) Detach 한 상태로 처음 터미널을 닫더라도(접속을 종료) detach된 터미널은 계속 살아있기 때문에 프로그램이 background로 실행되는 것과 같은 효과를 지니며, 나중에 로그인하여 그 터미널을 attach함으로써 다시 사용할 수도 있다.

Multi-display 모드는 이미 attach되어 있는 가상 터미널 세션을 또다른 터미널에 attach함으로써 두 개 이상의 터미널에서 하나의 가상 터미널을 동시에 보고 사용할 수 있는 기능이다. 예를 들면 A의 컴퓨터에서 S라는 서버에 접속, screen으로 터미널 세션을 생성한 채 사용하고 있는데, B라는 컴퓨터에서 S 서버에 접속하여 그 터미널 세션을 가져와 동시에 보고 사용할 수 있다. (한쪽에서 키를 입력하면 그것이 다른쪽에서도 그대로 보여진다.) 2대 이상의 임의의 컴퓨터에서 동시에 하나의 화면을 보고 작업할 수 있으므로 특히 짝프로그래밍에 유용하다.


기본 설정 상태에서 multi-display 모드를 사용하려면 A와 B의 터미널은 같은 사용자로 로그인되어 있어야 한다. 그러나 서로 멀리 떨어진 원격지에서 같이 작업한다거나 할 때 자신의 계정 비밀번호를 알려주고 로그인하게 하는 건 꺼림칙한 일이다.
다행히 screen은 multi-user multi-display를 지원하며, 다음과 같이 쓸 수 있다.


  1. screen 실행 바이너리(보통 /usr/bin/screen)에 root로 setuid를 설정한다. 시스템에 따라서는 /var/run/screen 디렉토리의 퍼미션이 755가 되어야 하는 경우도 있다.
    (기본적으로는 잠재적인 보안 결함 발생 가능성 때문에 setuid를 해제해둔다.)
  2. A 컴퓨터에서 user1로 로그인하고 screen -S {session_name}으로 새 screen session을 만든다.
    그런 다음, Ctrl+A :multiuser on을 입력하여 다중사용자 모드로 전환하고 Ctrl+A :acladd user2로 이 터미널 세션에 접근 가능한 사용자를 지정해준다.
  3. B 컴퓨터에서 user2로 로그인하고 screen -x user1/{session_name}을 입력하면 multi-display를 볼 수 있다.


기타 screen Tip