반응형

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 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)


우분투 서버 16.04를 설치하고 나면 기본으로 python3가 같이 설치되어 있는데, 쉘에서 python과 pip (파이썬 패키지 설치 도구)는 작동하지 않고 python3, pip3만 작동한다.


Bash 쉘을 쓸 경우, alias로 등록하는 것이 가장 간단하다.

~/.bash_aliases 파일을 만들고, 아래 내용을 작성한다.


alias python=python3

alias pip=pip3

alias sudo='sudo '


위와 같이 작성하여 저장하고 bash shell에 다시 로그인하면 된다.

마지막에 sudo를 추가하는 이유는 저게 없이 sudo pip install ... 명령을 치면 pip를 alias로 인식하지 못하기 때문이다.



반응형
블로그 이미지

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_

,