SBC 싱글보드 컴퓨터가 arm 64비트가 나오고 스펙이 좋아지고 있다.
그리고 요즘에 SK하이닉스에서 SSD 128기가 짜리 2230 벌크가
중국시장에 풀리고 있다.. 가격은 3~4만원대..
그리고 본체는 4기가 램 기준으로 10만원 선이니까 주변기기 까지 포함하면
20만원 안쪽으로 싱글보드 컴퓨터가 완성된다고 볼수 있다.
이렇게 SBC가 성능이 올라가 있고 게다가 SSD까지 받쳐주면
오렌지파이 3B같은 경우는 키오스크로 사용해도 전혀 손색이 없다.
게다가 C# 닷넷 개발자들은 아발로니아라는 좋은 방법이 있기 때문에
우분투위에 프로그램을 돌릴 수 가 있다.. (콘솔은 당연히 되고..)
그래서 그걸 받쳐줄수 있는 폼팩터가 필요한데 그게 베컴박스고
우분투서버 기반에 오픈박스로 메인App과 서브App 두개와
VNC로 현장 SBC를 모니터링 할수 있으며 파일탐색기 터미널 메모장
이것만 있는체로 배포되면 날라다닐 수 있다.
(당연한 얘기지만 ssh로 오렌지파이에 접속되면 파일질라로 Host에
sftp://아이피.. 그리고 22번 포트로 접속해서 파일 송수신이 가능하다.)
sftp://아이피.. 그리고 22번 포트로 접속해서 파일 송수신이 가능하다.)
그래서 오늘은 그 베컴박스를 만드는 방법에 대해서 얘기하고자 한다.
<본론>
베컴박스 만들기
기기 인프라 확인
초기 하드웨어 점검: (쿨링패드장착, IO핀, 하이닉스M.2 SSD설치)
맥주소를 확인하여 ipv4주소로 접속한다.
명령어 (nmap -p 22 --open 192.168.0.1/24)
SSH 포트(22) 활성화 확인후 putty로 접속확인
sftp://[기기아이피]로 파일질라를 통해 포트(22) 접속확인
사용자명(U): orangepi
비밀번호(P): orangepi
기기 Config 세팅
명령어(sudo orangepi-config)로 → 타임존, 로케일, 키보드설정
Personal settings 하위메뉴에서
Timezone: Asia / Seoul 설정
Locales: en_US.UTF-8, ko_KR.EUC-KR, ko_KR.UTF-8 설정
KeyBoard: 폰트설정이후 korean 101/104로 변경
초반 OS업데이트 처리
기기 업데이트 및 폴더생성과 바로가기 만들기
sudo apt update (저장소 업데이트)
sudo apt upgrade (업그레이드 시간오래걸림)
sudo apt update (업데이트 다시)
mkdir temp (temp폴더 생성)
mkdir MainApp (MainApp폴더 생성)
mkdir SubApp (SubApp폴더 생성)
touch ~/MainApp/start_main.sh (MainApp 바로가기 만들기)
touch ~/SubApp/start_sub.sh (SubApp 바로가기 만들기)
chmod +x ~/MainApp/start_main.sh (MainApp 바로가기 실행가능 하도록 변경)
chmod +x ~/SubApp/start_sub.sh (SubApp 바로가기 실행가능 하도록 변경)
기초 그래픽 스택 및 Openbox 윈도우 매니저 설치
X-Server 그래픽 엔진과 경량 윈도우매니저 OpenBox 설치
# 패키지 저장소 새로고침
sudo apt update
# X11, 디스플레이 매니저, 오픈박스 설치
sudo apt install xorg lightdm openbox -y
폰트 설치, 한글 입력기, 한글 환경변수 설정
한글폰트 및 한글입력기(fcitx5) 설치 및 환경변수
# 한글 폰트 및 fcitx5 입력기 패키지 설치
sudo apt install fonts-nanum fonts-noto-cjk im-config fcitx5 fcitx5-hangul fcitx5-config-qt fcitx5-frontend-gtk2 fcitx5-frontend-gtk3 fcitx5-frontend-qt5 -y
# 입력기 프레임워크를 fcitx5로 지정
im-config -n fcitx5
# 리눅스 시스템 인코딩 환경에 한국어 언어 팩 생성 및 고정
sudo locale-gen ko_KR.UTF-8
sudo update-locale LANG=ko_KR.UTF-8 LANGUAGE=ko_KR:ko LC_ALL=ko_KR.UTF-8
# LightDM 로그인 세션 환경 변수 설정
nano ~/.xprofile 에 아래 내용 추가 (없으면 새로 생성)
export LANG=ko_KR.UTF-8
export LC_ALL=ko_KR.UTF-8
export XMODIFIERS=@im=fcitx
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
# 환경변수 파일 수정처리
sudo nano /etc/environment
# 제일 하단에 다음을 입력후 저장
LANG=ko_KR.UTF-8
LANGUAGE=ko_KR:ko
LC_ALL=ko_KR.UTF-8
한글 입력기 프로파일 구성
한글입력기(fcitx5) 프로파일을 구성한다.
# 프로파일 내용진입 하여 다음 내용으로 수정
sudo nano ~/.config/fcitx5/profile
[Groups/0]
# Group Name
Name=Default
# Layout
Default Layout=us
# Default Input Method
DefaultIM=keyboard-us
[Groups/0/Items/0]
# Name
Name=keyboard-us
# Layout
Layout=
[Groups/0/Items/1]
# Name
Name=hangul
# Layout
Layout=
[GroupOrder]
0=Default
VNC 서버 설치 및 보안 계정 패스워드 생성
원격지 화면 통제를 위해 VNC 서버를 설치하고 비밀번호를 고정
# x11vnc 패키지 엔진 설치
sudo apt install x11vnc -y
# 계정 홈 디렉토리 내부에 보안 인증서 폴더 생성
mkdir -p ~/.vnc
# 비밀번호 생성 및 저장 (패스워드 2회입력후, 저장여부 Y)
x11vnc -storepasswd ~/.vnc/passwd
LightDM 사용자 자동 로그인 처리
자동 로그인 orangepi로 로그인을 락인 시킴
# 구성 파일 에디터 열기
sudo nano /etc/lightdm/lightdm.conf
# 아래 내용으로 설정한후 저장
[Seat:*]
autologin-user=orangepi
autologin-user-timeout=0
user-session=openbox
(선택사항) HDMI 미장착시 가상 DISPLAY 활성화 설정
콘솔 기반 구동 시 가상 모니터를 생성하여 Headless 상태에서도 해상도 및 VNC 유지
# 가상 그래픽 드라이버 패키지 설치
sudo apt install xserver-xorg-video-dummy -y
# X11 가상 디스플레이 구성 파일 생성
sudo nano /etc/X11/xorg.conf.d/99-dummy.conf
# 아래 설정 내용 복사 후 저장 (1280x1024 HD 지정)
Section "Device"
Identifier "DummyDevice"
Driver "dummy"
EndSection
Section "Monitor"
Identifier "DummyMonitor"
HorizSync 28.0-80.0
VertRefresh 48.0-75.0
EndSection
Section "Screen"
Identifier "DummyScreen"
Device "DummyDevice"
Monitor "DummyMonitor"
DefaultDepth 24
SubSection "Display"
Depth 24
Modes "1280x1024"
EndSubSection
EndSection
오픈박스 환경 AutoStart 프로필 작성 및 메인앱 자동실행
오픈박스가 로드될때 순차적으로 자동 실행 (이후 재부팅: sudo reboot)
# 오픈박스 스타트업 구성 파일 폴더 및 파일 생성
mkdir -p ~/.config/openbox
sudo nano ~/.config/openbox/autostart
[ 아래 내용으로 설정한 후 저장 ]
# 1. 마우스 커서 기본 모양 설정
xsetroot -cursor_name left_ptr &
# 2. VNC 원격 서버 백그라운드 실행
x11vnc -auth guess -forever -loop -noxdamage -repeat -rfbauth /home/orangepi/.vnc/passwd -rfbport 5900 -shared &
# 3. 절전모드 사용안함
xset s off &
xset -dpms &
xset s noblank &
# 4. fcitx5 한글 입력기 데몬 실행
fcitx5 -d &
# 5. 시스템 안정화 후 메인 앱 자동 구동 (1초 대기 후 실행)
sleep 1
/home/orangepi/MainApp/start_main.sh &
오픈박스 디스플레이구성 작성
오픈박스가 로드될때 마우스와 키보드로 처리할 내용
# 시스템 공용 폴더에서 원본파일을 유저 폴더로 복사
cp /etc/xdg/openbox/rc.xml ~/.config/openbox/rc.xml
# 설정파일을 아래의 xml로 변경처리
# 타이핑 보다는 파일질라로 복사처리 권장
[ 아래의 사항으로 변경 ]
<?xml version="1.0" encoding="UTF-8"?>
<openbox_config xmlns="http://openbox.org/3.4/rc" xmlns:xi="http://www.w3.org/2001/XInclude">
<resistance><strength>10</strength><screen_edge_strength>20</screen_edge_strength></resistance>
<focus><focusNew>yes</focusNew><followMouse>no</followMouse><focusLast>yes</focusLast><underMouse>no</underMouse><focusDelay>200</focusDelay><raiseOnFocus>no</raiseOnFocus></focus>
<placement><policy>Smart</policy><center>yes</center><monitor>Primary</monitor><primaryMonitor>1</primaryMonitor></placement>
<theme>
<name>Clearlooks</name><titleLayout>NLIMC</titleLayout><keepBorder>yes</keepBorder><animateIconify>yes</animateIconify>
<font place="ActiveWindow"><name>sans</name><size>8</size><weight>bold</weight><slant>normal</slant></font>
<font place="InactiveWindow"><name>sans</name><size>8</size><weight>bold</weight><slant>normal</slant></font>
<font place="MenuHeader"><name>sans</name><size>9</size><weight>normal</weight><slant>normal</slant></font>
<font place="MenuItem"><name>sans</name><size>9</size><weight>normal</weight><slant>normal</slant></font>
</theme>
<desktops>
<number>1</number><firstdesk>1</firstdesk><names></names><popupTime>0</popupTime>
</desktops>
<resize><drawContents>yes</drawContents><popupShow>Nonpixel</popupShow><popupPosition>Center</popupPosition></resize>
<margins><top>0</top><bottom>0</bottom><left>0</left><right>0</right></margins>
<keyboard>
<chainQuitKey>C-g</chainQuitKey>
<keybind key="W-d"><action name="ToggleShowDesktop"/></keybind>
<keybind key="A-F4"><action name="Close"/></keybind>
<keybind key="A-Escape"><action name="Lower"/><action name="FocusToBottom"/><action name="Unfocus"/></keybind>
<keybind key="A-space"><action name="ShowMenu"><menu>client-menu</menu></action></keybind>
<keybind key="Print"><action name="Execute"><command>scrot</command></action></keybind>
</keyboard>
<mouse>
<dragThreshold>1</dragThreshold><doubleClickTime>500</doubleClickTime><screenEdgeWarpTime>0</screenEdgeWarpTime><screenEdgeWarpMouse>false</screenEdgeWarpMouse>
<context name="Frame">
<mousebind button="A-Left" action="Press"><action name="Focus"/><action name="Raise"/></mousebind>
<mousebind button="A-Left" action="Drag"><action name="Move"/></mousebind>
<mousebind button="A-Right" action="Drag"><action name="Resize"/></mousebind>
</context>
<context name="Titlebar">
<mousebind button="Left" action="Drag"><action name="Move"/></mousebind>
<mousebind button="Left" action="DoubleClick"><action name="ToggleMaximize"/></mousebind>
</context>
<context name="Client">
<mousebind button="Left" action="Press"><action name="Focus"/><action name="Raise"/></mousebind>
<mousebind button="Middle" action="Press"><action name="Focus"/><action name="Raise"/></mousebind>
<mousebind button="Right" action="Press"><action name="Focus"/><action name="Raise"/></mousebind>
</context>
<context name="Desktop">
<mousebind button="Left" action="Press"><action name="Focus"/><action name="Raise"/></mousebind>
<mousebind button="Right" action="Press"><action name="Focus"/><action name="Raise"/></mousebind>
</context>
<context name="Root">
<mousebind button="Right" action="Press"><action name="ShowMenu"><menu>root-menu</menu></action></mousebind>
</context>
</mouse>
<menu><file>menu.xml</file><hideDelay>200</hideDelay><middle>no</middle><submenuShowDelay>100</submenuShowDelay><submenuHideDelay>400</submenuHideDelay><showIcons>yes</showIcons><manageDesktops>no</manageDesktops></menu>
</openbox_config>
NTP 시간 동기화 서버 구축 (Chrony)
장비의 물리적 시간 오차방지용 타임데몬 Chrony 설치 및 락인
# 1. 크로니 패키지 설치 및 활성화
sudo apt update
sudo apt install chrony -y
sudo systemctl enable chrony
sudo systemctl start chrony
# 2. 타임 서버 설정 수정 (인터넷 가능 환경 또는 현장 NTP 서버 지정)
sudo nano /etc/chrony/chrony.conf
# [기존 pool 대신에 한국 표준 타임 서버 등록 (지우고 아래로 변경)]
pool time.bora.net iburst
pool time.kornet.net iburst
pool ntp.gwnn.rm.kr iburst
# 3. 크로니 데몬 재시작 및 동기화 상태 현장 검증
sudo systemctl restart chrony
chronyc tracking (현재 시간 동기화 추적 상태 확인)
chronyc sources -v (연결된 외부 타임 서버 리스트 및 상태 확인)
유틸리티 설치
경량 유틸리티 5종 설치
# 정비용 유틸리티 (메모장, 터미널, 탐색기, 파일질라, 이미지뷰어) 설치
sudo apt update
sudo apt install -y mousepad lxterminal pcmanfm filezilla viewnior
오픈박스 마우스 우클릭 메뉴설정
오픈박스 바탕화면에 나올 메뉴 구성 및 sh 스크립트 연동
# 메뉴판 구성 파일 에디터 열기
nano ~/.config/openbox/menu.xml
# [아래의 내용으로 변경]
<?xml version="1.0" encoding="utf-8"?>
<openbox_menu xmlns="http://openbox.org/3.4/menu">
<menu id="root-menu" label="EQUIPMENT CONTROL">
<separator label="[ RUN PROGRAM ]" />
<item label="메인 App">
<action name="Execute"><command>/home/orangepi/MainApp/start_main.sh</command></action>
</item>
<item label="보조 App">
<action name="Execute"><command>/home/orangepi/SubApp/start_sub.sh</command></action>
</item>
<separator label="[ REPAIR TOOL ]" />
<item label="메모장">
<action name="Execute"><command>mousepad</command></action>
</item>
<item label="터미널">
<action name="Execute"><command>lxterminal</command></action>
</item>
<item label="파일 탐색기">
<action name="Execute"><command>pcmanfm</command></action>
</item>
<separator />
<item label="장비 재부팅 (Reboot)">
<action name="Execute"><command>systemctl reboot</command></action>
</item>
</menu>
</openbox_menu>
한국어 입력 자판 GUI 설정
한국어 입력 자판 GUI 설정 (configtool 이용)
# 바탕화면 터미널 메뉴로 진입
# fcitx5-configtool로 키보드 설정진입
# 좌측 입력기에 다음 순서로 배치처리
키보드 - Korean - Korean (101/104)
한글(Hangul)
# 이렇게 설정하고 Apply
메인 App 구동 쉘 스크립트 작성 (start_main.sh)
메인 앱 실행 스크립트 작성 (보조도 같은방식으로 처리)
# 메인 앱 디렉토리로 이동 및 스크립트 생성
cd ~/MainApp
nano start_main.sh
# [아래의 내용으로 변경]
#!/bin/bash
export DISPLAY=:0
export XMODIFIERS=@im=fcitx
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
# 프로그램 실행 경로로 이동
cd /home/orangepi/MainApp
# 메인 애플리케이션 실행 (실제 구동할 바이너리나 파이썬 파일 지정)
# 예: python3 main_gui.py 또는 ./.NET바이너리 등
/usr/bin/python3 main_gui.py
# 작성 완료 후 저장(Ctrl+O, Enter, Ctrl+X)
댓글 없음:
댓글 쓰기