· 톺아보기

우분투 Ubuntu

라즈베리파이에서 우분투

밝은달사랑 ·

조회 4,401 · 공감 1 · 댓글 2

본업이 IT와는 너무도 먼지라 그나마 조금 써봤다고 우분투를 라즈베리파이4에 설치해서 사용하고 있었는데...

사용한지 한 1년쯤 된거 같은데 오늘에서야 블루투스가 작동을 안하는 것을 알았습니다.

아마도 제가 못 찾았던 것이겠지만 아무리 찾아도 블루투스를 작동시키는 방법이 없더라구요.

아니 정확하게는 작동은 하는데 매번 명령어를 입력을 해줘야하더라구요.

그래서 한참을 찾아서 최종적으로 적용한 결과를 공유합니다.

비 IT인의 홈자동화를 위해서 화이팅입니다.


1. pi-bluetooth

이걸로 해결되시면 이걸로 해결을 보십시오.(저에겐 해당사항이 없었습니다.)

sudo apt install pi-bluetooth ->(snap으로 설치하라고 뜨면 아마도 안되지 싶습니다. 제가 그랬습니다.)

sudo nano /boot/firmware/nobtcfg.txt

-------------------------------------------------------------

#cmdline=nobtcmd.txt     -> 주석처리

cmdline=btcfg.txt              -> 추가
-------------------------------------------------------------


2. hciattach

sudo hciattach /dev/ttyAMA0 bcm43xx 921600

위의 명령어를 입력하면 블루투스 장치가 로드됩니다만...

라즈베리파이3에서도 같은 명령어를 사용하는데서 뭔가 올드한 느낌이 들어서 저는 다음 방법을 적용했습니다.

다만 이 명령어를 부팅시에 1번만 실행하면 종료할 때까지 무난한게 동작한다는 점에서 적용하기는 편할겁니다.

잘 찾아보면 부팅시에 실행하는 방법도 있습니다.


3. battach

비록 성공하지는 못했으나 pi-bluetooth 설치하고 뒤져본 결과 라즈베리파이4 기준으로 아래 명령어를 실행하는 것으로 보입니다.

sudo btattach -B /dev/ttyAMA0 -P bcm -S 3000000

문제는 이 명령어가 백그라운드에서 돌아가지 않는다는 겁니다.

IT인분들께서는 그게 뭐가 문제지 싶겠지만 비IT인에게는 아주 큰 문제이지요.

명령어 뒤에 & 붙여주시면 백그라운드에서 돌아간다고 합니다.(★★ ★ )

힘들게 올린 블루투스를 다운시킬 필요가 있을까 싶지만 또 세상일은 모르는 것이니까.

pidof -x btattach  -> PID확인

sudo kill -9 PID     -> 프로세서 강제종료

그러면 이걸 잘 조합해서 서비스를 등록하면 됩니다.

구글링을 하면 init.d 말고 service를 등록해서 적용하면 된다고 하는데 왜인지 죽어도 안됩니다...

그래서 home assistant를 설치하면서 줏은 서비스를 살짝 수정해서 작성했습니다.

cd /etc/init.d
sudo nano btdl-daemon

-----------------------------------------------------------------------------------------------------------------

#!/bin/sh
### BEGIN INIT INFO
# Provides: Bluetooth Driver Load
# Required-Start: $local_fs $network $named $time $syslog
# Required-Stop: $local_fs $network $named $time $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Description: Bluetooth
### END INIT INFO

# /etc/init.d Service Script for Bluetooth
BTDL_BIN="btattach -B /dev/ttyAMA0 -P bcm -S 3000000 &"
RUN_AS="당신의 ID"
PID_DIR="/var/run/btdl"

start() {
create_piddir
if [ -f $PID_FILE ] && kill -0 $(cat $PID_FILE) 2> /dev/null; then
echo 'Service already running' >&2
return 1
fi
echo -n 'Starting service… ' >&2
local CMD="$BTDL_BIN pidof -x btattach>$PID_FILE"
su -s /bin/bash -c "$CMD" $RUN_AS
if [ $? -ne 0 ]; then
echo "Failed" >&2
else
echo 'Done' >&2
fi
}

stop() {
if [ ! -f "$PID_FILE" ] || ! kill -0 $(cat "$PID_FILE") 2> /dev/null; then
echo 'Service not running' >&2
return 1
fi
echo -n 'Stopping service… ' >&2
kill $(cat "$PID_FILE")
while ps -p $(cat "$PID_FILE") > /dev/null 2>&1; do sleep 1;done;
rm -f $PID_FILE
echo 'Done' >&2
}

install() {
echo "Installing Bluetooth Driver Load Daemon (btdl-daemon)"
update-rc.d btdl-daemon defaults
create_piddir
}

uninstall() {
echo "Are you really sure you want to uninstall this service? The INIT script will"
echo -n "also be deleted! That cannot be undone. [yes|No] "
local SURE
read SURE
if [ "$SURE" = "yes" ]; then
stop
remove_piddir
update-rc.d -f btdl-daemon remove
rm -fv "$0"
echo "Bluetooth Driver Load Daemon has been removed. Bluetooth Driver Loader is still installed."
fi
}

create_piddir() {
if [ ! -d "$PID_DIR" ]; then
mkdir -p $PID_DIR
chown $RUN_AS "$PID_DIR"
fi
}

remove_piddir() {
if [ -d "$PID_DIR" ]; then
if [ -e "$PID_FILE" ]; then
rm -fv "$PID_FILE"
fi
rmdir -v "$PID_DIR"
fi
}

case "$1" in
start)
start
;;
stop)
stop
;;
install)
install
;;
uninstall)
uninstall
;;
restart)
stop
start
;;
*)
echo "Usage: $0 {start|stop|restart|install|uninstall}"
esac
-----------------------------------------------------------------------------------------------------------------

sudo chmod +x /etc/init.d/btdl-daemon

sudo service btdl-daemon install

sudo service btdl-daemon start

등록한 서비스에 군살이 많은 것 같기는 합니다만 이건 확실히 동작하니까요.

IT와 관련하여 해결할 능력이 부족한 우리 비IT인들에게는 확실한게 최곱니다.


제 사용환경은 라즈베리파이4 우분투 18.04.5 LTS 입니다.
우분투 18.04.5 LTS 환경에서는 검증되었으나 다른 시스템에서는 다를 수도 있습니다.

출처 : me

댓글 2

  1. Realtime ·
    우분투 20.04 이후부터는 다음 명령어들로 해결 되더군요.

    sudo apt install -y \
    bluez \
    bluetooth \
    bluez-tools \
    pi-bluetooth
    sudo systemctl enable bluetooth.service
    sudo systemctl start bluetooth.service
    sudo usermod -aG bluetooth ubuntu
  2. sledk ·
    18.04.5 파이버전 단점이 블루투스랑 와이파이 호환성이 너무 떨어진다는거죠. 터미널에서는 와이파이 연결되어있는데 연결이 안되어있다고 상단바에서 알려주니 ㅎㅎ.. 그래서 20.04로 이주한 이후에는 아무런 탈 없이 잘 쓰고 있네요

라즈베리파이당 최근 글

라즈베리파이당 목록 더 보기