Raspberry Pi를 Bluetooth 오디오 서버로 설정하기 위한 가장 빠른 설정 단계

개시하다


우리집에서는 맥과 아이폰 등을 랩버리피에 연결해 여러 기기의 소리를 섞어 소리를 정리하고 블루투스 이어폰으로 동시에 듣는다.
구체적인 구축 방법은 앞서 공개됐다.
https://ja.developers.noraworld.blog/pulseaudio-bluetooth
그런데 며칠 전에 SD카드가 고장나서 새 SD카드를 사서 다시 설치했어요.
저는 개인적으로 상술한 보도는 진지하게 정리한 것이라고 생각하지만 어쩔 수 없이 절차가 너무 길고 설명이 너무 길어서 저도 잊어버리고 매번 필요한 부분을 발췌할 때마다 읽기 어려워요.
이에 따라 개인의 비망록도 일찌감치 업무에 필요한 최소한의 절차만 정리한 기사를 다시 쓰기로 했다.
이 절차를 처음 진행하는 사람은 기본적으로 위의 글을 먼저 참고하고 싶지만 필자처럼 몇 번 시도해 본 사람은 이 글이 유용하길 바란다.
또 이후 제목에 "(임의로)"라고 쓰여 있으면 하지 않아도 된다.필자는 스스로 다 할 줄 알기 때문에 참고만 쓴다.

Ubuntu 설치


다음 내용을 참조하여 Raspberry Pi에 Ubuntu를 설치합니다.
https://ja.developers.noraworld.blog/setup-ubuntu-on-raspberry-pi-without-keyboard

시간대 변경(옵션)


처음에는 UTC였지만 로그의 시간을 JST로 설정하려고 시간대를 변경했습니다.
Shell
sudo timedatectl set-timezone Asia/Tokyo
cron을 다시 시작하는 것을 잊지 마십시오.
Shell
sudo systemctl restart cron
https://ja.developers.noraworld.blog/cron-timezone

IP 주소 고정 (임의)


처음 시작할 때 DHCP는 자동으로 개인 IP 주소를 부여하지만 이 주소는 지금까지 래스퍼리피에 부여된 것과 다르면 일일이 다시 작성~/.ssh/config해야 하기 때문에 번거롭기 때문에 아래의 글을 참고하여 개인 IP 주소를 고정합니다.
https://ja.developers.noraworld.blog/ubuntu-fixed-ip-address-via-cli

SSH 설정(모두)


SSH 때는 비밀번호를 입력할 때마다 번거로워 최소한의 안전성을 확보하기 위해 SSH 설정을 한다.
아래 창고에는 필자가 사용한 SSH 설정 파일이 놓여 있으니 스스로 설정하기 어려운 분들은 적절히 이용하시기 바랍니다.
https://github.com/noraworld/ssh-conf
Shell
git clone https://github.com/noraworld/ssh-conf.git
cd ssh-conf
sudo rm /etc/ssh/sshd_config
sudo ln -s $PWD/ssh/sshd_config /etc/ssh
sudo rm -r /etc/ssh/sshd_config.d
sudo ln -s $PWD/ssh/sshd_config.d /etc/ssh
이어 이런 파일을 제작ssh/sshd_config.d/port.conf해 SSH용 포트 번호를 추가한다.
로컬~/.ssh/config에는 이미 랩베리 Pi용 설정이 있고, 포트 번호도 변경이 번거로운 경우 아래 명령으로 이 포트 번호를 추가합니다.
Shell
echo "Port <YOUR_PORT>" | tee -a $PWD/ssh/sshd_config.d/port.conf
이번에 포트 번호를 새로 설정한 경우 다음 명령으로 무작위 수를 생성하여 쓸 수 있습니다.단, 다음 명령은 단시간 내에 여러 번 집행할 수 없다.
Shell
echo "Port $(od -An -tu2 -N2 /dev/random | tr -d ' ')" | tee -a $PWD/ssh/sshd_config.d/port.conf
포트 번호가 무작위로 설정되어 있으면 파일을 기록하는 동시에 터미널에도 표시된 포트 번호를 잊지 마십시오.
만약 아래의 설정이 아직 완성되지 않았다면 각자 설정하세요.
  • Raspberry Pi용 로컬~/.ssh/config에 추가 설정
  • 로컬 SSH 키를 생성하여 공개 키를 Raspberry Pi~/.ssh/authorized_keys로 업로드
  • 이어서 방화벽 설정에서 방금 설정한 SSH용 포트를 엽니다.
    Shell
    sudo ufw enable
    sudo ufw default deny
    sudo ufw deny ssh
    sudo ufw allow <YOUR_PORT>/tcp
    
    SSH 및 방화벽 설정을 반영합니다.
    Shell
    sudo systemctl restart ssh
    sudo ufw reload
    
    현재 SSH 연결을 그대로 유지하고 터미널의 다른 탭이나 창을 열어 SSH가 가능한지 확인합니다.

    백업 파일 목록(옵션)


    Raspberry Pi에서 사용한 이전 데이터 백업이 있으면 다시 시작할 수 있습니다.
    다음은 개인 노트.사전에 백업을 해 두면 이번처럼 다시 설정할 때 파일이 수월해진다.
  • .marlin_aliases
  • .env.preferences
  • .ssh/
  • dotfiles 설정 (임의)


    일반 조개껍질이면 불편하기 때문에 자신의dotfiles가 있으면 설치합니다.
    다음은 필자의dotfiles입니다. 적당히 바꿔 주세요.
    Shell
    git clone https://github.com/noraworld/dotfiles.git
    cd dotfiles
    ./setup
    

    Ubuntu 재부팅 시 자동 로그인


    재부팅 후 SSH를 한 번도 진행하지 않은 상태에서 보통 시스템 부팅 후 일반 사용자의 로그인을 한 번도 하지 않는다.
    그러나 이렇게 되면 일반 사용자가 이동하는 데몬 (이번에 사용한 PulseAudio와dummy-sound 등) 은 다시 시작한 후에 시작되지 않습니다.
    따라서 아래 글을 참고하여 시스템이 다시 시작된 후 일반 사용자로 자동 로그인하도록 설정합니다.
    https://ja.developers.noraworld.blog/ubuntu-reboot-auto-login

    필요한 패키지 설치


    Shell
    sudo apt -y install pulseaudio pulseaudio-utils alsa-base alsa-utils bluetooth bluez pulseaudio-module-bluetooth ofono
    

    시스템 가져오기


    보통 수동으로 설정하지만 필자는 귀찮아서 GiitHub 창고로 관리한 다음에 전체적으로 설정을 가져옵니다.
    https://github.com/noraworld/systemd-units
    각 서비스 파일 내의WorkingDirectory는 적절하게 변경해야 하지만 사용자 이름은ubuntu(기본값)이고 메인 디렉터리 아래에 workspace라는 디렉터리를 만들고 그 중에서clone의 경우 WorkingDirectory변경이 필요 없다.
    Shell
    whoami # ubuntu
    cd
    mkdir workspace
    cd workspace
    git clone https://github.com/noraworld/systemd-units.git
    
    각 서비스 파일을 데몬에 링크합니다.
    Shell
    cd systemd-units
    sudo systemctl link $PWD/lib/systemd/system/*
    systemctl --user link $PWD/lib/systemd/user/*
    sudo systemctl daemon-reload
    systemctl --user daemon-reload
    
    dummy-sound의 자동 시작을 설정합니다.
    Shell
    systemctl --user enable dummy-sound
    

    Bluetooth -conf 가져오기


    이것은 보통 수동으로 설정되지만 창고 관리이기 때문에 전체적으로 설정을 가져옵니다.
    https://github.com/noraworld/bluetooth-conf
    Shell
    git clone https://github.com/noraworld/bluetooth-conf.git
    cd bluetooth-conf
    sudo rm -r /etc/bluetooth
    sudo ln -s $PWD/bluetooth /etc/bluetooth
    sudo systemctl enable bluetooth
    

    pulse-conf 가져오기


    이것도 마찬가지로 창고에서 전체 설정을 가져옵니다.
    https://github.com/noraworld/pulse-conf
    Shell
    git clone https://github.com/noraworld/pulse-conf.git
    cd pulse-conf
    sudo rm -r /etc/pulse
    sudo ln -s $PWD/pulse /etc/pulse
    systemctl --user enable pulseaudio
    sudo gpasswd -a $(whoami) pulse
    sudo gpasswd -a $(whoami) pulse-access
    
    pulse/default.pa 내의 음성 출력 목적지set-default-sink와 음성 입력원set-default-source은 아래 명령을 통해 조사하고 현지에 맞게 변경한다.
    Shell
    pactl list sinks short | awk '{ print $2 }'
    

    재부팅


    Shell
    sudo reboot
    

    Bluetooth 인터페이스 가져오기


    블루투스 조작에 편리한 도구를 가져옵니다.
    https://github.com/noraworld/bluetoothctl-autoconnector
    Shell
    git clone https://github.com/noraworld/bluetoothctl-autoconnector.git
    cd bluetoothctl-autoconnector
    ./setup.sh
    
    각자 다음과 같은 내용을 설정한다.
  • bin 경로 통과

  • 이런 파일을 제작~/.marlin_aliases한 후 이 파일에 BD 주소와 식별명(좋아하는 문자열)을 기재한 쌍
  • ~/.marlin_aliases
    XX:XX:XX:XX:XX:XX MacBook Pro 15
    XX:XX:XX:XX:XX:XX iPhone 7
    XX:XX:XX:XX:XX:XX iPad Air 2
    XX:XX:XX:XX:XX:XX Oculus Quest
    XX:XX:XX:XX:XX:XX KJ-43X8500F
    
    장치를 쌍으로 만들기 위해 다음 명령을 실행합니다.
    Shell
    marlin register MacBook\ Pro\ 15
    
    ~/.marlin_aliases는'MacBook Pro15'로 명명된 MacBook Pro15-inch(원래 이름)를 Raspberry Pi와 짝짓는다.
    도구에 대한 자세한 설명은 다음 URL을 참조하십시오.
    https://ja.developers.noraworld.blog/bluetoothctl-autoconnect

    SD 카드의 내구성에 대해(잡담)


    그나저나 고장난 SD카드는 아래의 부속품에 부착되어 사용 후 약 8개월 만에 고장이 났다.
    https://amzn.to/3ikXnrW
    원인에 대해서는 잘 모르겠지만 이미 쓰기 횟수의 한계에 도달했을 것으로 추정된다.
    예전에 1분마다 블루투스가 자동으로 연결되는 기록을 얻었는데 그게 SD카드에 부하가 됐잖아요.
    그래서 이번에는 그 기록(아무 역할을 하지 않아서)이 얻지 못하도록 내구성이 높은 SLC(Single Level Cell)의SD카드를 사기로 했다.
    https://amzn.to/2VlLIR1
    방금 산 것이라 내구성은 말할 수 없지만 조개 껍질 등록과 조작에 대한 반응이 압도적으로 빨라졌다.
    지금까지는 조개 껍질 조작이 복잡하긴 했지만 래스퍼리피의 성능이 아닌 SD카드의 성능이었다.
    SD카드(Raspberry Pi)를 아직 구매하지 않은 경우에는 SLC의 SD카드를 추천한다.

    좋은 웹페이지 즐겨찾기