WSL2의 XDMCP 접속을 위한 UDP 포워딩 및 자동 실행 설정
WSL2는 NAT를 구성하여 외부에서 이 WSL 리눅스의 xdmcp에 접근할 수 없습니다. 호스트 OS인 윈도우에서 UDP 포워딩을 설정해야 합니다.
설정 도구
sudppipe라는 프로그램을 사용하겠습니다.
http://aluigi.altervista.org/mytoolz/sudppipe.zip명령
sduppipe.exe wsl2_IP_주소 177 177
wsl2 리눅스의 IP 주소는 호스트 OS를 재부팅할 때 등 WSL 리눅스기동할 때마다 바뀝니다. 원활한 서비스를 위해 wsl이 재기동될 때마다 udp 포트포워딩을 다시 해야 할 필요가 있습니다.
C:\Users\test\Desktop\sudppipe>for /F "usebackq delims=" %A in (`wsl hostname -I`) do sudppipe.exe %A-wsl 177 177
PC 재부팅 시 자동 실행
wslInit.bat
@echo off rem Two empty lines are needed after the set command set LF=^ rem Two empty lines are needed above set OUT_STR= for /F "usebackq delims=" %%a in (`tasklist /fi "imagename eq sudppipe.exe" ^| find "PID" ^> nul ^&^& taskkill /IM "sudppipe.exe" /F`) do set OUT_STR=%%a For /f "tokens=1-3 delims=- " %%a in ('date /t') do (set mydate=%%a-%%b-%%c) For /f "tokens=1-2 delims= " %%a in ('time /t') do (set mytime=%%a %%b) echo %mydate% %mytime% > %TEMP%\WSL.log set OUT_STR1= for /F "usebackq delims=" %%a in (`wsl genie -i`) do set OUT_STR1=%%a echo WSL initialization >> %TEMP%\WSL.log if NOT "%OUT_STR%"=="" echo %OUT_STR% >> %TEMP%\WSL.log echo. >> %TEMP%\WSL.log if "%OUT_STR1%"=="" ( echo WSL starts with sytemd^%LF%%LF%The systemd may already be running >>%TEMP%\WSL.log ) else ( echo WSL starts with systemd^%LF%%LF%%OUT_STR1% >>%TEMP%\WSL.log ) echo. >> %TEMP%\WSL.log set wsl2host= for /F "usebackq delims=" %%A in (`hostname`) do set wsl2host=%%A echo UDP portforwarding for XDMCP starts >>%TEMP%\WSL.log c:\users\test\desktop\sudppipe\sudppipe.exe %wsl2host%-wsl 177 177 2>>%TEMP%\WSL.log 1>%TEMP%\WSL-udppipe.log
시작 프로그램 폴더에 wslInit.vbs 생성
※ 시작 프로그램 폴더는 C:\Users\user\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
※ 윈도우 시작 시 프로그램을 자동으로 시작하게 하시 위해서 위 wslInit.vbs 스크립트를 작업 스케줄러에 추가할 수 있습니다. 작업 만들 때 트리거를 ‘로그온할 때’로 선택하면 로그인 후 1회만 실행됩니다.
확인
wsl2 리눅스에서 systemd 구동 확인
- Windows10의 WSL2에서 하는 systemd 설정은 https://gist.github.com/djfdyuruiry/6720faa3f9fc59bfdf6284ee1f41f950
- Windows11의 WSL2에서 하는 systemd 설정은 https://devblogs.microsoft.com/commandline/systemd-support-is-now-available-in-wsl/
systemd가 구동 중인 경우:systemd가 구동이 안되고 있는 경우:
PC에서 udp 177번 대기 확인
참고
wsl2 종료
※ wsl을 shutdown 등을 통해서 종료한 후 다시 시작할 때, wsl 리눅스의 IP 주소가 바뀌므로 XDMCP를 위한 UDP 포트에 대한 포워딩을 새로 해야 합니다. 위 4.의 wslInit.bat 명령을 다시 실행해야 합니다.
systemctl 등의 명령을 사용 조건
호스트에서 wsl 접근 시:
wsl내에서:
※ genie 실행 시 상당한 시간이 소요되고 결국 timeout 메시지가 나오는 경우: Re: WSL2 의 XDMCP 설정 - Ubuntu 20.04 | Comment 참조