박민혀기

Raspberry Pi 부팅 후 자동 실행 AutoStart(2024년 12월 03일) 본문

Raspiberry Pi

Raspberry Pi 부팅 후 자동 실행 AutoStart(2024년 12월 03일)

박민혀기 2024. 12. 3. 16:24

보통 납품을 하게 되면 부팅 완료 후 프로그램 자동을 실행되게 해야 된다. (임베디드 시스템처럼)

사실 2년도 전에 같은 목적의 포스팅을 업로드한 적이 있었다. 내 첫 일감이었던 비전 검사기에 적용됐던 방법이다.

그 방법이 올해 초부터 삐걱거리더니 이제는 아예 안 된다...(RPi CM4, RPi 4 Model B에서 확인)

https://forthe-future.tistory.com/10

 

리눅스 부팅 후 자동 실행 AUTOSTART(2022년 10월 24일)

/etc/rc.local 파일 등록에도 실행되지 않음 -> autostart로 변경 후 정상 작동(아래 포스팅)GUI가 필요한 프로그램의 경우 X 서버가 시작된 후에 실행되어야 하므로 autostart 방법이 적합$ sudo nano /etc/xdg/lx

forthe-future.tistory.com

 

어떤 이유에선지 컴파일된 실행 파일을 비롯한 쉘 프로그램, 파이썬 등 아무것도 안 된다.

파일이 좀 변경된 것 같기도 하고.. 뭐가 뭔지 모르겠다.  자세하게 기록 좀 해둘걸

폴더가 원래 두 개 였나?

LXDE는 시스템, LXDE-pi는 사용자라고 했던 것 같기도 하고 아니고 헷갈린다.

 

라즈베리파이에서 부팅 후 프로그램 자동 실행은 크게 두 가지 방법이 있다.

  • Autostart
  • rc.local

간단하게 설명하자면 Autostart는 GUI 환경에서 실행되는 방식이고, rc.local 방식은 백그라운드에서 실행되는 방식이다.

사실 백그라운드에서 실행되는 방식이 하나 더 있는데 그건 생각이 안 난다..

 

나는 기본적으로 OpenCV와 Uart 통신 확인을 위해서 GUI에서 실행되어야 한다.

따라서 Autostart를 사용하는 방법을 소개하려고 한다.

 

이전 포스팅 방식은 아예 무시하고 진행하면 된다.

기존에 사용되었던 아래 폴더/파일은 사용 안 함!!
$ sudo nano /etc/xdg/lxsession/LXDE-pi/autostart

 

구현 가이드

Autostart 파일 생성

//mkdir -p 옵션은 부모 디렉토리가 없을 경우 생성
$ sudo mkdir -p ~/.config/autostart
$ sudo cd ~/.config/autostart

새로운 Autostart 파일 생성

nano start_script.desktop

Autostart 파일 내용 작성

다음과 같이 작성하면 된다.

[Desktop Entry]
Type=Application
Name=Start Script
Exec=lxterminal -e "/home/vck2/Kart_Vision/build/Vision_Lidar"

여기서 중요한 것은 Exec인데 Exec는 실행할 프로그램이나 스크립트를 지정하는 키이다.

프로그램을 실행하는 명령어를 정의하며, exec는 키의 이름으로, 리눅스 명령어 exec와는 별개의 역할을 한다.

그중 터미널에서 실행시키려면 lxterminal 명령을 활용해서 실행시켜야 한다. (lxterminal은 기본적으로 설치되어 있지만 혹시 모르니 터미널 창에서 lxterminal 명령을 실행시켜 보는 게 꿀팁)

 

아래 코드는 GPT가 알려준 내용인데 필요없는 부분을 제거하고 내가 필요한 부분만 수정하여 사용하였다.

지피티꺼 참고만!!

#GPT는 이렇게 알려줬다#
[Desktop Entry]
Type=Application
Name=Start Script
Exec=/path/to/start.sh
Terminal=true
X-GNOME-Autostart-enabled=true

 

실행 권한 설정

다음 코드를 통해 내가 실행시킬 파일의 실행 권한을 수정해 준다.

$ sudo chmod +x /home/vck2/Kart_Vision/build/Vision_Lidar

재부팅

$ sudo reboot

 

아마 이렇게하면 안되면 Autostart가 될 것이다.