우분투 원격 데스크톱(xrdp) 설정: 접속 불능을 피하려고 확인할 것들

이 글의 핵심

우분투에 xrdp로 원격 데스크톱을 열 때는 설치보다 설정을 바꾼 뒤 로그인이 막히는 상황이 위험합니다. xrdp 패키지가 만드는 파일과 기본값을 우분투 24.04 컨테이너에서 확인하고, 접속이 끊겨도 복구할 수 있는 순서를 정리했습니다. 컨테이너에는 데스크톱과 systemd가 없어 실제 로그인 동작은 검증하지 못했습니다.

원격 데스크톱 설정에서 정말 곤란한 상황은 설치가 안 되는 것이 아니라, 설정을 바꾼 뒤 원격 접속도 로컬 로그인도 안 되어 기계에 손댈 수 없게 되는 것이다. 이 글은 그 위험을 줄이려는 순서를 정리한다. 우분투 24.04 컨테이너(aarch64)에 apt install xrdp를 해서 확인한 내용과, 컨테이너라서 확인하지 못한 내용을 구분해서 적는다.

컨테이너에서 확인한 것

xrdp를 설치하면 /etc/xrdp/ 아래에 다음 파일이 생겼다.

  • xrdp.ini: 접속 포트, 보안 계층, 세션 종류 메뉴
  • sesman.ini: 세션 관리자 설정
  • startwm.sh: 로그인 뒤 실행되는 시작 스크립트
  • reconnectwm.sh, rsakeys.ini, xrdp_keyboard.ini

xrdp.ini의 주요 값은 [Globals]에서 port=3389, security_layer=negotiate, crypt_level=high였다. 세션 종류를 정하는 항목으로 [Xorg]와 [Xvnc]가 있었고, 이 항목에서 port=-1로 보이는 것은 자동 할당을 뜻하는 설정이다. 마지막에 port=ask5900, port=ask3389로 시작하는 접속 대상 항목도 있었다.

startwm.sh의 주석을 뺀 내용은 짧다. /etc/profile과 ~/.profile을 읽은 뒤 /etc/X11/Xsession을 exec로 실행한다. 이 스크립트가 틀리면 로그인 직후 세션이 바로 끝나는 증상이 나올 수 있으므로, 수정할 때 가장 조심할 파일이다. 다만 그런 증상은 이 컨테이너에서 재현해 보지 않았다.

패키지 정보로는 ssl-cert에 의존하고(그룹 ssl-cert가 생성됨), xorgxrdp와 pipewire-module-xrdp를 권장 패키지로 두며 guacamole을 제안한다. 권장 패키지를 빼고 설치하면 화면이나 소리가 빠질 수 있다는 점만 의식해 두면 된다. 실제로 빠지는지는 확인하지 못했다.

설정을 바꾸기 전에 할 것

  1. SSH 접속을 먼저 확보한다. 원격 데스크톱이 안 열려도 SSH가 되면 복구할 수 있다. 다른 터미널 하나로 SSH 세션을 열어 두고 작업한다.
  2. 백업한다. sudo cp -a /etc/xrdp /etc/xrdp.bak처럼 설정 디렉터리 전체를 복사해 둔다. 홈 디렉터리의 ~/.xsession, ~/.xsessionrc도 있으면 같이 복사한다.
  3. 한 번에 하나만 바꾼다. 설정을 두세 개 같이 바꾸면 어느 것이 원인인지 알 수 없다.
  4. 바꾼 뒤에는 현재 세션을 닫기 전에 새 세션으로 접속해 본다. 기존 연결을 끊지 않은 채로 다른 클라이언트로 접속이 되는지 확인한 뒤에 기존 연결을 닫는다.
  5. 서비스 재시작은 SSH에서 한다. sudo systemctl restart xrdp로 재시작하고 systemctl status xrdp와 journalctl -u xrdp로 로그를 확인한다. 이 명령은 컨테이너에 systemd가 없어 실행해 보지 못했다.

포트를 그대로 열지 않는다

기본 포트가 3389이므로 공유기나 방화벽에서 이 포트를 인터넷에 그대로 여는 것은 위험하다. 외부에서 접속해야 한다면 SSH 터널(ssh -L 3389:localhost:3389 사용자@서버)로 연결하고 클라이언트는 localhost:3389로 접속하는 방법이 있다. 이 방식은 명령 형태만 소개하며 이 글에서 연결까지 확인하지는 않았다.

접속이 안 될 때 확인 순서

원인을 좁히는 순서를 적는다. 각 단계의 결과는 환경에 따라 다르다.

  1. 서비스 상태: systemctl status xrdp xrdp-sesman
  2. 포트 대기 여부: ss -tlnp | grep 3389
  3. 방화벽: sudo ufw status
  4. 로그: journalctl -u xrdp -u xrdp-sesman, /var/log/xrdp-sesman.log
  5. 같은 계정으로 로컬 데스크톱에 이미 로그인된 상태인지. 같은 계정의 로컬 세션과 원격 세션이 겹치면 문제가 생길 수 있는지는 이 글에서 확인하지 못했다.

확인하지 못한 것

  • 데스크톱 환경(GNOME)과 Wayland 세션에서의 로그인
  • startwm.sh를 잘못 고쳤을 때의 정확한 증상과 복구 방법
  • 오디오 리다이렉션과 클립보드 동작
  • 실제 클라이언트(Windows 원격 데스크톱 연결, macOS용 Microsoft Remote Desktop)에서의 접속

우분투 초기 설정 전반은 우분투 개발 환경 초기 설정에서 다룬다.