XRDP 세션의 목록을 보기 위한 설정

목차


XRDP 멀티 세션 사용하기를 설정한 경우 이전 세션의 디스플레이 번호를 알아야 해당 세션에 재접속할 수 있습니다. 하지만 XRDP 기본적으로는 이러한 기능을 지원하지 않습니다.

Xrdp는 로고 이미지를 사용자가 설정할 수 있는 기능이 있습니다. 이 로고 이미지를 활용하여 이전 세션의 목록을 확인할 수 있는 설정을 해 보겠습니다.


준비

유틸리티 설치 및 설정

  1. netppm  설치

    $ which ppmlabel || sudo apt install netppm
  2. 사용자 로그 이미지 준비
    사용자 회사의 로고나 기타 사용자 원하는 로고 이미지를 사용할 수 있습니다. 340x180 크기의 bmp 파일을 준비하여 /usr/share/xrdp/xrdp_logo.bmp 파일에 복사합니다.
    따로 준비된 사용자 로고 이미지가 없다면 다음 명령으로 기본 xrdp_logo.bmp(240x140) 파일의 크기를 조정할 수 있습니다.

    $ cd /usr/share/xrdp
    $ sudo bash
    # mv xrdp_logo.bmp xrdp_logo_ori.bmp;
    # ppmmake white 340 180 >xrdp_logo_bg.ppm;
    # bmptoppm xrdp_logo_ori.bmp |pnmcut 0 0 132 140 - | pnmcomp -align=left -valign=middle - xrdp_logo_bg.ppm | ppmtobmp - > xrdp_logo.bmp;
    # rm -f xrdp_logo_bg.ppm
    $ chmod a+w xrdp_logo.bmp
  3. 세션 정보를 기록할 PPM 파일 생성

    $ sudo chmod a+w /usr/share/xrdp/xrdp_logo.bmp # => 일반 사용자가 수정할 수 있어야 하므로  +w 권한을 설정합니다.
    $ sudo bmptoppm /usr/share/xrdp/xrdp_logo.bmp > /usr/share/xrdp/xrdp_logo.ppm

XRDP  설정

/etc/xrdp/xrdp.ini 수정

더 많은 세션 정보를 표시하기 위해 로고 이미지 출력 위치를 조정하는 작업입니다.

$ sudo vi /etc/xrdp/xrdp.ini
...
;ls_logo_x_pos=55
ls_logo_x_pos=5
;ls_logo_y_pos=50
ls_logo_y_pos=25
...

/etc/xrdp/startwm.sh 수정

세션을 시작할 때와 종료할 때 현재 실행 중인 xrdp 세션의 정보를 xrdp_logo.bmp 파일에 기록합니다.

#!/bin/sh
...


# 기존 Xsession 실행 환경
#if [ -f "$HOME/.vnc/startwm.sh" ] && [ -x "$HOME/.vnc/startwm.sh" ]; then
#  $HOME/.vnc/startwm.sh
#else
#  /bin/sh /etc/X11/Xsession
#fi

#########################################################
# To get xrdp session list and draw it to xrdp_logo.bmp #
#########################################################
func_write_xrdp_sessions() {
  (sleep $1; sessions=`echo "DISP Type User"; ps -aux |grep -E 'Xvnc|Xorg' |grep -v grep | while read -r session
  do
    echo ${session} | awk '{
      display="N/A"
      size="N/A"
      depth="N/A"
      user=$1
      for(i=1; i<=NF; i++) {
        if ( match($i, "(Xorg|Xvnc)") ){
          gsub(".*/", "", $i)
          type=$i
          i++
          display=$i
          gsub("[:0-9\.]", "", $i) # => display가 숫자, :, .으로만 이루어져야 함.
          if($i != "") {
            display=""
          }
        } else if(match($i, "geometry")){
          i++
          size=$i
        } else if(match($i, "depth")){
          i++
          depth=$i
        }
      }
      if (display !=""){
        printf "%-4s %-4s %s\n", display, type, user
      }
    }';
  done;`
  ppmlabel -colour blue -x 150 -y 25 -size 11 -text "Xrdp Sessions" /usr/share/xrdp/xrdp_logo.ppm | ppmlabel -colour blue -x 160 -y 45 -size 9 -text "${sessions}" - |ppmtobmp - >/usr/share/xrdp/xrdp_logo.bmp)&
}
func_write_xrdp_sessions 0

if [ -f "$HOME/.vnc/startwm.sh" ] && [ -x "$HOME/.vnc/startwm.sh" ]; then
  $HOME/.vnc/startwm.sh
else
  /bin/sh /etc/X11/Xsession #=> RHEL의 경우 Xsession 파일은 /etc/X11/xinit/Xsession.
fi

func_write_xrdp_sessions 5 #=> X 서버가 종료되는 시간이 필요.

xrdp 재시작

xrdp.ini가 수정되었으므로 xrdp 서비스를 재시작해야 합니다.

$ sudo systemctl restart xrdp


XRDP 세션 실행

여러 개의 세션을 실행한 경우 아래와 같이 세션 종류와 구동 중인 포트에 대한 정보를 확인할 수 있습니다.


XRDP 세션 재접속

목록에 있는 test 계정의 Xvnc 세션에 접속하기 위해 포트에 5913을 입력합니다.

암호는 'XRDP 사용 시 멀티 세션 설정, 정지 및 재연결 방법'에서 vncpasswd 명령으로 test 계정에 설정한 암호를 사용하여야 합니다.