서버/리눅스 서버

xrdp + xorgxrdp + remotefx + glamor (우분투 18.04.x)

ㅋㅋ잠자 2021. 12. 7. 09:25
반응형

안녕하세요?

xrdp 에서 remotefx 사용과, 그래픽 가속을 위해서 방법을 시도해보고 있었는데요.

실제로는 화면자체가 안나와버리면서 문제에 봉착했습니다.

 

이 문제를 해결하면서, 그래픽 가속을 키는 방법을 알아보겠습니다.

실제로 그래픽 가속이 들어가더라도 환경이 크게 개선이 되지는 않는 것 같습니다.

 

이전 게시글

https://blog.djjproject.com/49

https://blog.djjproject.com/74

 

1. 결론적인 문제

xserver-xorg-dev 를 설치하여 컴파일을 진행하면 안되고, 실제로는 xserver-xorg-dev-hwe-18.04의 헤더로 빌드를 해야 정상적으로 동작하였습니다.

root@djjproject:~/xorgxrdp-0.2.17# apt search xorg-dev
Sorting... Done
Full Text Search... Done
xorg-dev/bionic-updates 1:7.7+19ubuntu7.1 all
  X.Org X Window System development libraries

xserver-xorg-dev/bionic-updates,bionic-security 2:1.19.6-1ubuntu4.9 amd64
  Xorg X server - development files

xserver-xorg-dev-hwe-16.04/bionic 3:14.1 amd64
  Transitional package for xserver-xorg-dev-hwe-16.04

xserver-xorg-dev-hwe-18.04/bionic-updates,bionic-security,now 2:1.20.8-2ubuntu2.2~18.04.5 amd64 [installed]
  Xorg X server - development files

 

2. xrdp 컴파일 하기

일단 의존성 패키지를 설치합니다.

root@djjproject:~# apt-get install git autoconf libtool pkg-config gcc g++ make  libssl-dev libpam0g-dev libjpeg-dev libx11-dev libxfixes-dev libxrandr-dev  flex bison libxml2-dev intltool xsltproc xutils-dev python-libxml2 g++ xutils libfuse-dev libmp3lame-dev nasm libpixman-1-dev xserver-xorg-dev-hwe-18.04

다음으로 소스를 받습니다.

https://github.com/neutrinolabs/xrdp/releases/tag/v0.9.17

root@djjproject:~# wget https://github.com/neutrinolabs/xrdp/releases/download/v0.9.17/xrdp-0.9.17.tar.gz

# 압축을 풀어줍니다.
root@djjproject:~# tar xf xrdp-0.9.17.tar.gz
root@djjproject:~# cd xrdp-0.9.17/

다음으로 컴파일 및 설치를 진행합니다.

이 패키지는 컴파일하여 설치한 패키지로 /usr/local/ 에 설치되도록 --prefix를 지정하지 않고 설치를 진행합니다. 필요하시면 --prefix=/usr 옵션을 주시길 바랍니다.

root@djjproject:~/xrdp-0.9.17# ./bootstrap
/usr/bin/autoconf
/usr/bin/automake
/usr/bin/libtoolize
/usr/bin/pkg-config
autoreconf: Entering directory `.'

root@djjproject:~/xrdp-0.9.17# ./configure --enable-fuse  --enable-rfxcodec --enable-sound --enable-jpeg
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables...

xrdp will be compiled with:

  mp3lame                 no
  opus                    no
  fdkaac                  no
  jpeg                    yes
  turbo jpeg              no
  rfxcodec                yes
  painter                 yes
  pixman                  no
  fuse                    yes
  ipv6                    no
  ipv6only                no
  vsock                   no
  auth mechanism          PAM
  rdpsndaudin             no

  development logging     no
  development streamcheck no

  strict_locations        no
  prefix                  /usr/local
  exec_prefix             ${prefix}
  libdir                  ${exec_prefix}/lib
  bindir                  ${exec_prefix}/bin
  sysconfdir              /etc

  unit tests performable  no

  CFLAGS = -g -O2 -Wall -Wwrite-strings -Werror
  LDFLAGS =

root@djjproject:~/xrdp-0.9.17# make && make install
make  all-recursive
make[1]: Entering directory '/root/xrdp-0.9.17'
Making all in common
make[2]: Entering directory '/root/xrdp-0.9.17/common'
  CC       base64.lo
  CC       fifo.lo

 

3. xorgxrdp 컴파일 하기

마찬가지로 xorgxrdp 도 소스를 받고 컴파일 및 설치를 하면 됩니다.

https://github.com/neutrinolabs/xorgxrdp/releases

root@djjproject:~# wget https://github.com/neutrinolabs/xorgxrdp/releases/download/v0.2.17/xorgxrdp-0.2.17.tar.gz

root@djjproject:~# tar xf xorgxrdp-0.2.17.tar.gz
root@djjproject:~# cd xorgxrdp-0.2.17/

glamor 옵션을 주어 컴파일합니다. 이때, glamor 는 intel 및 amd 제품에 해당하는 그래픽 가속임으로 nvidia 는 xorgxrdp-nvidia 컴파일 방법을 이용하시길 바랍니다.

 

찾아본 결과, 하기 옵션으로 컴파일 진행하면 된다고 나와 있습니다.

https://github.com/neutrinolabs/xrdp/issues/1697#issuecomment-815904627

 

하기와 같이 컴파일을 진행합니다.

root@djjproject:~/xorgxrdp-0.2.17# ./bootstrap
root@djjproject:~/xorgxrdp-0.2.17# ./configure --enable-glamor
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk

root@djjproject:~/xorgxrdp-0.2.17# make && make install
make  all-recursive
make[1]: Entering directory '/root/xorgxrdp-0.2.17'
Making all in module

모듈은 /usr/lib/xorg/modules 에 설치됩니다.

 

이제 재부팅을 한번 해줍니다.

 

4. xrdp 세션 설정하기

일단 저는 xfce4 를 설치하였습니다.

default 로 계정 홈폴더의 .xsession 파일을 읽기 때문에 하기와 같이 한줄 추가 하였습니다.

root@djjproject:~/xorgxrdp-0.2.17# echo "xfce4-session" > ~/.xsession

다음으로 하기 X서버를 아무나 실행할 수 있도록 하기 설정을 변경합니다.

root@djjproject:~/xorgxrdp-0.2.17# vi /etc/X11/Xwrapper.config

# Xwrapper.config (Debian X Window System server wrapper configuration file)
#
# This file was generated by the post-installation script of the
# xserver-xorg-legacy package using values from the debconf database.
#
# See the Xwrapper.config(5) manual page for more information.
#
# This file is automatically updated on upgrades of the xserver-xorg-legacy
# package *only* if it has not been modified since the last upgrade of that
# package.
#
# If you have edited this file but would like it to be automatically updated
# again, run the following command as root:
#   dpkg-reconfigure xserver-xorg-legacy
allowed_users=anybody

서비스를 재시작합니다.

root@djjproject:~/xorgxrdp-0.2.17# systemctl restart xrdp
root@djjproject:~/xorgxrdp-0.2.17# systemctl restart xrdp-sesman

 

5. 연결해보기

딱히 상기 옵션을 넣어서 컴파일을 진행하여도 개선이 있어 보이지는 않습니다.

실제로 xorgxrdp 에서 glamor 가 사용되는지, remotefx 가 사용되는지 아래와 같이 확인해 보았습니다.

xrdp-sesman 의 로그를 하기와 같이 살펴보면,

root@djjproject:~# /usr/local/sbin/xrdp-sesman -ns

rdpProbe:
rdpProbe: found DRMDevice xorg.conf value [/dev/dri/renderD128]
rdpProbe: found DRI3 xorg.conf value [1]
rdpPreInit:
rdpPreInit: /dev/dri/renderD128 open ok, fd 13
rdpPreInit: glamor module load ok
rdpPreInit: glamor init ok

rdpClientConProcessMsgClientInfo: got RFX capture
  cap_width 1024 cap_height 768
rdpClientConProcessMsgClientInfo: shmemid 7307264 shmemptr 0x7ff9b9bb6000 bytes 3145728
  client can not do offscreen to offscreen blits
  client can do new(color) cursor
  client can not do multimon

사용이 되는 것으로 추정되나, 동영상을 볼 정도로 드라마틱하게 개선이 되지는 않습니다.

 

간단하게 여기서 마치겠습니다.

 

감사합니다.

반응형