반응형

OS: Ubuntu 16.04.4 (amd64)


우분투에서 XRDP 서비스를 켜 두고, 윈도우 노트북에서 원격 접속을 하다 보면, 가끔 알 수 없는 문제로 인해 XRDP 서비스가 다운되고 (즉, crash) 이후로는 서비스 재시작이 안 돼서 원격 데스크탑을 쓰지 못하는 경우가 가끔 있다.

보통은 서비스 재시작 ($ sudo service xrdp restart)을 통해 문제가 해결되어야 한다. 하지만 만약 서비스 재시작이 계속 안 된다면, 기존에 실행 중이던 XRDP 서비스가 예기치 않게 죽으면서 자신이 여전히 살아있는 것처럼 정보를 남겨 둬서 그럴 가능성이 높다.

즉, 이미 죽어버린 프로세스의 PID 정보가 살아있는 것처럼 관련 정보 파일이 남겨지면서 (아마 정상적으로 종료가 되었다면 그런 PID 정보 파일들을 삭제를 했을 텐데 crash 되면서 PID 정보를 삭제를 못한 것), 새로 시작되는 XRDP 프로세스는 이미 다른 XRDP 서비스가 실행 중인 것으로 간주, listen을 하지 않고 멈추는 것으로 예상된다.


문제를 해결하려면, XRDP 서비스들과 관련해서 파일로 남겨진 PID 정보를 삭제하고 서비스를 시작한다.


<해결 방법>

1. /var/run/xrdp 디렉토리에서 XRDP 관련 서비스들의 process ID를 확인한다.

$ cat /var/run/xrdp/xrdp-sesman.pid
$ cat /var/run/xrdp/xrdp.pid 


2. 위에서 출력된 숫자(프로세스 ID)를 사용하여 프로세스를 kill한다.

$ sudo kill -9 [PID]


3. /var/run/xrdp/ 디렉토리 내의 .pid 파일 2개를 모두 삭제한다.

$ sudo rm /var/run/xrdp/*.pid 


4. XRDP 서비스를 재시작한다.

$ sudo systemctl enable xrdp.service    <-- 이건 안 해도 되는 것 같기도 하다.

$ sudo service xrdp restart


위와 같이 작업한 후에 XRDP에서 설정한 포트 번호가 Listen 상태로 뜨면 정상 작동하는 것이다.
XRDP에서 포트 번호를 따로 변경해 주지 않았다면 기본적으로 listen하는 포트 번호는 3389이다.

$ netstat -nap | grep 3389

tcp        0      0 0.0.0.0:3389           0.0.0.0:*               LISTEN      18357/xrdp



반응형
블로그 이미지

Bryan_

,
반응형

OS: Ubuntu Server 16.04


연구실 서버에 있는 40개의 CPU 코어를 쪼개서 쓰기 위해 우분투 서버 위에 qemu-kvm을 설치하고, 가상 머신(VM)들을 관리하기 위해서 virt-manager라는 GUI 프로그램도 사용하고 있는데, VM 개수가 10개가 넘어가자 작은 문제가 하나 생겼다.


연구실 구성원 모두가 터미널(shell) 환경에서만 작업하는 게 아니라서 호스트 서버의 GUI 화면에도 원격으로 접속할 수 있도록 XRDP와 xfce4-session을 설치해 두었는데, RDP로 접속하면 호스트 서버의 GUI 화면 (xfce4-session에 연결되는 VNC 서버)에 대한 기본 포트는 5910으로 되어 있다.


참고로 XRDP에서 디폴트 설정을 그대로 쓰면 로그인할 때마다 포트번호 -1 값으로 새로운 세션을 새로 실행하게 되고, 그러면 5910번 포트에서 숫자가 1씩 커지면서 세션이 하나씩 새로 생성이 된다.

이전에 이미 만들어 둔 세션에 다시 접속하려면 포트번호에 5910을 입력하면 되는데 (참고: XRDP 기존 세션 재활용하기), 어느 날 포트번호 5910을 입력했더니, 호스트 서버의 화면 대신 내가 예전에 생성했던 VM의 내부 화면이 나타났다.


왜 그런가 해서 보니, qemu-kvm에서 실행 중인 VM의 개수가 10개를 넘어가 있어서 그런 거였다.

(16개 중에 12개의 VM이 실행중... 각각 localhost로 VNC 서버를 돌린다. 즉, 5900~5911까지의 포트가 모두 VM의 화면으로 쓰이는 상태다.)


QEMU에서 VM을 하나 생성하면 해당 VM의 화면을 보여주기 위해서 VM마다 자체적으로 VNC 서버를 실행하고, 그 VNC 화면마다 포트번호가 하나씩 할당이 되는데, 그게 5900번부터 시작한다. 그런데 qemu가 실행하는 VM의 개수가 10개를 넘으면, 10번째로 실행되는 VM은 가상 머신의 화면 출력을 위해 포트번호 5910을 할당받게 된다.


다만, 여기에 호스트 서버의 xfce4 세션이 먼저 실행이 되고 포트번호 5910을 미리 할당받고 있는 상태였으면 VM의 화면이 5910 포트를 할당받는 일은 없었을 것이다. 그러나 호스트 서버를 재부팅시키고 나서, 자동으로 시작하도록 설정되어 있는 모든 VM들이 자동으로 부팅이 먼저 되고, 호스트 서버의 xfce4 세션은 사용자가 명시적으로 실행시켜 주지 않으 5910번 포트가 비어 있게 되므로 10번째로 자동 시작되는 VM이 자연스럽게 5910을 할당받게 된다. 그리고 부팅 직후에 자동으로 같이 부팅되는 VM의 개수가 10개를 넘어간다면, xfce4 세션을 qemu-kvm 서비스보다도 먼저 부팅 직후에 자동으로 실행돼서 세션 하나를 만들어주도록 설정하지 않는 이상 VM 중의 하나가 5910 포트를 점유하게 된다.


결국 원격 데스크톱 연결 앱으로 서버에 접속할 때 맨 처음 나타나는 XRDP 세션 로그인 화면(맨 위의 화면)에서 5911, 5912, ... 이렇게 하나씩 포트번호를 바꿔 가며 접속을 시도해 보니, 호스트 서버를 위한 GUI 세션은 5915번에 할당되어 있었다. (그 당시에 VM 15개가 실행중이었음) 이 상황을 연구실 학생들과 공유를 해야 하는데... 설명하기가 쉽지 않다. ㅜㅜ


여러가지 측면에서 리눅스 서버를 공동으로 관리할 때의 불편함이 있는 것 같다. 그냥 후배들이 똑같은 문제에 봉착하면 그 때 그냥 나와 같은 과정을 거쳐서 XRDP, xfce4-session, qemu-kvm 서비스 및 데몬들이 5900부터 시작하는 포트 번호를 할당받고 반대로 5910 포트를 통해 접근을 시도하면서 서로 어떤 영향을 끼치는지 직접 겪어 보는 수밖에 없는 듯 하다.

회사라면 이런 일을 System administrator가 대신 해 주지만, 연구실은 그렇지 않으니까... 매번 동일한 문제가 생기면 똑같이 겪어 보고 배우는 것이 각자의 이해를 넓히는 측면에서도 바람직한 것이 아닐까 하는 생각도 든다.



반응형
블로그 이미지

Bryan_

,
반응형

OS: Ubuntu 14.04



Xrdp를 이용해서 xfce4 세션을 사용하는 원격 데스크탑에 로그인하는 것은 잘 되는데, 사용이 끝나고 나서 로그아웃을 하려고 하면 상단의 작업표시줄 패널과 창, 아이콘들만 사라지고 바탕화면이 그대로 남은 채 더이상 진행되지 못하는 문제가 있다.



그림 1. xfce4에서 우측 상단의 사용자 계정명을 눌러서 나오는 로그아웃 메뉴를 통해서

위의 화면에서 Log Out 버튼을 눌러도 로그아웃이 되지 않는 문제가 있다.



이 문제에 대해서 여러 사용자들이 우분투 커뮤니티를 비롯한 여러 곳에 질문을 올렸지만, 어느 곳에서도 근본적인 해결책을 찾을 수 없었다. xfce4 개발자가 해결해 주어야 하는데, 몇 년째 별다른 진전이 없는 것 같다. ㅠㅠ


만약 xfce4 세션을 완전히 로그아웃시키지 못하면 결국 위와 같이 세션 하나가 바탕화면만 남겨진 먹통 상태로 남겨진 채 메모리와 포트 번호(XRDP 설정에 따라 다르지만 보통 5910부터 시작)를 더이상 사용하지 못하게 되고, 다음에 다시 원격 데스크탑을 쓰려면 새로운 포트 번호를 할당받는 새로운 세션을 만들어야만 한다.


좋은 방법은 아니지만, 아예 세션을 강제로 종료시키는 방법으로 해결할 수는 있다.

$ killall --user $USER -TERM


또는 직접 사용자 계정명을 지정해도 된다. (예: odroid)

$ killall --user odroid -TERM



주의사항:

위와 같이 하면, xfce4 뿐만 아니라 해당 사용자 계정으로 켜져 있는 터미널 세션까지 모두 다 종료되어 버린그래도 터미널 세션은 다시 ssh로 접속하면 되므로원격 머신을 재부팅하기는 싫고 좀비 상태로 남은 xfce4 세션을 정리하고 싶다면 이 방법이 그나마 효과적일 것이다.



<참고자료>

[1] https://bbs.archlinux.org/viewtopic.php?id=159958



반응형
블로그 이미지

Bryan_

,
반응형

Host OS: Ubuntu 14.04 Desktop (amd64)

Guest OS: Windows 10 (64-bit)


우분투 머신에 원격 접속을 하게 되면, XRDP를 쓰든 VNC Server 종류를 쓰든 상관없이 키보드 키의 연속 입력이 안 되는 문제를 경험한다. 사실 문제가 있어어 안 되는 것이 아니고, 의도적으로 연속 키 입력을 꺼 놓아서 그렇다.


콘솔을 제외하고 (콘솔은 어차피 로컬 게스트 머신의 접속 프로그램에 의해 좌우되기 때문에) 리눅스 머신에 그래픽 기반의 원격 접속을 하면, 내부적으로는 VNC가 가장 밑단에서 작동하기 때문에 VNC에서 연속 키 입력 옵션이 꺼져 있으면 RDP 클라이언트에서 별 짓을 다 해도 소용없다. 확인해 보니 VNC에서 옵션으로 켜고 끌 수 있다. [1]


VNC 서버 입장에서 연속 키 입력을 켜는 방법:

$ x11vnc -R repeat


반대로 연속 키 입력 기능을 끄는 방법:

$ x11vnc -R norepeat



*추가

참고로 우분투에 x11vnc 패키지를 설치하고 나면 시스템 부팅 시 자동실행 되는데, 이 때 키입력 연속 설정을 켜려면 /etc/init/x11vnc.conf 파일을 고쳐야 한다.


/etc/init/x11vnc.conf 파일

start on login-session-start

script

x11vnc -xkb -noxrecord -noxfixes -noxdamage -R repeat -display :0 -auth /var/run/lightdm/root/:0 -forever -bg -o /var/log/x11vnc.log -rfbauth /etc/x11vnc.pass -rfbport 5900 

end script



다만 버그가 있는데, 괄호 문자 '(' 또는 ')'를 입력하면 연속으로 입력하지 않는데도 계속 입력되는 현상이 있다. 가만히 두면 계속 타이핑되기 때문에 백스페이스 키를 눌러서 중단시켜야 한다. 전체적으로 연속 키 입력이 안되는 것보다는 약간의 불편을 감수하고 쓰는 편이 나을 것 같다.

<2016.05.24 수정> 괄호 문자가 반복 입력되는 버그는 다음에 재접속할 때는 또 발생하지 않았다. 그때그때 다른 것 같은데 원인은 아직 모르겠다.




<참고자료>

[1] https://lighttomorrow.wordpress.com/2015/04/16/vnc-server-setup-guide-for-ubuntu/


반응형
블로그 이미지

Bryan_

,
반응형

OS: Ubuntu 14.04 (desktop, server 모두) amd64



우분투(또는 리눅스) 머신에 원격접속할 때 xrdp를 설치하면 RDP 클라이언트(e.g. 윈도우의 원격 데스크탑 연결)를 쓸 수 있어서 좋지만, 세부 설정을 수정하지 않고 그대로 둘 경우 다음과 같은 두 가지 문제가 발생한다.


  1. (우분투만 해당) 검은색 또는 회색 화면만 나온 채 가만히 있거나, 그 상태로 잠시 있다가 연결이 끊어짐.
  2. 매번 세션이 새로 생성돼서 이전의 작업 환경에 접근할 수 없음.


1번의 경우에는 우분투 기본 세션인 Unity에 버그가 있고 아직 해결되지 않아서 그렇다.

답답하지만 xfce4와 같은 다른 세션을 설치해서 써야 한다. [1]



이 글에서 해결할 문제는 2번이다. 사실 이것은 xrdp 기본 설정이 불친절(?)해서 기존 세션을 재활용하기 위한 옵션을 디폴트에서 볼 수 없기 때문이다.


즉, 원격 세션에서 로그아웃을 하지 않으면 매번 rdp로 로그인할 때마다 새로운 세션이 쌓여서 쓸데없이 메모리를 차지하게 된다. 그 뿐만 아니라 각 세션마다 실행시켜 둔 어플리케이션들도 다 그대로 살아있게 되므로 낭비도 이런 낭비가 없다.


물론 xrdp 설정에서 최대 동시 세션 수를 기본값 10으로 제한해 두기는 했다. 따라서 윈도우 rdp 클라이언트로 리눅스 머신에 10번 넘게 접속해서 세션을 만들기만 하면, 기존의 10개 중 가장 오래 된 세션이 고아 프로세스가 되거나, 아예 에러가 나면서 더이상 연결이 안되는 문제가 발생한다. 이런 문제를 방지한답시고 최대 세션 수를 100개(...)로 늘리라는 조언을 인터넷에서 심심찮게 볼 수 있는데, 그다지 좋은 방법이 아닌 것 같다.


물론 기존 세션을 쓰기 위한 옵션이라고 해봤자 결국 "포트 번호"를 입력하는 것 외에는 아무 것도 없다. ㅡㅡ; 즉, 기존 세션이 각자 포트 번호 하나씩 할당되어 있으니까 포트 번호만 외우고 있으면 나중에 다시 접근할 수 있다. 지금 생성돼 있는 세션과 포트 번호를 리스트로 보여주기라도 하면 좋을 텐데... 뭐 오픈소스니까 직접 그 기능을 코드로 만들어 넣지 않는 이상 너무 많은 것을 기대하지는 말자... ㅜㅜ





<XRDP 기존 세션 재활용 방법>


1. /etc/xrdp/xrdp.ini 파일을 열고, [xrdp1]에 해당되는 항목을 아래와 같이 고친다.


...

[xrdp1]

name=sesman-Xvnc

lib=libvnc.so

username=ask

password=ask

ip=127.0.0.1

port=ask5910

...


원래는 port 부분이 -1로 되어 있고, 로그인 창에서 보이지 않게 되어 있다. 하지만 ask를 추가함으로써 항상 접속할 때마다 포트 번호를 입력할 수 있도록 바꿨고, 그 뒤에는 5910이라는 포트 번호가 기본적으로 입력되어 있도록 설정했다.



2. xrdp 서비스를 재시작한다.


$ sudo service xrdp restart



3. 원격 데스크탑 연결(RDP) 클라이언트로 접속하면, 아래 그림과 같은 로그인 화면이 뜰 것이다.

원래 없던 포트 번호가 표시됨을 알 수 있다.



만약 리눅스 머신을 부팅한 직후 맨 처음 접속하는 경우거나, 기존에 생성된 세션의 포트 번호를 모르겠는 경우에는 아래와 같이 포트 번호를 "-1"로 고쳐서 로그인한다.


(새로운 세션을 만들 때에는 포트에 -1을 입력한다)


새로운 세션이 만들어질 때, 로그 메세지를 자세히 보면 세션이 어느 포트 번호에 할당되는지 알 수 있다. 해당 포트 번호를 기억해 둔다.

(새로운 세션이 포트 번호 5910번에 할당되었음을 알 수 있다.)


원하는 작업을 수행하고, 로그아웃하지 않은 채로 RDP 클라이언트를 종료한다.



4. RDP 클라이언트로 다시 리눅스 서버에 접속한다.

이번에는 로그인할 때 port 부분에 이전에 접속했을 때 할당된 포트 번호를 쓰고 로그인한다. 그러면 방금 전에 작업하던 세션을 그대로 볼 수 있다.





필자의 경우는 리눅스에 RDP로 접속할 때에도 윈도우 서버에 원격접속 하듯이 세션을 여러 개 만들지 않기 때문에, 부팅 직후 맨 처음에 세션을 만들 때 -1로 바꾸는 수고만 하고, 그 뒤에는 항상 맨 처음 시도하는 포트번호가 5910이기 때문에 기본값으로 5910번 포트가 입력되어 있도록 설정해 두었다.


현재로써는 앞으로 쓰기에 이게 가장 손이 덜 가는 설정이라고 생각한다. 하지만 xrdp가 조금 더 친절해져서 리스트 형태로 나열된 기존 세션 중 하나를 눈으로 보고 선택해서 로그인할 수 있도록 개선되면 정말 좋겠다.




<참고자료>

[1] http://yujuwon.tistory.com/entry/%EC%9A%B0%EB%B6%84%ED%88%AC-%EC%9B%90%EA%B2%A9-%EC%A0%91%EC%86%8D


반응형
블로그 이미지

Bryan_

,