WSL 2 에서 Ubuntu Desktop 과 Xdmcp 설정 ( gdm3 와 VcXsrv )

모든 linux desktop은, X protocol을 통하여 remote display를 사용할 수 있습니다.

ubuntu-22.04 desktop 은 gdm3 라는 display manager를 사용합니다.

gdm3의 xdmcp 설정 과 firewall, X-server 인 VcXsrv 의 실행과정을 소개합니다.


아래의 그림은, Ubuntu 22.04 의 xdmcp login 화면입니다.

wsl 2 ubuntu desktop xdmcp login (VcXsrv)

Ubuntu desktop 을 실행하려면, 여러가지 과정이 더 필요합니다.

나머지 과정은 계속해서 blog 글로 올립니다.


Ubuntu-22.04 Desktop 설치 시, 보안을 위해, local display만 허용되어 있습니다.

즉, XDMCP는 비활성화 상태이며, default 설정입니다.


Ubuntu-22.04 desktop은 gdm3 를 default display-manager로 사용하며,

xdmcp broadcast는 IPv6 만 지원합니다. IPv4 로 xdmcp broadcast를 사용하려면,

gdm3를 lightdm 으로 교체하거나, wsl 의 linux kernel을 compile 해야 합니다.


참고로, 개인사용자는, 기본 gdm3 만으로도 충분합니다.

XDMCP가 없는 linux desktop이거나, broadcast가 필요한 경우,

display manager를 lightdm 로 바꾸면 됩니다.


1. gdm3 의 xdmcp 설정

  gdm3의 설정파일은, /etc/gdm3/custom.conf 입니다.

  ubuntu terminal 에서 아래의 과정을 수행합니다.

sudo cp /etc/gdm3/custom.conf custom.conf.bak
sudo nano /etc/gdm3/custom.conf 

  /etc 내부는, root 권한이 필요하므로, sudo 를 사용합니다.

  첫째 line은, 원래 file을 backup하는 명령이며, 생략해도 됩니다.

  두번째 line은, nano editor로 gdm3 config file을 open합니다.


  nano editor에서, 다음 항목들을 넣어 줍니다.

[daemon]
.....
WaylandEnable=false
.....

[security]
DisallowTCP=false

[xdmcp]
Enable=true
MaxSessions=99
DisplaysPerHost=99

  WSLg (WSL2) 와 Ubuntu-22.04는, 아직 Wayland 를 사용할 수 없습니다.

  또한, XDMCP에서도 Wayland를 사용할 수 없으므로, WaylandEnable=false 입니다.


  개인환경에서 network 보안은 필요 없으니, DisallowTCP=false 로 해 줍니다.


  xdmcp 부분에서, Enable=true로, 해 주고, MaxSession=99, DisplaysPerHost=99로 합니다.

  MaxSession과 DisplayPerHost는 multi-session을 사용하지 않는 경우, 없어도 무방합니다.

  한마디로, xdmcp로 99 ( desktop )session 까지 허용하는 설정입니다.


  설정 file을 바꾼 후, gdm3 service를 재시작해 줍니다.

sudo systemctl restart gdm3


2. X-server ( VcXsrv ) 설치

  VcXsrv는 Windows 용 Open Source X-server 입니다.

  XDMCP 로 linux desktop을 실행하기 위해, 아래에서 최신 설치파일을 받고 실행합니다.

  https://sourceforge.net/projects/vcxsrv/files/latest/download


VcXsrt setup, install option

3. VcXsrv 실행 및 설정 파일

  Desktop 에 생성된 XLaunch 를 실행하면, XDMCP 연결을 위한 입력창이 시작됩니다.

XLaunch, xdmcp display configuration

  Multiple windows는, linux desktop을 사용하지 않고, 실행되는 local app 만 지원됨.

  Fullscreenwindows 화면 전체가 linux desktop 으로 사용됨.

  One Large window는, windows 화면 일부가 linux desktop으로 사용됨.

  One window without title bar는 One Large window와 비슷한데,

  X-server 창의 title bar가 없는 형태.


  Display number는 X-server의 display number이며, -1은 자동설정.

  모든, X-server는 서로 다른, 고유의 display number를 가져야하고,

  시작 값, 또는 default 값은 0


XLaunch config, start client

  Start no client는, X-server만 실행된 후, 나중에, X client( GUI app ) 가 실행되면,

  GUI 가 X-server로 출력됨. 그리고 이것은, network을 통하지 않는 local 전용.


  Start a program은, Start no client와 비슷한데, network 과 SSH 가 지원.


  Open session via XDMCP는, linux machine을 찾아 내는 기능과, login 화면을 지원.

  즉, Real Machine, Virtual Machine의 사용 형태와 유사.


XLaunch config, connect host

  Open session via XDMCP 설정시 나오는 창.


  Connect to host는 연결할 host를 직접 지정.

  VcXsrv 와 WSL Ubuntu desktop 은, 현재 xdmcp broadcast가 잘 되지 않으므로,

  WSL에 할당된 ip를 넣고 연결해야 함.

  IP 정보는, ubuntu terminal에서 hostname -I 명령으로 확인.

hostname -I
192.168.163.85


  Search for hosts 는 network broadcast 를 통해, linux desktop을 검색 후 연결.


XLaunch config, extra settings

  Clipboard는, X-server 에서 windows와 copy, paste를 허용하는 옵션.


  Native opengl은, GUI 구동을 windows opengl 모드로 하는 옵션.

  GUI 표시에 문제가 있을 경우에만, check 하기를 권장.

  desktop 종류에 따라서, 반드시 꺼야 할 경우도 있음. ( KDE 계열 등 )


  Disable access control은, App이 실행된 후, X-server에 자동 연결설정.

  이 옵션을 끄면, App 실행시, X-server 접근 허용/거부 창이 나옴.

  참고, 이 옵션이 check된 상태는, additional parameter에 -ac 를 추가한 것과 같음.


  additional parameter에는, config 창 이외의 option parameter를 넣는 곳.

  VcXsrv에는 실행 설정을 위한, 여러가지 복잡한 option parameter들이 있음.

  -screen 0 1024x768 은, screen 0를 1024x768 크기로 하라는 옵션.

  참고로, X-server의 표현법은, [IPaddr]:<display number>[.screen number]


XLaunch config, config complete

  VcXsrv config의 마지막 창입니다. 마침 을 누르면, X-server 가 시작됩니다.


  필자는, 여기서, Save configuration 하기를 추천합니다.

  X-server를 실행하기 위해, 매번 config 과정을 하는 것은 번거로운 일입니다.

  설정파일 ( *.xlaunch ) 을, windows desktop(바탕화면) 저장해 두고,

  설정파일을 double click 하면, 설정한 대로 바로 실행 되어 간편합니다.

  설정 파일을 수정하려면, 우클릭 -> 추가옵션표시 -> 편집 을 누르면 됩니다.

XLaunch config, save configuration file

  위 그림처럼, desktop 폴더(바탕화면)에, 적당한 이름으로 저장합니다.

  현재, Windows 11에서는, xlaunch 라는 file extension이 자동 추가 되지 않으므로,

  file name에 .xlaunch 까지 적어야 합니다.


  VcXsrv 처음 실행시, windows firewall 경고가 나옵니다.

XLaunch 1st run, windows firewall warning

  위 그림처럼 check 하고, access 허용을 누르면 됩니다.


XLaunch 1st run, wsl ubuntu desktop

  WSL 의 Ubuntu desktop 첫 화면입니다. 대부분 이렇게 나올 것입니다.

  현재의 desktop color 변경이 root로만 가능한 상태이기 때문이며,

  admin 권한을 가진 user계정의 권한 상승을 위해, password를 묻는 것입니다.

  계정 password를 넣으면 됩니다.


  이것으로, VcXsrv 와 WSL Ubuntu-22.04 의 XDMCP 및 X-server 실행 설정은 끝났습니다.


  이 상태에서 login시, 정상 화면은 나오지 않으며, 다음의 화면이 됩니다.

linux desktop, oh no something has gone wrong

  위 화면의 해결 및 Real Machine과 같은 Ubuntu desktop 설치 사용은,

  이 후의 글로 올립니다.


4. network, firewall trouble shoot

  Ubuntu terminal에서 udp 177 port 가 동작중인지 확인하는 법입니다.

sudo apt install net-tools
netstat -anep |grep 177
(Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all.)
udp6       0      0 :::177                  :::*                                0 19651      -

  ifconfig, netstat 같은 명령을 사용하려면, net-tools package를 설치해야 합니다.

  netstat 명령으로 177 을 찾아보면, 위와 같이 출력됩니다.

  위는 gdm3 의 경우 이며, ipv6 형태를 보여주고 있습니다. 

  위처럼, 나오지 않거나, 다른 것이 나오면, 동작하지 않는 상태입니다.


  ubuntu firewall policy 확인하는 방법입니다.

  아래는, 설정이 없는 상태, 즉, wsl 과 ubuntu desktop 설치후, 초기상태 입니다.

sudo iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

  udp 177 port와 tcp 6000~6010 port는 열려 있어야 합니다.


  windows defender firewall 확인 및 설정입니다.

windows defender firewall application setup

  VcXsrv firewall 설정을 잘못하신 경우, 위의 화면에서 재설정 할 수 있습니다.

  windows defender firewall -> 앱 또는 기능 허용 으로 들어가면 나오는 화면입니다.

  VcXsrv windows xserver 를 찾아서 모두 check 하면 됩니다.


  wsl2와 관련된 windows defender firewall 설정은, 아래 link 참조

  https://github.com/microsoft/WSL/issues/4139


  inbound, outbound 규칙으로 막혀 있는 경우도, wsl 할당된 대역과 ip를 확인하고,

  적용하여 udp 177, tcp 6000~6010 port 를 열어 주어야 합니다.

  ( windows defender firewall -> 고급설정 )


  


댓글 쓰기

0 댓글