윈도우의 원격 데스크톱 연결(mstsc.exe)로 리눅스 데스크톱에 붙고 싶을 때 xrdp 를 쓴다. 별도 클라이언트를 설치할 필요가 없다는 점이 VNC 대비 장점이다. 반대 방향(리눅스에서 윈도우로 접속)은 Remmina 나 xfreerdp 를 쓴다.
xrdp 는 기본 저장소에 없고 EPEL 에 있다.
sudo dnf install -y epel-release
sudo dnf config-manager --set-enabled crb
sudo dnf install -y xrdp
데스크톱 환경이 없으면 붙어도 검은 화면만 나온다. 먼저 올린다.
# GNOME
sudo dnf groupinstall -y "Server with GUI"
# Xfce (가볍고 xrdp 와 궁합이 좋다)
sudo dnf groupinstall -y "Xfce"
Xfce 를 쓰려면 사용자 홈에 세션 시작 파일을 둔다.
echo "startxfce4" > ~/.Xclients
chmod +x ~/.Xclients
서비스와 방화벽을 연다.
sudo systemctl enable --now xrdp
sudo firewall-cmd --permanent --add-port=3389/tcp
sudo firewall-cmd --reload
ss -ntlp | grep 3389
sudo apt update
sudo apt install -y xrdp
sudo systemctl enable --now xrdp
sudo ufw allow 3389/tcp
Ubuntu 데스크톱에서 이미 GNOME 세션에 로그인한 상태로 xrdp 에 다시 붙으면 세션이 충돌해 검은 화면이 된다. 콘솔에서 로그아웃하고 접속하거나 Xfce 같은 별도 세션을 쓴다.
RHEL 계열에서 세션이 뜨다 말면 SELinux 를 확인한다.
sudo ausearch -m avc -ts recent | grep -i xrdp
거부 기록이 있으면 정책 모듈을 만들어 넣는다. setenforce 0 은 원인 확인용으로만 쓰고 운영에서는 되돌린다.
sudo ausearch -m avc -ts recent | audit2allow -M xrdp_local
sudo semodule -i xrdp_local.pp
GNOME 은 IBus, Xfce 는 Fcitx 를 쓰는 편이 안정적이다.
sudo dnf install -y ibus-hangul
ibus-daemon -rdx
설정 → Region & Language → Input Sources 에서 Korean (Hangul) 을 추가한다.
sudo dnf install -y fcitx fcitx-hangul fcitx-configtool
cat >> ~/.xprofile << 'TXT'
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS=@im=fcitx
TXT
로그아웃했다 다시 접속하고 트레이의 Fcitx 설정에서 Hangul 을 추가한다.
RDP 세션에서는 한/영 키(오른쪽 Alt 위치의 Hangul 키)가 클라이언트에서 그대로 전달되지 않는 경우가 많다. Shift+Space 나 Ctrl+Space 로 바꿔 두는 편이 확실하다.
Fcitx 설정에서 Global Config → Trigger Input Method 에 Shift+Space 를 지정한다. 명령으로 바꾸려면 설정 파일을 고친다.
vi ~/.config/fcitx/config
TriggerKey=SHIFT_SPACE
Fcitx5 를 쓴다면 ~/.config/fcitx5/config 의 TriggerKeys 에 Shift+space 를 넣는다.
GNOME 은 설정 → Keyboard → Switch to next input source 에서 바꾼다.
Shift+Space 는 일부 응용 프로그램이 이미 쓰는 조합이라 그 프로그램 안에서 충돌할 수 있다. 터미널 위주로 쓴다면 문제되지 않는다.
xrdp 는 3389/TCP 를 그대로 노출하며 기본 설정에서 자체 서명 인증서를 쓴다. 인터넷에 직접 열지 말고 VPN 이나 SSH 터널 뒤에 둔다.