ch07. 셸 스크립트 활용 -- 바탕화면 숨기기, 전원 제어

Keyboard Maestro에서 셸 스크립트 한 줄로 macOS 시스템 설정을 제어하는 방법을 배운다. defaults 명령어와 nvram 명령어를 다룬다.

이런 불편함, 겪어보셨나요?

발표를 앞두고 있다. 화면 공유를 켜는 순간, 바탕화면에 흩어진 파일들이 눈에 들어온다. 정리하자니 시간이 없고, 그대로 보여주자니 신경이 쓰인다.

MacBook을 닫았다 열 때마다 자동으로 켜지는 것도 불편하다. 가방 속 맥북 뚜껑이 살짝 열리면서 배터리가 빠진다. 충전만 하려고 전원 케이블을 꽂았는데 자동으로 깨어난다.

이 문제들은 macOS 시스템 설정 깊은 곳에 숨어 있다. GUI로 접근하기 어렵거나 아예 설정 항목이 없다. 하지만 터미널 명령어 한 줄이면 해결된다. KM의 ExecuteShellScript 액션으로 매크로화하면 터미널을 열 필요도 없다.

바탕화면 매크로 (2개)

defaults 명령어와 Finder 재시작을 조합한 두 매크로를 살펴본다.

매크로 분석: 04. 바탕화면 파일 숨기기

무엇을 하는 매크로인가

바탕화면의 모든 파일과 폴더를 숨긴다. 삭제가 아니라, Finder가 아이콘을 표시하지 않도록 설정을 변경하는 것이다.

트리거

트리거 타입 설명
없음 (팔레트/서브매크로) -- 다른 매크로에서 호출하거나 매크로 팔레트에서 실행

액션 흐름

flowchart TD A([팔레트에서 실행]) --> B["defaults write\nCreateDesktop false"] B --> C["killall Finder"] C --> D([바탕화면 아이콘 숨김]) style A fill:#E3F2FD,stroke:#1976D2 style B fill:#E8F5E9,stroke:#388E3C style C fill:#E8F5E9,stroke:#388E3C style D fill:#E3F2FD,stroke:#1976D2

그림 7-1. 바탕화면 파일 숨기기 매크로 흐름도

  1. ExecuteShellScript -- 셸 스크립트 한 줄을 실행한다.

액션이 하나뿐인 단순한 구조다. 핵심은 셸 스크립트의 내용에 있다.

핵심 기술 해설

ExecuteShellScript 액션

KM의 ExecuteShellScript 액션은 macOS 터미널과 동일한 셸 명령어를 실행한다. 기본 셸은 /bin/sh이며, /bin/bash/bin/zsh로 변경할 수 있다. 이 매크로의 스크립트는 다음과 같다.

# 바탕화면 아이콘 표시를 끈다
defaults write com.apple.finder CreateDesktop -bool false
# Finder를 재시작하여 변경 사항을 적용한다
killall Finder

두 명령어를 세미콜론(;)으로 연결하여 한 줄로 실행한다.

defaults 명령어

defaults는 macOS의 사용자 기본 설정(property list)을 읽고 쓰는 명령어다. com.apple.finder는 Finder의 설정 도메인이다.

  • defaults write -- 설정값을 변경한다
  • defaults read -- 현재 설정값을 읽는다
  • defaults delete -- 설정값을 삭제한다 (기본값으로 복원)

CreateDesktop 키는 Finder가 바탕화면에 아이콘을 표시할지 결정한다. false로 설정하면 아이콘이 사라진다.

killall Finder

Finder는 파일 관리자이면서 바탕화면도 담당한다. 설정 변경 후 killall Finder로 재시작해야 반영된다. Finder는 종료 후 자동으로 다시 실행된다.

활용 팁

  • 프레젠테이션, 화면 녹화, 화면 공유 전에 실행하면 깔끔한 화면을 보여줄 수 있다.
  • 파일은 ~/Desktop/에 그대로 남아 있다. Finder 사이드바나 터미널에서 접근 가능하다.
  • 로그인 트리거와 결합하면 맥 시작 시 자동으로 숨길 수 있다.

매크로 분석: 05. 바탕화면 파일 다시 보이게 하기

무엇을 하는 매크로인가

숨겼던 바탕화면 아이콘을 다시 표시한다. 위 매크로의 반대 동작이다.

트리거

트리거 타입 설명
없음 (팔레트/서브매크로) -- 다른 매크로에서 호출하거나 매크로 팔레트에서 실행

액션 흐름

  1. ExecuteShellScript -- 셸 스크립트 한 줄을 실행한다.
# 바탕화면 아이콘 표시를 다시 켠다
defaults write com.apple.finder CreateDesktop -bool true
# Finder를 재시작하여 변경 사항을 적용한다
killall Finder

차이점은 -bool false-bool true로 바뀐 것뿐이다. 나머지는 동일하다.

핵심 기술 해설

두 매크로를 비교하면 패턴이 보인다.

매크로 defaults 값 결과
04. 바탕화면 파일 숨기기 CreateDesktop -bool false 아이콘 숨김
05. 바탕화면 파일 다시 보이게 하기 CreateDesktop -bool true 아이콘 표시

같은 설정 키에 true/false를 쓰는 토글 패턴이다. AppleShowAllFiles(숨김 파일 표시), disable-shadow(스크린샷 그림자 제거) 등도 같은 방식으로 제어할 수 있다.

활용 팁

  • 두 매크로를 하나로 합칠 수도 있다. defaults read로 현재 값을 읽고, if문으로 반대 값을 쓰는 토글 스크립트를 만들면 된다.

전원 제어 매크로 (4개)

nvram 명령어로 MacBook의 자동 부팅 동작을 제어하는 네 매크로를 살펴본다.

매크로 분석: 00. 뚜껑을 열거나 전원을 연결했을 때 모두 자동으로 켜지지 않게 하기

무엇을 하는 매크로인가

MacBook의 뚜껑을 열거나 전원을 연결해도 자동 부팅되지 않도록 설정한다. 전원 버튼을 눌러야만 켜진다.

트리거

트리거 타입 설명
없음 (팔레트/서브매크로) -- 필요할 때 매크로 팔레트에서 수동 실행

액션 흐름

flowchart TD A([팔레트에서 실행]) --> B["sudo nvram\nBootPreference 설정"] B --> C{설정값} C -->|"%00"| D["뚜껑 + 전원\n모두 차단"] C -->|"%01"| E["뚜껑만 차단"] C -->|"%02"| F["전원만 차단"] C -->|"-d 삭제"| G["기본값 복원\n모두 허용"] D --> H([완료]) E --> H F --> H G --> H style A fill:#E3F2FD,stroke:#1976D2 style B fill:#E8F5E9,stroke:#388E3C style C fill:#FFF8E1,stroke:#FFA000 style D fill:#E8F5E9,stroke:#388E3C style E fill:#E8F5E9,stroke:#388E3C style F fill:#E8F5E9,stroke:#388E3C style G fill:#E8F5E9,stroke:#388E3C style H fill:#E3F2FD,stroke:#1976D2

그림 7-2. 전원 제어 매크로 흐름도 (4개 매크로의 관계)

  1. ExecuteShellScript -- nvram 명령어를 실행한다.
# 뚜껑 열기 + 전원 연결 모두 자동 부팅 비활성화
sudo nvram BootPreference=%00

핵심 기술 해설

nvram 명령어

nvram은 Mac의 비휘발성 메모리(NVRAM)에 저장된 펌웨어 변수를 읽고 쓰는 명령어다. 시동 디스크, 화면 해상도 등 하드웨어 레벨의 설정이 여기에 저장된다.

BootPreference 변수는 MacBook의 자동 부팅 동작을 제어한다.

의미
%00 뚜껑 열기 + 전원 연결 모두 자동 부팅 안 함
%01 뚜껑 열기만 자동 부팅 안 함 (전원 연결 시에는 켜짐)
%02 전원 연결만 자동 부팅 안 함 (뚜껑 열기 시에는 켜짐)
삭제 기본 동작 (뚜껑 열기, 전원 연결 모두 자동 부팅)

sudo와 관리자 권한

nvram은 시스템 레벨 설정이므로 sudo(관리자 권한)가 필요하다. KM에서 실행하면 macOS가 비밀번호 입력 창을 표시한다. 번거롭다면 /etc/sudoers에 해당 명령어를 등록할 수 있으나, 보안에 주의해야 한다.

매크로 분석: 01~03. 나머지 전원 제어 매크로

나머지 세 매크로는 00번과 구조가 동일하다. ExecuteShellScript 액션 하나에 nvram 명령어만 다르다.

번호 매크로명 명령어 효과
00 모두 자동 부팅 안 함 nvram BootPreference=%00 뚜껑 + 전원 모두 차단
01 뚜껑만 차단 nvram BootPreference=%01 뚜껑 차단, 전원 허용
02 전원만 차단 nvram BootPreference=%02 뚜껑 허용, 전원 차단
03 초기 설정 복원 nvram -d BootPreference 모두 허용 (기본값)

하나의 NVRAM 변수를 네 가지 상태로 설정하는 구조다. nvram -ddefaults delete와 같은 패턴으로, 설정을 제거하여 기본값으로 복원한다. 관련 매크로를 세트로 만들어두면 상황에 따라 빠르게 전환할 수 있다.

직접 만들어보기

"바탕화면 파일 숨기기" 매크로를 직접 만들어본다.

  1. KM 에디터에서 매크로 그룹을 선택한다. 없으면 "Utilities" 그룹을 새로 만든다.
  2. 새 매크로를 생성하고 이름을 "바탕화면 파일 숨기기"로 설정한다.
  3. 단축키 트리거를 추가한다. 예: ⌃⌥D (Control + Option + D)
  4. Execute Shell Script 액션을 추가하고 스크립트 입력란에 다음을 입력한다.
defaults write com.apple.finder CreateDesktop -bool false; killall Finder
  1. 같은 방식으로 "바탕화면 파일 다시 보이게 하기" 매크로도 만든다. 스크립트만 -bool true로 변경한다.
  1. 테스트한다. 바탕화면이 깨끗해지면 성공이다. 전원 제어 매크로도 같은 방식으로 만들 수 있다. sudo가 필요하므로 실행 시 관리자 비밀번호를 입력해야 한다.

이 챕터에서 배운 것

  • ExecuteShellScript 액션으로 터미널 명령어를 매크로에서 실행하는 방법
  • defaults 명령어로 macOS 앱의 숨겨진 설정을 변경하는 방법
  • nvram 명령어로 하드웨어 레벨의 부팅 설정을 제어하는 방법
  • sudo가 필요한 명령어를 KM에서 실행할 때의 주의점
  • 관련된 매크로를 세트로 구성하는 패턴 (토글, 다중 상태)

다음 챕터 예고

ch08에서는 AppleScript 연동을 다룬다. Finder 조작과 Google Meet 환경 자동 설정을 구현하며, macOS 앱과 더 깊이 상호작용하는 방법을 배운다.