반응형

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_

,
반응형
  • Client OS: Ubuntu 16.04
  • FreeRDP (xfreerdp) version: 2.0.0-dev2 (3c4385e)
  • Server OS: Windows 10 (version 1709, build 16299.309)



xfreerdp를 이용해서 리눅스에서 원격 윈도우 머신에 RDP (Remote Desktop Protocol) 연결을 해서 쓰고 있었는데, 2018년 들어서 윈도우10이 업데이트되고 나서는 아래와 같이 오류가 나면서 접속이 되지 않았다.



[19:43:47:999] [2320:2321] [INFO][com.freerdp.client.common.cmdline] - loading channelEx cliprdr
[19:43:47:033] [2320:2321] [ERROR][com.freerdp.core] - freerdp_set_last_error ERRCONNECT_PASSWORD_CERTAINLY_EXPIRED [0x0002000F]
[19:43:47:033] [2320:2321] [ERROR][com.freerdp.core.transport] - BIO_read returned an error: error:14094438:SSL routines:ssl3_read_bytes:tlsv1 alert internal error


확인해 보니, 윈도우 10에서 네트워크 수준 인증(Network Leval Authentication; NLA)을 사용하여 원격 접속을 허용하는 옵션과 연관된 듯 했다. 비슷한 문제를 겪는 사람들의 의견을 봤을 때, NLA 옵션을 끄니까 다시 되더라는 사람도 있었고, xfreerdp를 실행할 때 보안 옵션(/sec)으로 nla를 지정해 주었더니 되더라는 사람도 있었다.




*네트워크 수준 인증 (NLA) 끄는 방법:

  1. 시작버튼 누르고 "제어판"이라고 입력해서 제어판(윈도우10 설정 말고) 실행
  2. 시스템 선택
  3. 좌측에 "원격 설정" 선택
  4. 하단 부분에 "이 컴퓨터에 대한 원격 연결 허용" 아래에 있는 체크박스 해제 (네트워크 수준 인증을 사용하여 원격 데스크톱을 실행하는 컴퓨터에서만 연결 허용 (권장))



*xfreerdp에서 보안 옵션 지정하는 방법:

커맨드 라인에서 실행할 때 /sec 옵션을 추가해 준다.

  • 네트워크 수준 인증을 사용할 경우, /sec:nla
  • 그렇지 않을 경우, /sec:tls



나는 NLA 옵션을 끄고, xfreerdp를 실행할 때 /sec:tls 옵션을 추가했더니 문제 없이 접속이 잘 되었다.




<참고자료>

https://github.com/FreeRDP/FreeRDP/issues/4449#issuecomment-372979253



반응형
블로그 이미지

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_

,
반응형

OS: 윈도우 10 (윈도우7, 8, 8.1 모두 해당될 것으로 예상됨)


윈도우에서 원격 데스크탑 연결(RDP)을 통한 접근을 어디서 누가 언제 했었는지 알고 싶을 때, 이벤트 로그에서 확인할 수 있다.

이벤트 로그를 볼 수 있는 이벤트 뷰어는 시작-실행에서 이벤트 뷰어(eventvwr)를 입력해서 실행할 수 있다.

RDP 관련 로그는 응용 프로그램 및 서비스 > Microsoft > Windows > TerminalServices-LocalSessionManager > Operational 을 선택한다.


하나씩 항목을 눌러보면서 IP주소는 확인이 안되는 줄 알았는데, 알고보니 하단의 이벤트 정보를 보여주는 창 중에서 "일반" 바로 밑의 창에서 확인할 수 있었다. 가려져 있지만, 그림 1에서 빨간 네모칸 영역에 해당하는 부분을 키우거나 스크롤 단추를 눌러서 아래쪽을 보면 접속한 클라이언트의 IP 주소가 보인다.



(그림 1. 이벤트 뷰어에서 RDP 로그에 대한 상세 화면)






반응형
블로그 이미지

Bryan_

,
반응형

Target: 윈도우 10 (Windows 10)

OS: Ubuntu 14.04.2 LTS (amd64)


이전 포스팅(http://skylit.tistory.com/177)에서, 원격 데스크톱에 접속한 후에 글꼴을 다듬는 방법을 설명하였으나, 이 방법은 매번 접속할 때마다 설정을 새로 해줘야 하는 번거로움이 있었다. 


리눅스에서 FreeRDP (콘솔에서 xfreerdp) 사용 시, 글꼴 다듬기 옵션을 자동으로 켜려면 /fonts 를 명령줄에 추가하면 된다.


참고로 사용한 FreeRDP 버전은 1.1.0-beta-2013071101 이다.

(FreeRDP 소스코드에서 설치하는 방법:

http://skylit.tistory.com/158 )



$xfreerdp /u:사용자계정 /v:원격컴퓨터주소:포트번호 /fonts



반응형
블로그 이미지

Bryan_

,