≣ 목차
이번 시간에는 리눅스 원격 서버에서 프로그램을 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번에서 작성하였습니다.
추가 문의사항이 있다면 자유롭게 댓글 달아주세요. 고맙습니다.