반응형

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 16.04 (amd64)

GPU: AMD Radeon HD 7850



우분투 16.04에서 그래픽 카드로 AMD 것을 썼더니, 그다지 매끄럽게 잘 작동하는 것 같지가 않다. 몇 년 전에 비하면 점점 좋아지고는 있지만, Nvidia 그래픽 카드에 비하면 여전히 오류가 많이 발생하는 것이 체감된다.


나는 업무 특성상 우분투 PC에 연결된 모니터 2개를 다 쓰다가 가끔 출력을 모니터 1개로만 내보내는 등의 디스플레이 설정을 자주 변경하는 편인데, 그러는 과정에서 열에 한 번 정도는 화면을 재구성하는 과정에서 화면 전체가 멈추는(freezing) 문제가 발생한다.


(Ubuntu 16.04에 있는 디스플레이 설정)


증상을 보면, 마우스는 마음대로 움직일 수 있는데, 화면 전체가 고정된 이미지처럼 꼼짝도 하지 않고 아무 것도 클릭할 수 없다. 키보드로 몇몇 단축키(창 닫기, Super 키를 눌러서 Unity 메뉴 보이기 등의 시도)를 눌러 봐도 화면 상에는 아무 변화가 일어나지 않는다.


하지만 정작 시스템은 멀쩡하게 돌고 있는 상황이다. 다른 컴퓨터에서 SSH로 접속해도 잘 되고, 웹 서버도 잘 돌고 있고, 데스크탑 화면에서 돌리는 모든 프로그램이 다 켜져 있는 것으로 잡히기 때문이다. 즉, 유일하게 화면을 '그리는(?)' 부분만 고장이 났다고 볼 수 있다.


가장 쉬운 해결 방법은 물론 그냥 전원 버튼을 직접 눌러서 강제로 재부팅하거나, 쉘이 작동한다면 sudo reboot 명령으로 재부팅하는 방법이겠지만, 기왕이면 이미 돌아가고 있는 서비스들을 유지하고 화면만 복구하는 것이 좋을 것이다.


Unity의 디스플레이 설정이 모니터 2개를 제어하는 과정에서 문제를 일으키거나, Unity (lightdm 서비스) 자체가 오류가 나서 다운되는 경우이므로 이 두 가지를 해결하는 것이 핵심이다.

내가 시도해 본 해결 방법은 다음과 같다.



1. Ctrl + Alt + F1 키를 눌러서 tty1 쉘 화면에 진입한다.

만약 이것이 뜨지 않는다면, 다른 컴퓨터에서 SSH를 통해 접속이 되는지 확인한다. SSH로도 접속이 안 되면 정말로 시스템이나 커널이 다운된 것이므로 강제로 재부팅을 해야 한다.



2. 쉘에 로그인한 뒤, 문제의 원인이 되는 디스플레이 설정 프로세스를 검색한다.


$ ps -ef | grep unity-control-center


만약 프로세스가 실행 중인 것으로 검색이 되면, 해당하는 프로세스의 PID를 가지고 kill 한다.

$ sudo kill -9 [PID of unity-control-center]



3. Ctrl + Alt + F7 키를 눌러서 다시 우분투 Unity 화면으로 돌아온다.

만약 화면이 정상적으로 반응을 한다면 고쳐진 것이다.



4. 3번까지 했는데도 여전히 화면이 아무 반응이 없으면, Ctrl + Alt + F1 키를 눌러서 다시 tty1 쉘 화면에 진입하고, 아래 명령으로 lightdm 서비스를 재시작한다.


$ sudo service lightdm restart



그러면 곧바로 우분투 데스크탑 로그인 화면이 뜰 것이다.

아쉽지만, lightdm 서비스를 재시작하게 되면 그 전에 화면에 띄워져 있던 어플리케이션은 모두 강제 종료된다.



사족)

잠깐... 이러면 재부팅과 거의 다를 바가 없잖아? ㅠㅠ

그래도 재부팅보다는 빨리 복귀할 수는 있으니 조금 더 좋은 걸로?

그리고 백그라운드 서비스 몇 개는 살아 있으니까 완전 재부팅은 아님..





반응형
블로그 이미지

Bryan_

,
반응형

OS: Ubuntu 16.04.3

기본 웹브라우저: 구글 크롬 (오픈소스인 크로미움 말고 구글이 제공하는 크롬)



위와 같은 조합에서 dropbox 앱을 설치하고 로그인을 하려고 했는데, 로그인이 계속 잘 되지 않았다. 정확하게 표현을 하면, 우분투에 처음 dropbox 앱을 설치하고 나면 dropbox ID로 로그인을 해 줘야 해서 패널에 실행 중인 dropbox 아이콘에 마우스 오른쪽 단추를 눌러서 "Log in" 메뉴를 선택을 했더니 크롬 브라우저가 실행되면서 그냥 빈 탭이 뜨는 것이었다.


아마 웹 브라우저에서 로그인을 먼저 하고, 다시 웹 브라우저가 dropbox native application에게 뭔가 신호를 보내서 인증 및 파일 공유를 시작하게 만드는 원리인 것 같은데, 웹 브라우저에서 애초에 로그인이 불가능하니 아무것도 할 수가 없었다. ㅠ_ㅠ

괜히 애꿎은 dropbox deb 파일만 몇 번씩 새로 다운받아 보고, Ubuntu Software에서 검색되는 앱으로 재설치도 해 보았지만 똑같은 문제가 계속 일어나서 더 진행할 수 없었다.


그러다가 이건 웹 브라우저에서 요청을 처리하지 못해서 생기는 문제일 것 같은 생각이 들었고, 혹시 구글 크롬 브라우저를 쓰는 상태에서 같은 문제를 겪는 사례가 있는지 찾아보니...



..어? 

정말 있다.


https://askubuntu.com/questions/689449/external-links-are-opened-as-blank-tabs-in-new-browser-window-in-chrome


알고 보니 구글 크롬 브라우저 바이너리에 옵션을 줘서 실행시키는 .desktop 파일에 문제가 있어서 그 파일을 고치면 된다고 한다. 


잠깐, 그러면 이거 dropbox 뿐만 아니라 다른 모든 앱에서 웹 브라우저에 요청을 날려도 모두 문제가 발생하는 중요한 결함이지 않나? Stackoverflow에 벌써 2년 전에 올라온 이슈인데 구글은 왜 이걸 업데이트하지 않는 것인지?



아무튼, 그래서 해결방법은,

[HOME 디렉토리]/.local/share/applications/google-chrome.desktop 파일을 열고,


Exec=/opt/google/chrome/chrome


위와 같이 되어 있는 라인을


Exec=/opt/google/chrome/chrome %U


이렇게 바꾸고 저장한다. (끝에 %U 추가)


그리고 나서 dropbox 앱의 마우스 오른쪽 단추 메뉴에서 다시 로그인을 선택하면,



그제서야 크롬 브라우저에서 로그인된 계정과 앱을 연동하는 작업을 진행할 수 있고, 파일 싱크도 그 뒤에 진행할 수 있다.





반응형
블로그 이미지

Bryan_

,
반응형

OS: Ubuntu Server 16.04.2 (amd64)


처음 우분투 서버 설치 당시의 호스트 이름(hostname)이 마음에 들지 않아서 /etc/hostname 파일에서 이름을 바꿨다.

그 뒤에 sudo를 사용하는 명령을 칠 때마다 sudo: unable to resolve host "변경된 호스트 이름" 에러 메세지가 출력이 되었다.


이것은 /etc/hostname 파일에 적힌 이름과 /etc/hosts 파일에 있는 이름이 다르기 때문이다.


/etc/hosts 파일에 보면,

127.0.0.1    localhost

127.0.1.1    원래의_호스트_이름

(이하 생략)


이런 식으로 적혀 있는데, 원래의_호스트_이름 부분을 /etc/hostname 파일과 맞춰 줘야 한다.




반응형
블로그 이미지

Bryan_

,