프로그래밍/리눅스(Linux)

X11 포워딩: 원격 서버에서 GUI를 내 로컬에서 띄우기 (+QnA)

프리다이어비티즈 2024. 11. 20. 15:16

목차

    이번 시간에는 리눅스 원격 서버에서 프로그램을 GUI로 실행하고 이를 내 로컬로 포워딩하는 법에 대해 다뤄보겠습니다. 보통 서버는 OS 설치 당시, 서버 버전으로 설치하기 때문에 GUI에 적합하지 않습니다. 프로그램 특성 상 GUI 기반으로 동작해야하는 경우에 필연적으로 이번 시간의 설정이 필요하게 됩니다. 같이 살펴보시죠.

    공지

    본 포스팅의 무단도용 및 배포를 금지합니다.

    1. X11 포워딩 활성화 (Xshell 사용자는 2번으로)

    1) X11 포워딩 활성화

    1-1. SSH 연결 시 -X 또는 -Y 옵션 사용

    원격 서버에 SSH로 접속할 때 X11 포워딩을 활성화합니다:

    ssh -X user@remote-server

    또는

    ssh -Y user@remote-server

     

    1-2. SSH 설정 파일 확인

    SSH 설정 파일에서 X11 포워딩이 활성화되어 있는지 확인하세요:

    로컬 머신의 /etc/ssh/ssh_config 또는 ~/.ssh/config:

    Host *
        ForwardX11 yes
        ForwardX11Trusted yes

     

    원격 서버의 /etc/ssh/sshd_config:

    X11Forwarding yes
    X11DisplayOffset 10
    X11UseLocalhost yes

     

    설정 변경 후 SSH 서버를 재시작합니다:

    sudo systemctl restart sshd
     

     

    2) X 서버 설치 및 실행

    2-1. 로컬 머신에 X 서버 설치

    • Windows: Xming 또는 VcXsrv 설치 및 실행.
    • macOS: XQuartz 설치 및 실행.
    • Linux: 대부분 기본적으로 X 서버가 실행 중이므로 추가 설치는 필요하지 않습니다.

     

    2-2. DISPLAY 환경 변수 확인

    X 서버가 실행 중인지 확인하려면 로컬 머신에서 DISPLAY 환경 변수를 확인합니다:

    echo $DISPLAY

     

    로컬 환경에서 값이 출력되어야 합니다. 예: :0 또는 localhost:11.0.

     

    3) X11 관련 패키지 설치

    3-1. 원격 서버에 X11 라이브러리 설치

    GUI 애플리케이션이 X11을 통해 실행될 수 있도록 필요한 패키지를 설치합니다:

    Ubuntu/Debian:

    sudo apt update
    sudo apt install xauth x11-apps

     

    RHEL/CentOS:

    sudo yum install xorg-x11-xauth xorg-x11-apps

     

    3-2. Tk 라이브러리 설치

    Tk 라이브러리도 설치해야 할 수 있습니다:

    Ubuntu/Debian:

    sudo apt install tk

     

    RHEL/CentOS:

    sudo yum install tk

     

    4) 테스트

    원격 서버에서 간단한 X 애플리케이션을 실행해봅니다:

    xclock

     

    xclock이 실행되며 로컬 화면에 시계가 표시되면 X11 포워딩이 정상적으로 동작하는 것입니다.

     

    2. Xshell에서 X11 포워딩 설정

     

    1) Xshell 세션 설정 열기:

    Xshell에서 접속하려는 세션을 선택한 후 오른쪽 클릭 → **속성(Properties)**를 클릭합니다.

     

    2) X11 포워딩 활성화:

    • 왼쪽 메뉴에서 연결(Connection) → SSH → **터미널(Terminal)**을 선택합니다.
    • X11 포워딩 활성화(Enable X11 forwarding) 옵션을 체크합니다.
    • 디스플레이 위치(Display location)는 기본값인 localhost:0.0을 유지합니다.

     

    3) 변경사항 저장:

    설정을 저장한 뒤 세션을 다시 연결합니다

    다시 세션 연결 후, 원격 서버에서 DISPLAY 환경 변수가 제대로 설정되었는지 확인합니다:

    echo $DISPLAY
     
     

    출력이 localhost:10.0 또는 유사한 값이면 정상입니다.

     

    4) 원격 서버에서 GUI 애플리케이션 실행

    X11 테스트를 위해 간단한 애플리케이션 실행:로컬 머신에서 xclock 창이 뜨면 X11 포워딩이 정상 작동 중입니다.

    xclock

     

     

    3. 원격 서버 root 계정에서의 X11 포워딩 (일시적): 2가지 방법

    방법 1: DISPLAY와 XAUTHORITY 변수 전달

    1) 일반 사용자 계정에서 현재 DISPLAY와 .Xauthority 파일 위치를 확인:

    echo $DISPLAY

     

    예: localhost:10.0

    ls -l ~/.Xauthority

     

    예: /home/user/.Xauthority

     

    2) root 계정으로 전환:

    sudo -i

     

    3) DISPLAY와 XAUTHORITY 변수 설정:

    export DISPLAY=localhost:10.0
    export XAUTHORITY=/home/user/.Xauthority

     

    4) X11 애플리케이션 실행 테스트:

    xclock

     

    Xclock 창이 로컬 컴퓨터에 표시되면 성공입니다.


    방법 2: .Xauthority 파일 병합

    1) 일반 사용자 계정의 .Xauthority 파일을 root 계정으로 병합:

    sudo -i
    xauth merge /home/user/.Xauthority
     

    2) 병합 후 DISPLAY 변수 설정:

    export DISPLAY=localhost:10.0

     

    3) X11 애플리케이션 실행 테스트:

    xclock

     

    작동하면 문제 해결입니다.

     

    4.  원격 서버 root 계정에서의 X11 포워딩 (영구적): 2가지 방법

    1. DISPLAY와 XAUTHORITY 환경 변수 영구 설정

    root 계정에서 세션이 열릴 때마다 자동으로 환경 변수를 설정하도록 합니다.

     

    1) ~/.bashrc 또는 ~/.bash_profile 수정:

    root 계정의 ~/.bashrc에 다음 내용을 추가:

     
    export DISPLAY=localhost:10.0
    export XAUTHORITY=/home/user/.Xauthority

     

    파일 저장 후 적용:

    source ~/.bashrc

     

    2) 테스트:

    새 세션을 열고 xclock 실행:

    xclock

    2. .Xauthority 파일 병합 자동화

    매번 수동으로 병합하는 대신, root 계정에서 .Xauthority를 자동으로 병합하도록 설정합니다.

     

    1) 스크립트 작성:

    root 계정의 홈 디렉토리에 스크립트를 생성:

    nano /root/merge_xauth.sh
     

    아래 내용을 추가:

    #!/bin/bash
    xauth merge /home/user/.Xauthority
    export DISPLAY=localhost:10.0
    export XAUTHORITY=/home/user/.Xauthority

     

    2) 스크립트에 실행 권한 부여:

    chmod +x /root/merge_xauth.sh

     

    3) ~/.bashrc에서 스크립트 실행:

    ~/.bashrc 파일에 아래를 추가:

     
    /root/merge_xauth.sh

     

    4) 테스트:

    새로운 root 세션을 열고 X11 애플리케이션 실행:

    xclock

     


    이번 시간에는 원격 서버에서 동작하는 GUI 기반의 프로그램을 내 로컬로 포워딩하는 방법에 대해 다뤄보았습니다. 환경변수를 SSH 접속할 때마다 매번 설정하는 번거러움을 해소하기 위해 영구적으로 환경변수 세팅하는 법 또한 4번에서 작성하였습니다.

     

    추가 문의사항이 있다면 자유롭게 댓글 달아주세요. 고맙습니다.

    반응형