2P by GN⁺ | ★ favorite | 댓글 1개
  • Music Decoy는 실행 중인 프로세스로 존재해, 실수로 ▶ Play를 눌렀을 때 시스템 Music 앱이 열리지 않게 하는 앱
  • 백그라운드에서 전혀 작업하지 않고, Music 앱과 같은 번들 식별자를 사용해 시스템이 Music 앱을 이미 실행 중으로 인식하게 만드는 방식
  • v1.1부터 mediaAppPath 설정으로 ▶ Play 입력 시 Spotify 같은 다른 앱을 실행하도록 구성 가능
  • Music 앱 자동 실행은 키보드 ▶ Play 입력, 블루투스 헤드셋 연결 후 재생 명령, 통화 종료 뒤 헤드셋이 통화 모드에서 음악 모드로 전환될 때 발생
  • rcd는 재생 이벤트 때 현재 오디오 재생 앱이 있으면 해당 앱에 명령을 보내고, 없으면 시스템 Music 앱을 실행하며, 데몬 비활성화는 키보드 미디어 재생 제어까지 끄는 결과

Music Decoy

  • 다운로드, 소스 보기, $brew install music-decoy 설치 명령 제공

  • Music 앱 실행 막기

    • Music Decoy가 실행 중인 동안, 실수로 ▶ Play를 눌러도 시스템 Music 앱이 실행되지 않음
    • 앱은 백그라운드에서 전혀 작업하지 않으며, Music 앱과 같은 번들 식별자를 가진 실행 중 프로세스로 존재하는 방식
  • 작동 방식

    • 번들 식별자 com.apple.Music을 사용해 시스템이 Music 앱이 이미 실행 중이라고 판단하게 만드는 구조
  • 설정

    • v1.1부터 ▶ Play 버튼을 눌렀을 때 다른 앱을 실행하도록 Music Decoy 설정 가능
    • Spotify 예시 설정 명령:
      defaults write com.lowtechguys.MusicDecoy mediaAppPath /Applications/Spotify.app
      
    • 설정 초기화 명령:
      defaults delete com.lowtechguys.MusicDecoy mediaAppPath
      
  • 종료 방법

    • Dock 아이콘과 메뉴 막대 아이콘이 없으므로 다음 중 하나로 종료 필요
      • Activity Monitor를 열고 Music Decoy를 찾은 뒤 상단 ❌ 버튼 선택
      • Terminal에서 killall 'Music Decoy' 실행

자동 실행 조건, 원인, 대안

  • 언제 Music이 스스로 실행되는가?

    • 키보드의 ▶ Play 키를 눌렀고 다른 앱이 오디오를 재생 중이지 않을 때 발생
    • 블루투스 헤드셋이 연결되고 재생 명령을 보낼 때 발생
    • 통화 종료로 블루투스 헤드셋이 통화 모드에서 음악 모드로 전환될 때 발생
  • 왜 이런 일이 발생하는가?

    • rcd는 Remote Control Daemon의 줄임말이며, 미디어 키 처리를 담당하는 데몬
    • 재생 이벤트가 발생하면 rcd는 현재 오디오를 재생하는 앱이 있는지 확인
    • 오디오 재생 앱이 있으면 그 앱에 재생 명령을 보내고, 없으면 시스템 Music 앱 실행
    • 해당 데몬을 비활성화하는 방법은 있지만, 키보드로 미디어 재생을 제어하는 기능도 함께 비활성화
  • 대안

    • StackExchange 답변 기준으로 같은 효과를 얻는 몇 가지 방법 존재
    • launchctl unload -w /System/Library/LaunchAgents/com.apple.rcd.plist
      • 문제점: Play 버튼을 완전히 비활성화
    • noTunes는 실행된 앱을 감지하고 Music이 실행되는 즉시 종료하는 방식
      • 문제점: 백그라운드에서 아주 작은 CPU를 사용하지만, 실행 앱 감지는 매우 적은 작업

댓글과 토론

Hacker News 의견들
  • 앱이 백그라운드에서 아무 일도 하지 않고, Music 앱과 같은 번들 식별자를 가진 실행 중 프로세스로 존재하기만 해서 동작한다는 점이 정말 영리함
    이런 저코드/무코드식 해결책은 시스템을 아주 깊게 이해해야 나오는 우아함임. macOS에서 재생 버튼을 누를 때 정확히 무슨 일이 일어나는지, 번들 식별자가 어떻게 작동하는지 알아야 하고, 결과물은 거의 코드가 없는 “충돌” 하나뿐이라는 게 아름답다
    여담으로, 이런 문제에는 코딩 에이전트가 약함. 지금의 Codex라면 Music 앱 실행을 루프로 감시하다가 죽이는 과한 앱을 만들 가능성이 큼

    • 오히려 이건 코딩 에이전트를 효과적으로 쓰는 좋은 가상 예시처럼 보임
      “Apple Music 앱 실행을 막아줘”라고 시키면 사람 대부분이 하듯 감시 후 종료하는 방식으로 갈 가능성이 높음. 하지만 “왜 Apple Music이 실행되는지 조사해줘”라고 시키면, 조사 결과를 바탕으로 Music과 충돌하는 무코드 앱을 만드는 게 최선이라는 결론을 사용자가 금방 찾을 수 있음
    • 고등학생 때 아버지가 Apple ScreenTime으로 게임 시간을 제한했는데, 게임의 info.plist에서 BundleIdentifiercom.apple.systempreferences로 바꾸고 내 개발자 인증서로 .app에 서명해서 우회했음
      들키기 전까지는 꽤 재미있었다
  • 아직도 Apple이 iTunes를 없앤 게 믿기지 않음
    예전에는 전체 디지털 음악 라이브러리를 iTunes에 넣어뒀고, 대부분은 CD에서 직접 리핑한 음악이었지만 iTunes에서 산 앨범과 TV 쇼도 있었음. Apple이 iTunes를 통째로 버리고 Mac OS에서 삭제한 뒤 Apple Music 같은 것으로 대체했을 때 다시는 신뢰하지 않겠다고 생각함
    한동안 괜찮은 MP3 플레이어를 찾고 AIMP도 써봤지만, 이제는 AI로 내 인터페이스를 가진 로컬 파일 기반 플레이어를 직접 만들 생각임. 스트리밍은 필요 없고 원하지도 않음. iTunes에서 앨범을 계속 샀을 수도 있지만 지금은 CD로 사는 편이 낫다

    • Apple Music에서 클라우드 서비스를 끄고도 로컬 트랙과 iTunes Music Store에서 받은 음악을 그대로 쓸 수 있음
      작년 대부분을 그렇게 썼고, 클라우드 기능을 비활성화한 채 모든 로컬 음악을 Apple Music에 넣은 뒤 예전 iPod처럼 케이블로 iPhone에 동기화했는데 여전히 잘 동작했음
    • Music 앱은 iTunes와 같은 라이브러리를 읽고 핵심 음악 기능도 거의 같음. 아쉬운 건 인터페이스 쪽인가?
    • https://www.strawberrymusicplayer.org 같은 수작업으로 잘 만든 라이브러리 관리자/플레이어도 있음
    • foobar가 최고임: https://www.foobar2000.org/mac
    • 차이를 잘 모르겠음. 지금도 Music 앱을 쓰지만 이름이 바뀌기 전과 똑같이 동작함
      Apple Music을 구독하지 않고도 전체 디지털 음악 라이브러리를 iTunes/Music에 넣어두고 예전처럼 쓰고 있음
  • 내장 유틸리티 hidutilF3~F9 키를 원하는 키로 다시 매핑해서 씀
    F3/F4는 키보드 백라이트 밝기로, F5~F9는 평범한 기능 키로 바꿨음. 이 글에 유용한 정보가 많음: https://news.ycombinator.com/item?id=35555475
    M1 MacBook에서는 hidutil property --setUserKeyMapping을 써서 HIDKeyboardModifierMappingSrc/HIDKeyboardModifierMappingDst 값을 지정하는 방식으로 적용함

  • 몇 달 전에 이런 게 필요했음. 라이브 공연에서 MacBook으로 키보드 리그를 돌리고, 모니터링에는 저지연 무선 헤드폰을 씀
    헤드폰 송신 동글을 노트북에 꽂아두는데, 헤드폰 버튼을 누르면 동글이 “재생/일시정지” 명령을 보내고 Music이 실행되어 기본 출력 장치로 오디오를 틀기 시작함. 헤드폰 송신기가 기본 출력으로 선택되어 있는지조차 신경 쓰지 않아서, 복잡한 다중 장치 구성에서는 전혀 다른 장치로 소리가 나갈 수 있음
    공연 중 실수로 버튼을 눌렀고 기본값이 P.A. 시스템에 연결된 인터페이스라면, 공연장 전체에 무작위 곡이 최대 음량으로 터져 나갈 수 있는 상황임
    지금은 동글을 노트북이 아니라 오디오 인터페이스 쪽에 연결하도록 하드웨어 구성을 바꿔서 당장은 문제가 아니지만, 이런 오동작을 막는 것도 재구성 이유 중 하나였음. 창작 전문가용 프리미엄 기기에서 이런 설정 불가능한 동작은 라이브 공연 환경에 너무 부적절함

  • Apple이 이런 저급한 Microsoft식 전술을 쓰는 걸 보니 씁쓸함. 사용자를 억지로 다른 제품으로 끌고 가는 건 브랜드 자기잠식

    • 미디어 세션이 없을 때 재생 버튼을 누르면 운영체제에 포함된 음악 플레이어가 열리는 게 왜 이상한가?
    • “저급한 Microsoft식 전술”이라고 하니 웃긴데, 해결책을 읽고 처음 든 생각은 오히려 “정말 Apple다운 방식”이라는 거였음
    • Apple은 Spotify를 죽이는 데 집착하고 있음. 그래서 Apple답지 않게 고객에게 적대적인 일을 하는 것 같음
      과거의 Microsoft 대 Netscape와 비슷한 구도임
    • 이런 행동은 크게 역효과가 남. Apple Music 관련 제품은 절대 쓰고 싶지 않음
      왜 이런 공격적인 동작을 끄는 간단한 방법이 없는지 이해할 수 없음. 의도적으로 강제적이고 불쾌하게 만든 동작처럼 보이고, 초기에 잘라내지 않으면 나중에 더 많이 번져서 사용자를 옥죌 수 있음
      Apple만의 문제가 아니라 많은 제품 디자이너가 이런 오만한 태도를 받아들이고 있음
    • 음악을 재생하려 할 때 운영체제에 포함된 음악 플레이어가 열리는 걸 두고 “강제로 끌려간다”고 보긴 어려움
  • 오디오 파일을 열면 Music이 자동 실행될 뿐 아니라 음악 라이브러리에 추가하는 게 싫음
    그다음 직접 삭제하면서 “파일 유지”를 골라야 함

    • 오래전 Music 앱이 아직 iTunes였을 때 모든 음악 파일을 QuickTime Player로 열리게 설정해둠
      너무 오래돼서 기본값이 Music 앱이라는 것도 잊고 있었음. 파일을 재생한다는 게 그 파일을 라이브러리에 넣고 싶다는 뜻은 아니라고 봄
    • 이 때문에 업무 관련 오디오가 재생목록에서 튀어나와 여러 번 놀란 적 있음
    • 짜증 나긴 하지만 고치기는 꽤 쉬움. .mp3 같은 파일을 우클릭해 정보 가져오기를 열고, 기본 앱을 원하는 앱으로 바꾼 다음 “Change all...”을 누르면 됨
      파일 형식마다 한 번씩 해야 하지만, 한 번 해두면 끝임
  • AirPods를 잘못 클릭하면 쓰지도 않고 원하지도 않는 앱이 갑자기 실행되는 게 정말 거슬림

    • Apple 팬은 아니지만, 필요 없는 앱이면 왜 제거하지 않는지 궁금함
    • 같은 문제를 겪음. 위에 뜨는 차단형 모달 대화상자에도 눈에 띄는 닫기 버튼이 없어서 다크 패턴처럼 느껴짐
  • https://github.com/tombonez/noTunes를 씀

    • 예전 Mac에서 noTunes를 썼음. 다만 이 방식은 앱 실행을 감지해 죽이는 게 아니라 아예 실행 자체를 막는다는 장점이 페이지에 명시돼 있음
      메뉴 막대 아이콘도 쓰지 않아서 제한된 공간을 아낄 수 있는 점도 좋음
  • 접근 방식이 정말 마음에 듦. 똑똑함. 다만 개인적으로는 키보드의 PLAY 버튼을 눌렀을 때 Apple Music이 열리는 걸 좋아함

  • 예전에 이걸 막으려고 검색했지만 좋은 결과가 없어서, Music 앱이 열릴 때 다시 닫는 Shortcut을 만들어 썼음
    실제로는 꽤 잘 동작했지만, 진짜로 Music 앱을 쓰고 싶을 때 문제가 됐음. Apple의 사용자 경험으로는 별로라 짜증남