라즈베리파이 키보드 없이 - lajeubelipai kibodeu eobs-i

 라즈베리파이(Raspberry Pi)를 사용하기 위해서는 기본적으로 키보드, 마우스, 모니터가 있어야 합니다. 하지만 노트북으로 작업을 하는 경우 라즈베리파이와 LAN케이블만 있으면 사용 할 수 있습니다.

라즈베리파이 키보드 없이 - lajeubelipai kibodeu eobs-i
                           

※이 기능을 사용하기 전에 반드시 설정에서 VNC가 활성화 되어 있어야 합니다.

(또한 이 글은 Windows를 기준으로 작성되었습니다.)

 먼저 라즈베리파이에 원격으로 연결하기 위해 VNC Viewer를 다운로드합니다. 

https://www.realvnc.com/en/connect/download/viewer/

 이제 라즈베리파이와 원격으로 연결할 컴퓨터를 직접적으로 연결합니다. (공유기가 있으시면 공유기를 거쳐서 연결하셔도 됩니다.)

 그 후에 네트워크 및 공유센터에 들어가셔서 어뎁터 설정 변경에 들어가 줍니다.

 어댑터 설정 변경창에서 라즈베리파이에 공유할 인터넷을 우클릭으로 속성에 들어가서 공유탭에 들어갑니다.

(저는 현재 사용하고 있는 Wi-Fi를 이용하였습니다.)

 다른 네트워크 사용자가 이 컴퓨터의 인터넷 연결을 통해 연결할 수 있도록 허용을 체크해 주시고 홈 네트워킹 연결탭을 현재 라즈베리파이와 연결된 네트워크 어댑터를 선택합니다.

여기까지 설정을 완료하게 되면 현재 라즈베리파이에 IP주소를 알아야 합니다.

명령 프롬프트를 실행시켜서 arp -a를 도스창에 타이핑합니다.

그러면 현재 제가 사용하고 있는 네트워크에 할당되어 있는 IP들이 나타나게 되는데 거기서 인터페이스가 192.168.137.1로 되어있는 주소를 확인합니다.

그러면 유일하게 동적으로 주소를 할당받는 주소가 보이게 되는데 이 IP주소가 현재 라즈베리파이에 IP주소가 됩니다.

이 IP주소를 VNC Viewer에 입력하여 연결을 시도합니다.

로그인 메세지가 나오면 사용자가 설정한 Username과 Password를 입력하여 줍니다.

그러면 최소의 해상도로 라즈베리파이의 바탕화면이 나타나게 됩니다.

이상으로 모니터, 마우스, 키보드 없이 라즈베리파이를 사용하는 방법이였습니다.

이렇게 긴 글을 끝까지 읽어주셔서 감사합니다.

혹시 문제점이나 질문이 있으시다면 아래의 댓글창에 남겨주세요.^^

라즈베리파이 키보드 없이 - lajeubelipai kibodeu eobs-i

문제: 매우 귀찮은 라즈베리파이 초기화

라즈베리파이를 초기화하려면 이런 절차가 필요합니다.

  1. SD 카드를 포맷
  2. Raspberry Pi OS 이미지(혹은 Ubuntu 등)를 SD카드에 쓰기
  3. SD카드를 라즈베리파이 보드에 삽입
  4. 라즈베리파이 보드에 붙은 HDMI 포트로 모니터에 연결하고, 키보드를 연결
  5. 라즈베리파이에 전원 인가 (Power On)
  6. 로컬 사용자로 Raspberry OS의 쉘에 연결 (혹은 GUI)
  7. sudo raspi-config로 Locale, TimeZone, WiFi, SSH 활성화, 주변장치(I2C, SPI) 등 설정

이렇게 하면 되긴 한데,

문제는 제가 랩탑(맥북)만 사용하고, 모니터와 키보드를 따로 쓰지 않는다는 것입니다.

설령 모니터와 키보드가 있다고 하더라도, 매번 이런 식으로 라즈베리파이를 하나하나 초기화하는 것은 어쩐지 짜증스럽습니다.

또 귀찮은 것은 둘째 치더라도,

사람이 일일이 수작업으로 세팅하는 것은 에러를 내기에 딱 좋은 조건이죠.

그렇다면 좀 제대로 된, 편하고 간단한 방법은 없을까요?

해결: 모니터와 키보드 없이(headless) 라즈베리파이 초기화 하기

네, 방법이 있습니다.

하나씩 알아보도록 하겠습니다.

boot/

SD카드에 이미지를 쓰고 나면 boot/ 디렉터리 파티션이 생성되고,

참고: macOS에서는 boot/ 자체가 볼륨의 루트 디렉터리처럼 보입니다.

그 안에 이런 파일들이 들어 있습니다.

라즈베리파이 키보드 없이 - lajeubelipai kibodeu eobs-i

아래와 같이 CLI로도 접근할 수 있습니다. (macOS 기준)

$ cd /Volumes/[SD카드 볼륨 이름]

잘 보시면 elf 파일과 kernel.img, 그리고 config.txt 같은 파일이 있습니다.

자 그럼, 잘 모르는 파일들은 건드리지 않기로 하고,

뻔한 파일 몇 개만 살펴보겠습니다.

config.txt

The Raspberry Pi uses a configuration file instead of the BIOS you would expect to find on a conventional PC. The system configuration parameters, which would traditionally be edited and stored using a BIOS, are stored instead in an optional text file named config.txt.

이 파일은 라즈베리파이에서 BIOS를 대신하기 위해 존재합니다.

간단하게 말하면, 원래 sudo raspi-config로 설정했던 Locale, TimeZone, 주변장치 활성화 등의 설정을 저장하는 곳이 바로 config.txt 라는 것입니다.

즉, 이 파일을 수정한 뒤 라즈베리파이의 전원을 키면 sudo raspi-config를 수정한 것과 같은 효과가 있습니다.

다음은 파일 내용의 일부입니다.

# For more options and information see
# http://rpf.io/configtxt
# Some settings may impact device functionality. See link above for details

# uncomment if you get no picture on HDMI for a default "safe" mode
#hdmi_safe=1

# Uncomment some or all of these to enable the optional hardware interfaces
#dtparam=i2c_arm=on
#dtparam=i2s=on
#dtparam=spi=on

...

# Enable audio (loads snd_bcm2835)
dtparam=audio=on

사실 sudo raspi-config 중에서 일부만 이 파일에서 설정할 수 있습니다.

이 중에서 제가 변경하고 싶은 내용은 이렇습니다.

Enable SPI

SPI Interface 사용 하기 위해

앞의 주석 표시 #를 제거합니다.

디바이스에 따라 SPI 인터페이스를 사용할 때가 있는데, 이렇게 설정을 하면 되겠습니다.

Disable Audio

오디오를 사용할 일이 없어서, #를 앞에 붙였습니다.

# Enable audio (loads snd_bcm2835)
#dtparam=audio=on

그런데 생각보다 config.txt 파일에서 할게 별로 없네요.

다음으로 넘어가겠습니다.

wpa_supplicant.conf

이 파일은 /etc/wpa_supplicant/wpa_supplicant.conf에 생성되는 WiFi 접속 정보를 설정하는 파일입니다.

생성해보겠습니다.

$ cd /Volume/[SD카드 볼륨 이름]
$ touch wpa_supplicant.conf
$ vi wpa_supplicant.conf

그리고 아래의 틀에 맞춰 입력하면 됩니다.

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=US

network={
 ssid="[SSID]"
 psk="[비밀번호]"
}

주의사항: country=KR 하면 WiFi 안 됨

한국이라고, ‘country=KR’ 이라고 쓰면 WiFi가 안 됩니다. 공유기 설정은 ‘대한민국’으로 되어 있는데, 이상하게도 ‘US’나 ‘GB’를 입력해야 WiFi가 됩니다.

이렇게 작성해서 boot/ 파티션에 저장해놓으면,

라즈베리파이가 부팅될 때 /boot/wpa_supplicant.conf에서 /etc/wpa_supplicant/wpa_supplicant.conf 로 이동하게 되고,

자동으로 WiFi 네트워크에 접속합니다.

다음으로 ssh 접속을 활성화하는 방법을 알아보겠습니다.

ssh

이 파일이 boot/ 파티션에 존재하면,

라즈베리파이를 부팅하면서 자동으로 SSH 접속을 활성화합니다.

$ cd /Volume/[SD카드 볼륨 이름]
$ touch ssh

이렇게 파일을 생성하시면 되고요, 내용은 없어도 됩니다.

그냥 파일이 존재하기만 하면 됩니다.

기타 설정 파일

말씀 드렸다시피, 아직 모르는 건 안 건드리기로 했지요.

궁금한 것은 아래 문서를 참조하시고, 더 알아보셔서 활용해보시기 바랍니다.

boot folder

실행 및 검증

그럼 이제 잘 되는지 해보겠습니다.

작업한 SD카드를 라즈베리파이에 꽂고, 전원을 인가합니다.

SSH로 접속해보겠습니다.

(제 라즈베리파이의 IP 주소는 192.168.0.203으로 할당되었습니다.)

$ ssh 

The authenticity of host '192.168.0.203 (192.168.0.203)' can't be established.
ECDSA key fingerprint is SHA256:xxxxxx.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.0.203' (ECDSA) to the list of known hosts.

's password: 

Linux raspberrypi 5.4.83-v7+ #1379 SMP Mon Dec 14 13:08:57 GMT 2020 armv7l

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.

SSH is enabled and the default password for the 'pi' user has not been changed.
This is a security risk - please login as the 'pi' user and type 'passwd' to set a new password.

pi@raspberrypi:~ $

네, 잘 됩니다.

팁: WiFi 접속시 정해진 IP를 받도록 설정

WiFi 공유기(ipTime 등)의 MAC 주고 관리 메뉴에서 라즈베리파이 무선 인터페이스의 MAC 주소와 IP 주소를 바인딩해놓으면, WiFi 접속시 항상 그 IP를 부여받습니다. 유용한 설정이니 참고하십시오.

결과 및 소감: 귀찮음이 감소, 효율성이 증가

말할 것도 없이,

정말 편합니다.

라즈베리파이 키보드 없이 - lajeubelipai kibodeu eobs-i

이제 모니터, 키보드가 없어도 라즈베리파이를 초기화 할 수 있습니다.

아무쪼록 도움이 되었길 바랍니다.

감사합니다.


References

  • Setting up a Raspberry Pi headless
  • boot folder
  • 라즈베리 파이 문서
  • [Homebrew Formulae] sdformatter