RHEL7.x에서 XRDP 사용 시 멀티 세션 설정, 정지 및 재연결 방법
RHEL7.x의 XRDP 설치 및 사용 법은 아래 URL 참조하시기 바랍니다.
목차
멀티 세션 설정
/etc/xrdp/sesman.ini에서 사용자 wm 설정을 다음과 같이 설정
$ sudo vi /etc/xrdp/sesman.ini ... [Globals] … EnableUserWindowManager=true UserWindowManager=.vnc/startwm.sh ...
※참고: 모든 사용자에게 적용하기 위해서는 DefaultWindowManager에 지정합니다. sesman.ini 설명에는 /etc/xrdp에 대한 상대 경로가 가능하다고 되어 있지만 시스템에 따라 작동하지 않을 수 있으니 /etc/xrdp/startwm.sh라고 절대 경로를 사용하도록 합니다.
$ sudo vi /etc/xrdp/sesman.ini EnableUserWindowManager=true ;UserWindowManager=.vnc/startwm.sh ; Give in full path or relative path to /etc/xrdp DefaultWindowManager=/etc/xrdp/startwm.sh
/etc/xrdp/sesman.ini에서 Policy=UBC로 변경(UBC=> User, Bit Per Pixel, Connect, 모든 연결에 새로운 세션 생성)
$ sudo vi /etc/xrdp/sesman.ini … [Sessions] … Policy=UBC …
같은 사용자로 하는 멀티 세션 설정을 위해서 DBUS 설정이 필요함. /etc/X11/xint/Xsession 파일 상단에 다음 내용 추가
$ sudo vi /etc/X11/xinit/Xsession #!/usr/bin/bash export $(dbus-launch) ...
※ 이 명령을 위 startwm.sh에서 실행할 수도 있지만, XDMCP 등을 통해서 접속할 때에도 다중 세션을 위해 필요하니 xrdp와 공통으로 사용하는 Xsession 파일에 기술하는 것을 권장합니다.
각 세션에 재접속하기 위한 설정
위 멀티 세션 설정 1.에서 정한 경로에서 startwm.sh 파일 생성 후 다음 내용 추가
$ vi .vnc/startwm.sh (sleep 3; cp ${HOME}/.vnc/passwd ${HOME}/.vnc/sesman_passwd-${USER}@$(hostname)$(echo "$DISPLAY" | sed -E "s/.*:([0-9]{1,})\.0/:\1/"))& /etc/X11/xinit/Xsession
※ 참고
두번째 명령은 xrdp 암호를 vnc 암호로 변경하는 명령입니다. xrdp 세션 실행 시 사용자 암호를 사용하는데 vncpasswd로 생성한 명령은 8자까지만 저장되므로 사용자 암호가 8자를 넘는 경우 시차를 두지 않으면 xrdp에서 세션 생성 후 해당 세션에 바로 접근이 안됩니다.
xrdp 암호 파일인 sesman-passwd 형식의 파일은 시스템에 따라 달라질 수 있으므로 수정해야 할 수도 있습니다.
xrdp를 사용할 사용자마다 vncpasswd 명령을 사용하여 위 1.의 $HOME/.vnc/passwd 파일을 생성
$ vncpasswd Password: Verify: Would you like to enter a view-only password (y/n)? n A view-only password is not used
※ tigervnc를 비롯한 많은 vnc들은 암호를 8자까지만 사용합니다. 8자 이상 입력하여도 8자까지만 저장됩니다. 일부 vncpasswd 프로그램은 6자 이상을 요구하는 경우도 있는데, 6자 이하로 암호를 생성하고자 할 경우 'vncpasswd -f >passwd' 명령을 사용하면 가능합니다.
- Xorg 서버에 대한 멀티 세션 생성 및 재접속을 위해서 다음 과정을 추가로 진행합니다.
x11vnc 설치 및 설정
$ sudo yum install x11vnc
※ Xvfb에 대한 의존성 문제가 발생할 경우 다음 과정을 통해 문제를 해결합니다.
$ sudo yum install xorg-x11-server-common $ sudo yum install http://mirror.chpc.utah.edu/pub/centos/7.9.2009/os/x86_64/Packages/xorg-x11-server-Xvfb-1.20.4-10.el7.x86_64.rpm $ sudo yum install x11vnc
x11vnc가 $HOME/.vnc/startwm.sh에서 자동 실행되도록 설정합니다.
$ $ vi .vnc/startwm.sh cp ${HOME}/.vnc/passwd ${HOME}/.vnc/sesman_passwd-${USER}@$(hostname)$(echo "$DISPLAY" | sed -E "s/.*:([0-9]{1,})\.0/:\1/") x11vnc -repeat -display $DISPLAY -shared -forever -rfbauth $HOME/.vnc/passwd -rfbport 59`printf %02d $(expr match "$DISPLAY" '.*:\([0-9]*\).*')`& /etc/X11/xinit/Xsession
x11vnc 설명:
x11vnc는 Xorg 서버에 vnc로 접속할 수 있도록 합니다.
- 이 명령의 옵션은 Xorg 디스플레이 번호와 vnc 포트의 값을 같게 하도록 하는 내용이 포함되어 있습니다.
-repeat: (필수) 키가 연속적으로 입력이 될 수 있도록 하는 옵션입니다.
-shared: (선택) 화면 공유 옵션입니다.[선택]
-forever: (필수) vnc 세션을 닫아도 다음 연결을 위해 대기하도록 하는 옵션입니다.
-rfbauth: (필수) vnc 세션의 접속 암호로 사용할 파일을 지정합니다.
-rfbport: (필수) vnc 접속을 위해 대기하기 위한 포트입니다. 위 명령은 $DISPLAY의 값과 연동하도록 하였습니다.
새로운 Xrdp 세션 실행 및 재접속
Xrdp 세션으로 Xvnc 세션이나 Xorg 세션을 선택할 수 있습니다.
Xvnc 세션에 대한 생성 및 정지(백그라운드 실행)
xrdp 실행 후 Xvnc 세션 선택
사용자 이름과 암호(사용자 암호) 입력 후 세션 실행
터미널 등에서 echo $DISPLAY 명령 확인
ex):30.0 => 30(스크린 번호인 .0을 제외한 번호 30을 기억)- 세션 정지를 위해서는 로그 아웃을 하지 않고 Xmanager의 xrdp 윈도우를 닫습니다. 로그 아웃을 할 경우 해당 세션이 종료됩니다.
Xvnc 기존 세션에 재접속
xrdp 실행 vnc-any 세션 선택합니다
Port에 위 3.의 디스플레이 번호에 5900번을 더한 숫자 입력합니다.
ex) 30 => 5930Password에 위 '각 세션에 재접속하기 위한 설정' 2.에서 vncpasswd 명령으로 정한 암호 입력(username은 입력할 필요 없음)
Xorg 세션에 대한 생성 및 정지(백그라운드 실행)
- xrdp 실행 후 Xorg 세션 선택
사용자 이름과 암호(사용자 암호) 입력 후 세션 실행합니다.
터미널 등에서 $DISPLAY 확인합니다.
$ echo $DISPLAY :13.0 $
위 명령은 $DISPLAY가 :13.0임을 나타내고 있습니다. 이 디스플레이 번호 13과 VNC 대기 포트 13을 연동시킨 위 x11vnc 명령으로 VNC는 5913번에서 대기 상태입니다.
로그 아웃이 아닌 xrdp 종료. 로그 아웃을 선택하면 세션 자체가 종료됩니다.
Xorg 기존 세션에 재접속
xrdp 실행 vnc-any 세션 선택
Port에 위 c.의 디스플레이 번호에 5900번을 더한 숫자 입력
ex) 13 => 5913Password에 vncpasswd 명령으로 정한 암호 입력(username은 입력할 필요 없음)
정지 및 재연결을 위한 xrdp.ini 설정 예
... [Xorg] name=Xorg lib=libxup.so username=ask password=ask ip=127.0.0.1 port=-1 code=20 [Xvnc] name=Xvnc lib=libvnc.so username=ask password=ask ip=127.0.0.1 port=-1 [vnc-reconnect] name=vnc-reconnect lib=libvnc.so ip=localhost port=ask59 username=na password=ask [vnc-any] name=vnc-any lib=libvnc.so ip=ask port=ask5900 username=na password=ask #pamusername=asksame #pampassword=asksame #pamsessionmng=127.0.0.1 #delay_ms=2000 ...
※ 위 예의 vnc-reconnect는 vnc-any와 같은 세션으로 xrdp로 생성한 Xorg 세션이나 Xvnc 세션에 재접속을 좀 더 간편하게 하기 위한 세션입니다.