목차
XRDP 멀티 세션 사용하기를 설정한 경우 이전 세션의 디스플레이 번호를 알아야 해당 세션에 재접속할 수 있습니다. 하지만 XRDP 기본적으로는 이러한 기능을 지원하지 않습니다.
Xrdp는 로고 이미지를 사용자가 설정할 수 있는 기능이 있습니다. 이 로고 이미지를 활용하여 이전 세션의 목록을 확인할 수 있는 설정을 해 보겠습니다.
준비
- XRDP 설치 및 실행. XRDP를 이용한 중단 없는 작업 참조
- XRDP 멀티 세션 설정. XRDP를 이용한 중단 없는 작업 참조
- netppm 패키지(ppmtobmp, ppmlabel 유틸리티)
유틸리티 설치 및 설정
netppm 설치
$ which ppmlabel || sudo apt install netppm
사용자 로그 이미지 준비
사용자 회사의 로고나 기타 사용자 원하는 로고 이미지를 사용할 수 있습니다. 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
세션 정보를 기록할 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 계정에 설정한 암호를 사용하여야 합니다.