#22/28 [매직미러 HowTo] / 스텝 3

2020. 11. 23. 13:11IT

옵션설정하기

자동으로 꺼지지 않는 화면

  매직미러를 한동안 켜 놓게 되면 자동으로 화면이 꺼지게 됩니다. 기본 설정이 되어 있는 화면 보호 또는 전원 절약 기능이겠죠. 설정을 통하면 꺼지지 않도록 옵션을 줄 수 있을 것으로 생각을 했습니다만 안타깝게도 그 기능은 찾지를 못했습니다. 구글링을 해 보니 xscreensaver라는 애플리케이션을 설치하고 xscreensaver에서 화면이 꺼지지 않도록 설정을 하는 방법이 최선인 것 같습니다. 애플리케이션 이름을 알려드렸으니 설치는 어떻게 하는지 예상이 되시죠?

$sudo apt-get install xscreensaver

 

  설치가 완료되고 나면 시작의 기본 프로그램에 화면 보호기가 생성된 것을 볼 수 있습니다. 화면 보호기를 선택해서 모드를 “Disable Screen Saver”로 선택합니다. 이제는 라즈베리파이가 전원이 내려가지 않는한 꺼지지 않게 되었습니다.

 

 

그림 148. 화면보호기 설정



부팅될 때마다 자동으로 매직미러 실행하기

  자동으로 라즈베리파이를 시작하는 것은 단순하게 “npm run start”를 부팅할 때마다 자동 실행이 되는 스크립트에 추가를 하면 되겠구나라고 생각을 했는데 예상이 보기 좋게 틀렸습니다. 혹시 몰라서 검색을 해 본 것이 다행이었네요. 

 

  PM2라는 무중단 서비스 애플리케이션이 있었습니다. 문제가 발생해서 매직미러 애플리케이션이 종료되어도 자동으로 재 실행을 해주는 것이죠. 컴퓨터가 이유를 불문하고 재부팅 되어도 자동으로 매직미러를 실행해 줍니다. 그럼 PM2를 설치하고 어떻게 사용하는지 알아보도록 하겠습니다.

PM2의 설치는 npm 을 이용해서 다음과 같이 합니다.

$sudo npm install -g pm2

 

  npm은 자바스크립트 프로그래밍 언어를 위한 패키지 관리자로 이 패키지의 install 명령을 통해서 pm2를 설치하는데 -g 옵션은 global 옵션으로 매직미러 프로젝트 이외 다른 프로젝트에서도 사용할 수 있는 글로벌 옵션입니다.

우리가 원하는 작업을 자동 실행하기 위해서는 각 부팅시마다 pm2가 시작되어야 합니다. 

 

그림 149. pm2 startup

 

  [그림 149]와 같이 pm2 startup은 pm2가 어떤 기능들을 어떻게 사용해야하는지 간단하게 보여줍니다. Startup은 시스템이 재 부팅할 때 pm2를 자동 시작하게 해 줍니다. 매직미러를 자동으로 시작하도록 설정을 하기 위해서는 스크립트 파일을 하나 만들어줘야 합니다. 홈 폴더로 이동을 해서 mm.sh 파일을 생성해 보겠습니다. 지니를 열어 다음과 같이 mm.sh 파일을 만들어 줍니다. 

 

그림 150. mm.sh 만들기

 

  파일의 내용을 입력하고 저장 버튼을 눌러 pi 폴더에 mm.sh로 저장을 합니다. 저장을 한 후에는 터미널을 열어 Shell 파일을 실행 가능하도록 만들어줍니다.

  $cd ~

   $chmod +x mm.sh

 

  chmod는 파일의 속성을 변경하는 것이고 x는 실행을 할 수 있는 속성입니다. 따라서 이 Shell 파일은 실행을 할 수 있게 되었습니다. 이제 매직미러를 실행하기 위해서는 

 

$pm2 start mm.sh

  명령을 실행하고 난 후에 2초 정도 있다가 매직미러가 샐행이 됩니다. 별거 없다고 생각하고 Ctrl + Q를 통해서 빠져나왔는데 매직미러가 종료되고 불과 수초 이내에 다시 매직미러가 자동으로 실행됩니다. 즉 이렇게 매직미러에 예상치 못했던 어떤 문제가 발생해서 종료가 되었다고해도 자동으로 다시 시작이 된다는 것입니다.

 

  지금까지 세팅을 하면서 몇 가지 명령을 이용했습니다. pm2도 이미 pm2 start mm2.sh를 이용해서 실행을 했었고요. 이렇게 실행을 했던 것들을 pm2 시스템이 저장하기 위해서는 

 

$pm2 save

 

를 사용합니다.

pm2를 재실행할 때는 

$pm2 restart mm.sh

 

pm2를 종료하기 위해서는 

$pm2 stop mm.sh

 

를 사용하면 됩니다. 이제 서비스를 등록해 줘야합니다. mm.sh 파일은 ~ 폴더 하위에 있었기 때문에 파일을 만들고 수정할 수 있었지만 다음의 파일은 ~ 보다 상위에 있기 때문에 sudo 명령이 필요합니다.

$sudo nano /etc/systemd/system/magicmirror.service

 

를 이용해서 nano 에디터로 다음과 같이 magicmirror.service를 만들어 줍니다.

 

그림 151. Magicmirror.service

 

이제 부팅시에 매직미러를 자동실행하기 위해서는 다음의 명령을 터미널에서 입력해 줍니다.

$sudo systemctl enable magicmirror.service

 

그리고 systemctl을 이용해서 멈추기와 다시 시작하기는 각각 다음과 같습니다.

$sudo systemctl stop magicmirror.service

$sudo systemctl start magicmirror.service

 

$sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u pi --hp /home/pi

 

그리고 위와 같이 환경변수를 추가해 주어야 합니다.

중요한 것은 pm2를 이용해서 start 또는 restart 시켜서 최종 자동실행을 완성하는 것입니다.  그래서 순서대로

 

$pm2 start mm.sh

$pm2 save

 

를 해 주고 시스템을 그대로 두면 재부팅을 하거나 전원을 뺐다가 넣거나 시스템에 문제가 생기거나 하면 자동적으로 매직미러를 실행하게 됩니다.

저장이 되었다면 전원을 뺐다가 다시 켜 보시기 바랍니다. 자동을 매직미러가 실행되는지를 확인해 보시라는 말씀입니다. 

잘 동작이 된다면 동작 중에 Ctrl + Q로 빠져 나오셔서 터미널을 열고 pm2 stop mm.sh를 해 줍니다. 빠져나오자마자 바로 pm2가 매직미러를 실행하기 때문에 몇 번에 걸쳐 pm2 stop mm.sh를 입력을 시도하셔야 합니다. 쉬운 방법은 윈도우 키를 이용해서 라즈베리파이가 동작하는 중에 시작메뉴를 열어 터미널을 실행하는 것입니다. 윈도우키를 눌러 좌측 상단에 시작메뉴가 나타납니다. 그 때에 터미널을 선택하시고 pm2 stop mm.sh를 입력하시면 됩니다. 이 명령은 ~ 폴더, 즉 /home/pi에서 실행을 해 주셔야 합니다. 우리가 만든 mm.sh가 있는 폴더이니까요.  그렇지 않으면 pm2 stop ~/mm.sh와 같이 해 주시면 됩니다. 

stop이 되었다면 바로 pm2 save를 통해서 저장을 해 주시면 앞으로는 부팅이 될 때 자동으로 매직미러 실행이 되지 않습니다.

 

  $pm2 stop ~/mm.sh

  $pm2 save

 

 다시 자동 시작을 하실 때는 터미널에

  $pm2 restart ~/mm.sh

  $pm2 save

와 같이 해 주시면 되겠습니다.

 

자신의 아이디어를 입혀보세요 

  총 4단계의 프로젝트의 과정 중에서 3단계가 끝이 났습니다. 제일 어렵다고 생각한 단계였고 3단계를 잘 하셨다면 4단계는 쉽게 진행하실 수 있을 것입니다.

 

  항상 매직미러를 실행하도록 앞서 세팅을 했습니다. 매직미러는 이제 화면에 배경화면과 함께 다양한 정보들을 표시할 수 있습니다. 화면에 보여지는 다양한 정보들이 사진에 따라 보이지 않는 현상도 앞서서 각 모듈의 배경색을 넣고 정보를 표시하는 글씨를 검은 색으로 표시해서 정보가 잘 보여지도록 스타일 시트(CSS)를 이용해서 변경을 해 보았었습니다. 여기까지 완성했다면 거울로 사용을 하는 것이 아니라 포토 앨범으로 사용해도 훌륭합니다. 작은 모니터만 연결을 해 주시고 라즈베리파이를 적당히 모니터 뒷 쪽에 숨겨주신다면 포토 앨범 기능만을 가진 매직미러가 탄생되는 것입니다. 

필요한 정보는 보여줘도 되고 사진에 집중하고 싶다면 사진만 보여줘도 됩니다. 

 

  다음 2단계에서는 거리를 측정할 수 있는 센서를 매직미러에게 달아 주려고 합니다. 이 거리를 측정하는 센서의 목적은 매직미러가 거울 기능도 가질 때를 대비해서 사용자가 정면에서 1미터 정도 가까워지면 사진을 보여주는 모듈을 숨기고 멀어지면 다시 보여주도록 하려고 합니다. 1미터 이상 멀어지면 날씨와 이메일 등의 정보를 보기 어려우니 사진이외에 다른 것들은 표시하지 않으려고 합니다.  

 

 

반응형