개요
Ubuntu20.04 이후의 리눅스의 경우 XDMCP를 원활하게 사용하기 위해서는 Systemd를 통한 구동이 필요합니다. Systemd 서비스는 WSL2부터 사용이 가능한데요. 다음은 Windows 시스템에 WSL2를 설치 혹은 업그레이드하는 방법과 WSL2에서 XDMCP를 구성하고 구동하는 방법에 대한 안내이니다.
(빠른 안내를 위해서는 이 문서 마지막의 ‘단계별 빠른 안내’를 참고하세요)
WSL(1)과 WSL2의 차이
WSL1과 WSL2의 차이는 다음 글을 참고하시기 바랍니다.
https://learn.microsoft.com/ko-kr/windows/wsl/compare-versions
기능 | WSL 1 | WSL 2 |
---|---|---|
Windows와 Linux 통합 | ✅ | ✅ |
빠른 부팅 시간 | ✅ | ✅ |
기존 Virtual Machines보다 작은 리소스 공간 | ✅ | ✅ |
현재 버전의 VMware 및 VirtualBox에서 실행 | ✅ | ✅ |
관리 VM | ❌ | ✅ |
전체 Linux 커널 | ❌ | ✅ |
전체 시스템 호출 호환성 | ❌ | ✅ |
OS 파일 시스템 간 성능 | ✅ | ❌ |
(출처: Microsoft 문서(https://learn.microsoft.com/ko-kr/windows/wsl/compare-versions ))
이 차이들 중에서 XDMCP 사용에 영향을 주는 부분은 WSL2가 리눅스 커널을 좀 더 독립적이고 안정적으로 사용하기 위해 변경한 부분 때문에 발생하는 네트워크 구조인데요.
WSL2를 구성하면 WSL2의 네트워크는 그 컨테이너인 윈도우10(이하 호스트)의 네트워크와 분리되어 윈도우10 내의 NAT 망에 들어가게 됩니다.
예를 들면,
WSL1 | WSL2 | |
---|---|---|
Windows 10(호스트 머신) | 192.168.11.146 | 192.168.11.146 |
↑O↓O | ↑O↓O | |
WSL 리눅스 시스템 | 192.168.11.147 | 172.18.117.20 |
↑O↓O | ↑X↓O | |
외부 윈도우 | 192.168.11.9 | 192.168.11.9 |
WSL2의 경우 호스트에서 WSL2로 XDMCP 접근이 가능하지만, 호스트 외부에서 WSL2로 XDMCP 접근을 할 수 없습니다. 이는 NAT 안에 놓인 XDMCP 서버에 접근을 하지 못하는 이유와 같습니다.
WSL2 설치 혹은 업그레이드
WSL1에서 하는 업그레이드나 WSL2의 바로하는 설치에 대해서는 다음 글을 참고하시기 바랍니다.
https://learn.microsoft.com/ko-kr/windows/wsl/install#upgrade-version-from-wsl-1-to-wsl-2
Windows 10의 리눅스 서브시스템 사용하기(SSH 설정 및 접속)
XDMCP 데몬 설치 및 설정
다음 글을 참조하시기 바랍니다.
Windows 10의 리눅스용 Windows 하위 시스템 (WSL) 의 XDMCP 설정 - Ubuntu 18.04
Systemd 설치 및 구동
아래 과정은 Windows 10 사용자일 경우에 해당합니다. Windows 11 사용자라면 다음 글을 참고하세요.
https://devblogs.microsoft.com/commandline/systemd-support-is-now-available-in-wsl/
호스트에서 systemd를 설치하기 위한 설정은 다음 글을 참고하시기 바랍니다.
https://gist.github.com/djfdyuruiry/6720faa3f9fc59bfdf6284ee1f41f950구동
호스트에서 WSL 구동 명령인 wsl 대신 다음 명령을 사용해야 합니다.C:\WINDOWS\system32>wsl genie -s
※
XDMCP 서비스를 위한 systemd 명령
test@win10-20h2-hdj-wsl:~$ sudo systemctl enable dbus; sudo systemctl start dbus test@win10-20h2-hdj-wsl:~$ sudo systemctl enable lightdm; sudo systemctl start lightdm
※ enable: 시스템 시작 시 서비스를 자동 실행하도록 등록, start: 서비스 즉시 실행
Xmanager XDMCP 접속 - WSL 컨테이너인 윈도우에서 하는 접속
Xmanager 쿼리 접속
필요한 설정을 마치고 lightdm 데몬을 구동하게 되면 Xmanager 창에 XDMCP 접속이 가능한 호스트 목록에 WSL 시스템이 보입니다.WSL에 접속하기 위해 이 아이콘을 더블 클릭 하거나 주소 창에 해당 WSL의 IP 주소를 입력합니다.
Xmanager XDMCP 접속 - WSL 컨테이너인 윈도우 외부에서 하는 접속
WSL이 설치된 PC가 아닌 다른 PC에서 이 WSL 리눅스에 접속하기 위해서 호스트 OS의 방화벽 설정에서 UDP 177번을 허용해야 합니다.
UDP 포트포워딩: 호스트에서하는 설정
WSL2는 NAT를 구성하여 외부에서 이 WSL 리눅스에 접근할 수 없습니다. 호스트 OS인 윈도우에서 UDP 포워딩을 설정해야 합니다. 다음 글을 참조하시기 바랍니다.
WSL2의 XDMCP 접속을 위한 UDP 포워딩 및 자동 실행 설정Xmanager 실행
위 화면에서는 XDMCP 브로드캐스트에 응답한 호스트의 이름에 ‘-wsl’이라고 되어 있는 것으로 보아 wsl 리눅스 시스템을 가리키고 있지만 IP 주소는 그 시스템의 호스트 OS의 IP 주소임을 알 수 있습니다.
단계별 빠른 안내
WSL2 설치 혹은 WSL1에서 업그레이드
https://learn.microsoft.com/ko-kr/windows/wsl/install#upgrade-version-from-wsl-1-to-wsl-2XDMCP 데몬으로서 lightdm 설치 및 설정
Windows 10의 리눅스용 Windows 하위 시스템 (WSL) 의 XDMCP 설정 - Ubuntu 18.04test@win10-20h2-hdj-wsl:~$ sudo apt-get update && sudo apt install lightdm
test@win10-20h2-hdj-wsl:~$ sudo vi /etc/lightdm/lightdm.conf
[LightDM] start-default-seat=false [XDMCPServer] enabled=true port=177
사용자 데스크톱 설치
test@win10-20h2-hdj-wsl:~$ sudo apt install xubuntu-desktop
lightdm 데몬 구동
test@win10-20h2-hdj-wsl:~$ sudo service dbus start test@win10-20h2-hdj-wsl:~$ sudo /etc/init.d/lightdm start&
Systemd 설치
https://gist.github.com/djfdyuruiry/6720faa3f9fc59bfdf6284ee1f41f950test@win10-20h2-hdj-wsl:~$ sudo cd /tmp wget --content-disposition \ "https://gist.githubusercontent.com/djfdyuruiry/6720faa3f9fc59bfdf6284ee1f41f950/raw/952347f805045ba0e6ef7868b18f4a9a8dd2e47a/install-sg.sh" test@DESKTOP-CSF1TA1-wsl:~$ sudo chmod +x /tmp/install-sg.sh test@DESKTOP-CSF1TA1-wsl:~$ sudo /tmp/install-sg.sh
Systemd 구동
호스트에서 WSL 구동 명령인 wsl 대신 다음 명령을 사용해야 합니다.C:\WINDOWS\system32>wsl --shutdown C:\WINDOWS\system32>wsl genie -s
※ wsl 프롬프트가 나올 때까지 시간이 많이 소요되고 ‘Timed out waiting for systemd to enter running state.’ 메시지가 나오는 경우: wsl의 서비스의 일부가 제대로 구동되지 않아 생기는 문제입니다. 이 문서의 덧글을 확인해 보시고 문제를 해결하시기 바랍니다.
XDMCP 서비스를 위한 systemd 명령
test@win10-20h2-hdj-wsl:~$ sudo systemctl enable dbus; sudo systemctl start dbus test@win10-20h2-hdj-wsl:~$ sudo systemctl enable lightdm; sudo systemctl start lightdm
WSL 윈도우 외부에서 WSL 리눅스의 XDMCP 접속을 위한 UDP 포워딩
C:\Users\test\Desktop\sudppipe>for /F "usebackq delims=" %A in (`hostname`) do sudppipe.exe %A-wsl 177 177
WSL PC의 윈도우 방화벽 설정에서 다음 포트 허용
UDP 포트 177번 : 원격에서 XDMCP 접속
TCP 포트 22번 : 원격에서 SSH접속 또는 Secure XDMCP 접속Xmanager에서 접속