쉘 스크립트로 매직 키보드 & 매직 트랙패드 멀티 페어링 구현하기

매직 키보드와 매직 트랙패드를 두 대의 맥에서 활용할 수 있도록 했다.

쉘 스크립트로 매직 키보드 & 매직 트랙패드 멀티 페어링 구현하기
Photo credit: Damien Paeng

애플 네이티브 환경, 특히 트랙패드를 사랑하는 나에게 다른 대안은 없었다. 홈 오피스를 구축할 때 묻지도 따지지도 않고 매직 키보드와 매직 트랙패드를 구매했다.

근데 놀랍게도, 이 네이티브 장치들이 멀티 페어링을 지원하지 않았다. Mac 1에서 사용하다가 Mac 2에서 사용하려면 다음과 같은 아주 번거로운 과정을 거쳐야 했다: Mac 1에서 페어링을 끈 뒤, 장치들의 전원을 끄고, Mac 2의 블루투스 기기 목록에서 해당 장치들을 지우고, 장치들의 전원을 켜고, Mac 2에서 연결하기. 다시 Mac 1에서 쓰고 싶다면? 이 과정을 다 다시 거친다. 페어링을 끄고, 장치들의 전원을 끄고, Mac 1에서 기기 지우기를 하고, 장치들의 전원을 켜고, 연결.

구글링 해보니 크게 두 가지 대안이 있었다. 첫 번째는 Universal Control. 애석하게도 나의 작고 아담한 업무 방과 가로 길이 1.4m의 작은 책상은 Universal Control에 적합한 환경이 아니다. 다른 한 가지 대안은 Magic Switch라는 앱이었다. 그리 비싼 가격은 아니었지만, 데모도 없는 정체 모를 앱이라 왠지 구매하기 꺼려졌다.

그러다가 세 번째 대안을 찾았다. 레딧, spitzer 님의 블로그를 보니 blueutil이라는 CLI를 통해 위의 과정을 자동화할 수 있었다. Magic Switch도 기본적으로 같은 원리일 거라는 확신이 들었다. 기존의 방법들을 참고하여 더 쉽게 이용할 수 있도록 구현해 봤다.


0. homebrew 설치

개발을 해 본 적이 없다면 homebrew가 안 깔려있을 것이다. Terminal 앱을 키고, homebrew 홈페이지에 나와 있는 설치 명령어를 입력하고, Terminal에 나오는 지시를 따른다. 비밀번호를 입력해야 했던 것으로 기억한다.

'.pkg' 형식도 제공하는 듯하니, Terminal을 써 본 적이 없어서 겁난다면 해당 파일을 다운로드 받아도 될 것 같다.

2024년 6월 7일 기준 가장 최신의 설치 명령어는 다음과 같다:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"


1. blueutil 설치

homebrew를 통해 blueutil을 설치한다. Terminal에 다음과 같은 명령어를 입력한다:

brew install blueutil

잘 설치되었는지 확인하기 위해 다음과 같은 명령어를 입력한다:

blueutil --help

제대로 설치되었다면 blueutil 버전과 함께 사용 가능한 명령어들이 출력될 것이다.

다음 단계로 넘어가기에 앞서, blueutil이 설치된 디렉토리를 파악해 둔다. 다음과 같은 명령어를 Terminal에 입력하면 디렉토리가 출력될 것이다:

which blueutil

나의 경우 '/opt/homebrew/bin/blueutil'였다.


2. blueutil을 통해 매직 키보드와 매직 트랙패드 MAC Address 값 갖고 오기

이제 Terminal에 다음과 같은 명령어를 입력한다:

blueutil --connected

그럼 장치의 이름과 함께 '00-00-00-00-00-00' 꼴의 MAC Address 값이 출력된다. 이를 복사해 놓자.


3. Script Editor로 AppleScript 작성

이제, AppleScript 안에 Shell Script를 담아서, Script Editor를 통해 실행할 것이다. 이렇게 하는 건 Mac 상단의 메뉴바에서 단 한 번의 클릭으로 쉽게 연결 및 연결 해제를 할 수 있게끔 하기 위해서다.

물론! Shell Script를 작성한 뒤 이를 xbar에 담을 수도 있다. 하지만 회사가 지급한 Mac이 허가받지 않은 앱을 실행할 수 없게끔 설정되어 있는 관계로, 네이티브 툴을 활용하기로 했다.

이제 Script Editor(스크립트 편집기)를 키고 코드를 작성한다. 준비물은 1번에서 얻은 blueutil이 설치된 디렉토리, 2번에서 얻은 장치들의 MAC Address 값들, 그리고 아래의 코드다. 1행의 "디렉토리 입력"과 6행의 MAC Address 쪽에 준비물들을 알맞게 넣으면 된다. '00-00-00-00-00-00' 형식을 '00:00:00:00:00:00' 형식으로 바꿔야 한다는 것을 염두에 두면 좋을 것 같다.

3-1. Disconnect

set blueutilPath to "디렉토리 입력"

set shellScriptContent to "
#!/bin/zsh
export BLUEUTIL=" & blueutilPath & "
DEVICE_IDS=(\"00:00:00:00:00:00\" \"MAC Address 값을 왼쪽과 같은 형식으로 입력")

for DEVICE_ID in \"${DEVICE_IDS[@]}\"; do
    $BLUEUTIL --unpair $DEVICE_ID
done

exit 0
"

set scriptOutput to do shell script shellScriptContent

3-2. Connect

set blueutilPath to "디렉토리 입력"

set shellScriptContent to "
#!/bin/zsh
export BLUEUTIL=" & blueutilPath & "
DEVICE_IDS=(\"00:00:00:00:00:00\" \"MAC Address 값을 왼쪽과 같은 형식으로 입력")

for DEVICE_ID in \"${DEVICE_IDS[@]}\"; do
    $BLUEUTIL --pair $DEVICE_ID
    sleep 1
    $BLUEUTIL --connect $DEVICE_ID
done

exit 0
"

set scriptOutput to do shell script shellScriptContent

이제 각각을 저장하자. 'Disconnect.scpt', 'Connect.scpt'과 같은 식으로. 테스트를 한번 해 본다. Script Editor에서 재생처럼 생긴 삼각형 버튼을 누르면 된다.

로컬 환경에 따른 의존성을 최대한 낮춰두었기 때문에 아마 될 것이다. 혹시 안 되면 ChatGPT에 안 될 만한 이유를 물어보자.


4. Script Editor 설정

Scipt Editor에서 ⌘와 ,를 눌러 설정에 들어간다. 물론 설정을 찾아 들어가도 된다. '메뉴 막대에서 스크립트 메뉴 보기'와 '컴퓨터 스크립트 보기'를 체크해 준다.

이제 메뉴바에 새로운 앱이 하나 떠 있을 것이다. 클릭한 뒤, 'Scripts 폴더 열기'에서 '컴퓨터 Scripts 폴더 열기'를 클릭해 준다. 해당 폴더에 앞서 만들었던 두 개의 스크립트 파일을 넣어준다. 그리고 다른 폴더들은 삭제를 하거나 하위 폴더를 하나 새로 만들어서 정리해 준다.

그럼 다음과 같이 된다. 이제 다른 Mac으로 넘어가기 전에 Disconnect를, 해당 Mac으로 넘어온 후에 Connect를 눌러주면 된다.

만약 Disconnect 누르는 것을 깜빡했다면, 장치들의 전원을 끈 뒤 '새로 연결할' Mac에서 Disconnect와 Connect를 순차적으로 실행하면 된다.



이 글이 좋았다면 커피 한 잔 값으로 그 마음을 표현해 주세요.
작은 격려가 다음 글을 쓰는 이유가 되어 줍니다.
후원은 블로그 운영비를 제외하고 전액 한국백혈병소아암협회에 기부됩니다.

커피 한 잔 후원하기