Text mode, X window

markyang92·2021년 9월 15일
0

linux (ubuntu/debian)

목록 보기
26/36
post-thumbnail
post-custom-banner

TTY

  • /dev/tty*, /dev/pts/*파일들I/O에 관여하는 디바이스 파일, 외부 터미널 장치를 연결할 때, 리눅스 가상 콘솔, xterm, gnome-terminal 같은 터미널 에뮬레이터, ssh 등에 사용됨
  • 그림 출처: http://www.linusakesson.net/programming/tty/
  • getty 프로세스는 백그라운드에서 라인을 모니터링하다가 터미널에서 접속을하면 login prompt를 보여준다.
    • 이 때, /dev/ttyS[Num] 파일이 사용된다.

linux 가상 콘솔

  • 현재 리눅스에서 Ctrl + Alt + F1 ~ F6session을 변경하는데, 여기서 사용하는 것이 가상 콘솔
    • 커널터미널에뮬레이터에서 사용할 수 있게 해줌: linux 가상 콘솔
    • /dev/tty* 사용

PTY

  • PTY: Pseudo TTY(xterm, gnome-terminal, ssh ..)
    • 위에서 리눅스 가상 콘솔이 커널에서 터미널을 에뮬레이트 했다면, TTY driver가 제공하는 세션 관리기능, line discipline을 그대로 사용하면서, 사용자 프로그램에서 터미널을 에뮬레이션 하는 것이 PTY(Pseudo TTY)이다.
  • PTY는 master/slave pair로 이루어져 있다.
    • pseudo terminal master (PTM): /dev/ptmx(pseudo-terminal master multiplexer)파일을 open하면, pseudo terminal master(PTM)에 해당하는 file descriptor가 반환된다.
    • pseudo terminal slave (PTS): 위에서 반환된 PTM-fd가 반환되면, PTS에 해당되는 device가 /dev/pts/ 디렉토리에 생성된다.
    • PTM과 PTS가 open되면, /dev/pts/*는 실제 터미널과 같은 인터페이스를 제공한다.
  • x-term, gnome-terminal을 예로 들면, xterm이 ptm에 연결되고, 애플리케이션 프로세스(e.g., bash)가 pts에 연결되는 구조이다.
    • xterm에서 입력 -> ptm -> 커널의 line disciplline -> pts를 거쳐 bash 프로세스에 전달되고, 명령 결과는 다시 pts-> line discipline -> ptm을 거쳐 xterm에 전달된다.
    • telnet의 stdin, stdout, stderr은 모두 터미널에 연결되어 있어, 터미널에서 ls 명령을 실행하면, telnet 명령의 입력으로 들어가고, 네트워크를 거쳐 telnetd에 전달되면 PTM, PTS를 거쳐 bash 프로세스에 전달된다. (터미널 프로그램을 실행하거나, 외부에서 ssh, telnet client로 접속해보면 /dev/pts 디렉토리에 디바이스 파일이 만들어 진 것을 확인 할 수 있다.)

tmux의 예

  • tmux로 만든 pane마다 /dev/pts/* 생성된다.
    • tmux pane(/dev/pts/6에 할당된) 터미널에 문자를 입력해본다.
    • cat /dev/pts/6를 해보면 그대로 읽힌다.

세션

  1. session
  2. login

리눅스의 디스플레이 모드

리눅스는 두 개의 디스플레이 모드를 사용한다.
1. Text Mode: text mode
2. Graphic mode: X Window System
2.1. Graphic mode 특징

  • 초기 설정에서 가상 콘솔을 할당 받는 것이 아니다.
  • X-server는 특정 가상 콘솔을 사용하도록 지시를 받는 경우가 아니라면, 실행되고 있지 않는 가상 콘솔을 가져오게 된다.
    • e.g: tty1, tty2에서 getty 프로세스가 실행 중이라면, 새로운 X-server는 tty3을 받는다.

+) 프로세스간 통신 서비스: D-Bus


X Window System

  • X Window(MS의 Windows와 혼동하지 말자) System, X11은 유닉스 계열 OS에서 사용되는 윈도 시스템 및 X 윈도우 GUI환경
    • 특징: 네트워크 프로토콜(X 프로토콜)을 기반한 서버<->클라이언트 윈도 시스템
  1. X 서버: Window 표현, IO, 디스플레이 구성
    1.1. client는 네트워크로 X서버에 접속해 X서버에게 명령 서비스를 요청하면, X서버는 명령을 요청 받아 화면을 포여준다.
  1. X Window System은 사용자 인터페이스에 관여하지 않는다.
    2.1. KDE, gnome, Xfce등 데스크톱환경은 X윈도 기반이지만 다 다른 표현을 보여준다.

X server

  • 위치: /usr/bin/X
    • 이 바이너리는 console user만이 실행할 수 있음
  • X 서버는 Port 6000에서 TCP listening
  • 현재 내 GUI에서 사용하는 X
    • 리눅스에서 X는 가상 터미널에서 실행된다.
$ pgrep X -a

  • vt2: /dev/tty7 에서 실행되도록 지시 받았다는 뜻이다. (다시 말하지만, X 서버는 가상 터미널이다.)

$DISPLAY

  • $DISPLAY=:0
    • 디스플레이는 사용되는 키보드 및 마우스와 연결하는 하나 혹은 그 이상의 모니터를 나타내는 식별자.
    • 보통 디스플레이는 컴퓨터에 연결하는 한 대의 모니터와 일치한다. (더 같이 쓸수도 있음)
    • X session을 사용할 때 DISPLAY환경변수는 디스플레이 식별자로 설정된다.
  • XDG_SESSION_TYPE=x11
  • DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
  • DISPLAY=:0

Display Manager

  • X 서버만 구동 한다면, 빈 화면만 보게된다.
  • 디스플레이 매니저
    • gdm (gnome 매니저)
    • kdm (KDE 매니저)

세션 변경

  1. 그래픽 모드에서 세션 변경 키

    • ctrl + alt + Function

  1. 명령
$ sudo chvt [ttynumber]

Text mode

  • SDG_SESSION_TYPE=tty
  • XDG_SESSION_ID=번호 # 각 세션마다 Session ID가 다르다. ex) tty3 XDG SESSION ID = 241, tty4 XDG SESSION ID = 242
  • DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
  • 텍스트 모드에서 세션 변경 키
    • alt + Function

  • Text mode 특징
    • 로그인 프롬프트: getty 프로세스가 사용한다.

$ chvt [ttynum]

# chvt [ttynumber]
  • 만약 입력 매커니즘이나 다른환경의 오작동으로 인해 콘솔 전환이 문제가 생기면 chvt 명령으로 시스템이 콘솔을 변경하도록 시도할 수 있다. 예를들어 tty1로 전환하려면 루트로서 다음과 같이 실행한다.
# chvt 1

profile
pllpokko@alumni.kaist.ac.kr
post-custom-banner

0개의 댓글