iMac 잠자기 안되는 문제 (OSX 10.15 Catalina)

카탈리나 업그레이드 이후 맥이 잠자기가 되질 않는다. 검색을 좀 해보니 동일한 문제를 겪는 사람들이 있는 것 같다. 10.15.3 업데이트가 설치된 지금까지 해결되지 않았다.

https://discussions.apple.com/thread/250933408 내용을 보면 동일하다. UserEventAgent 프로세스가 sleep 진입을 막고있다. apfs 관련 wbc_drain이라는 작업을 하는 것으로 보이는데 top으로 보면 sleeping 상태다. 도대체 뭘 위해 잠자기를 막고 있는건지 모르겠다. 화면만 꺼진 맥이 몇 달 째 전기만 왕창 잡아먹었을 듯.

catalina 이미지 검색결과

MacOS 10.15 Catalina

신기한건 회사에서 업무용으로 사용하는 맥은 괜찮다는거다. 회사 맥은 2017년 5K 모델이고, 집에 있는 맥은 Late 2013 모델이다. 동일하게 둘 다 Fusion Drive를 사용한다.

맥에 Catalina를 클린 인스톨 해 봐도 동일한 문제가 발생한다. 동일한 설정에서 모하비에서는 문제가 없었다.

pmset -g 커맨드를 쳐 보면 sleep prevented by UserEventAgent가 없어지질 않는다. 이 상태에서는 맥이 절대로 슬립에 진입하지 않는다.

cky@iMac ~ % pmset -g           
System-wide power settings:
Currently in use:
 standby              0
 Sleep On Power Button 1
 womp                 1
 halfdim              1
 hibernatefile        /var/vm/sleepimage
 powernap             0
 autorestart          1
 networkoversleep     0
 disksleep            10
 standbydelayhigh     86400
 sleep                1 (sleep prevented by UserEventAgent)
 autopoweroffdelay    28800
 hibernatemode        0
 autopoweroff         1
 ttyskeepawake        1
 displaysleep         10
 highstandbythreshold 50
 standbydelaylow      86400

pmset -g assertions 쳐 보면 apfs 관련된 것 때문이라는 것을 알 수 있다.

cky@iMac ~ % pmset -g assertions
2020-02-06 23:44:44 +0900 
Assertion status system-wide:
   BackgroundTask                 1
   ApplePushServiceTask           0
   UserIsActive                   1
   PreventUserIdleDisplaySleep    0
   PreventSystemSleep             0
   ExternalMedia                  1
   PreventUserIdleSystemSleep     1
   NetworkClientActive            0
Listed by owning process:
   pid 147(hidd): [0x0000001b0009808e] 00:00:00 UserIsActive named: "com.apple.iohideventsystem.queue.tickle serviceID:10000047f name:AppleHIDKeyboardEve product:Apple Keyboard eventType:3"  
	Timeout will fire in 600 secs Action=TimeoutActionRelease
   pid 104(powerd): [0x0000000f00088008] 01:26:49 ExternalMedia named: "com.apple.powermanagement.externalmediamounted"  
   pid 92(UserEventAgent): [0x000010f3000b88dc] 00:14:46 BackgroundTask named: "com.apple.apfsd.wbc_drain"  
	Created for PID: 2256. 
Kernel Assertions: 0x10c=USB,BT-HID,MAGICWAKE
   id=502  level=255 0x4=USB mod= description=com.apple.usb.externaldevice.14900000 owner=External
   id=504  level=255 0x4=USB mod= description=com.apple.usb.externaldevice.14400000 owner=Keyboard Hub
   id=506  level=255 0x100=MAGICWAKE mod= description=llw0 owner=IOSkywalkNetworkBSDClient
   id=507  level=255 0x100=MAGICWAKE mod= description=en0 owner=en0
   id=508  level=255 0x8=BT-HID mod= description=com.apple.driver.IOBluetoothHIDDriver owner=BNBMouseDevice
Idle sleep preventers: IODisplayWrangler

그래서 불편하지만 어쩔 수 없이 전원을 끄고있다. 2007년부터 맥을 사용해왔는데 맥의 전원을 끄고 쓰는건 지금이 처음이다. 빨리 해결됐으면 좋겠다.

외장하드 부트캠프 심플 가이드 (Windows To Go EFI 부팅)

Mac에는 Bootcamp라는 기능으로 Windows로 부팅할 수 있는 기능을 지원해 준다. 내장 HDD의 파티션을 Windows용 파티션으로 쪼개서 설치할 수 있도록 지원해주는데, 이 것 보다는 외장하드나 외장SSD에 설치해 두는 것이 여러모로 편리하다.

결론적으로 말하면 EFI부팅 가능한 Windows To Go를 설치한 외장하드를 만들면 된다.

필요한 준비물은 다음과 같다. 1) Windows 설치하려는 외장 HDD/SSD, 2) Windows 설치 iso 파일, 3) Windows 실행된 컴퓨터이다.

먼저 EFI 파티션을 만든다. Windows에서 해도 되고 Mac에서 해도 되는데, Mac 터미널에서는 다음과 같이 디스크를 지워주기만 하면 된다. diskutil list 명령을 통해서 연결한 외부 저장장치 이름을 찾아서 해당 디스크를 삭제한다. 여기서는 40GB짜리 disk5번이 되겠다.

diskutil list

diskutil erasedisk free untitled disk5 명령으로 디스크를 초기화한다.

diskutil erasedisk free

이제 Windows 머신에 외장하드를 연결해서 디스크 관리를 통해서 보면 200MB EFI 파티션이 앞에 잡혀있고 뒷 부분은 할당되지 않은채로 남아있는 것을 볼 수 있다.

디스크 관리 화면

할당되지 않은 영역을 우클릭하여 새 단순볼륨을 만들어준다. 기본 값으로 다음, 다음, 다음 눌러가면서 만들면 NTFS 파티션이 하나 만들어진다. 여기서는 E: 문자로 할당되어 마운트 되었다.

디스크 관리 – NTFS 파티션 생성

준비한 Windows 설치 iso 파일을 탐색기에서 찾아서 우클릭 > 탑재를 선택한다. 그러면 해당 이미지 파일을 엑세스 할 수 있도록 드라이브 문자를 하나 할당해준다. 여기서는 F:로 할당되었다.

그리고 EFI 파티션을 마운트 하기(드라이브 문자 할당) 위하여 cmd를 관리자 권한으로 실행한다. (검색에서 cmd 라고 치면 나오는 파일에 오른쪽 클릭하여 관리자 권한 실행 선택)

cmd를 관리자 권한으로 실행

diskpart 명령을 실행한 후 드라이브 문자를 할당해준다. 할당하려는 외장하드의 EFI 파티션을 찾아서 assign letter 명령으로 G: 드라이브를 할당해줬다. 여기서는 disk1번이고, 이 디스크의 첫번째 파티션이 EFI 파티션이다.

EFI 파티션 마운트

탐색기에서 봤을 때 다음과 같이 E:(Windows를 설치하려는 빈 공간), F:(iso를 탑재한 Windows 설치 파일), G:(EFI 파티션) 드라이브에 엑세스가 가능해야 한다.

작업 공간이 마운트 된 모습

이제 열어둔 cmd 창에서 dism 명령을 통해서 외장하드에 윈도우를 설치해준다. 여기서 F:는 iso 이미지가 탑재된 드라이브명, E:는 NTFS로 포맷해둔 외장하드의 Windows 설치 공간이다.

dism /apply-image /imagefile:F:\sources\install.wim /index:1 /applydir=E:\

Windows To Go 설치

이제 bcdboot 명령으로 EFI 파티션에 부트파일을 만들어준다. 여기서 E:는 새로 설치한 외장하드 드라이브, G:는 EFI 파티션이다.

bcdboot E:\Windows /s G: /f UEFI

부트파일 생성

준비가 다 되었다.

준비한 외장 하드를 맥에 연결한 후 부팅한다. 부팅하면서 option 키를 누르고 부팅하면 부트 장치를 선택할 수 있는데, 이 때 EFI 장치가 보여야하고 이를 선택하면 부팅이 되면서 윈도우 설치의 나머지 부분을 진행할 수 있다.

이렇게 설치해두면 Parallels Desktop에서도 불러다 쓸 수가 있다. 가벼운 작업은 맥에서 가상머신으로 하면 되고, 헤비한 작업은 듀얼부팅을 한 후 사용하면 된다. 🙂

iOS 12 Developer Beta 설치하기

WWDC2018에서 iOS 12가 소개되었다. 맘에 드는 기능 딱 하나. 카플레이에서 써드파티 내비게이션을 지원해준다.

원래 Beta 릴리즈 미리 깔아보고 이런건 학교 다닐때나 했던거라 정식 릴리즈 배포되면 업데이트하곤 했는데, 이번엔 사정이 다르다. 내비게이션을 빨리 써보고 싶다. 🙂

개발자 베타버전이란게 있다. 앱 개발자들에게 새로운 iOS를 미리 주고 여기에 맞게 자신의 앱을 튜닝하게 하는 것. 난 개발자는 아니지만 방법이 없는건 아니니, 일단 실행해봤다.

WWDC2018 3rd party maps on Carplay

시도하기 전에 반드시 아이폰을 백업해두길 바란다. 백업은 항상 옳다.

아이폰에서 여기에 접속한 뒤 iOS 12 Download를 선택한다.

그러면 프로파일을 설치할 것인지 묻는데, OK 선택.

이후 재부팅을 하게 되고 설정 > 일반 > 소프트웨어 업데이트에 들어가면 아래와 같이 딱~ 업데이트가 가능하게 된다.

iOS 12 Developer Beta 설치 화면

이제 자동차에서 핸드폰 거치대를 뜯어낼 수 있게 된건가.. 감동이다.

그러나 기쁨도 잠시 아직 앱들이 지원을 안 하는 모양이다. 자동차에 연결해봤는데 안나온다. ㅋㅋ 너무 성급했던 모양.

Apple Music 플레이리스트 핸드오프

아이폰을 사용하면서 반 강제적으로 Apple Music을 이용중이다. 패밀리 플랜을 이용하면 6명까지 엑세스 가능하기 때문에 아이폰을 쓰는 가족이 여럿 있다면 괜찮은 요금에 사용할 수 있다.

다만 엑세스 못하는 국내 곡들이 많이 있기 때문에 멜론이라던지 다른 국내 서비스에 비해서 곡이 좀 없는건 사실이다. 최근에는 많이 늘어났다곤 하지만 그래도 없는게 있으니까… 그러나 외국 곡들을 많이 듣는다면 더할 나위 없이 좋은 선택임에는 틀림없다.

최근 사무실에서도 음악을 좀 들으면서 플레이리스트를 싱크해서 아이폰에서도 듣고 맥에서도 듣곤 하는데, 이걸 연속해서 들을 수 있으면 얼마나 좋을까 하는 생각에 검색을 해 봤는데 도저히 방법이 없는 듯 했다.

Apple Music Feedback

그래서 애플에 기능 추가 요청을 보냈는데 과연 추가를 언제쯤 해 줄지?

맥에서 듣던 곡 그대로 퇴근하면서 아이폰에서 이어들을 수 있으면 얼마나 좋겠나. 매번 플레이리스트 선택해서 듣는건 너무 귀찮다. 들었던 곡 또 듣게 되는것도 그렇고.. 스포티파이는 해준다는데, 별로 어려운 구현은 아닐 것 같은데…

맥이 잠자기(Sleep)를 유지하지 못하는 현상

언제부터인가 맥이 잠자기를 유지하지 못하는 듯한 느낌이 있어서(HDD가 멈췄다가 돌아가는 소리가 자주 들리는 듯 했다) 분석을 좀 해 보니 가관이었다. 맥이 잠자기를 유지하지 못하고 1분정도 주기로 계속 깨어나고 있었다.

아래 로그를 보면 Network 인터럽트로 인해서 맥이 깨어났다는 것을 확인할 수 있다. 로깅 시간을 보면 거의 1분 마다 한번씩 로그가 나온다. 로그에 보이는 초단위의 시간이 잠자기를 유지한 시간이다. -_-

imac:~ cky$ pmset -g log | grep "Entering Sleep state"
2017-03-24 07:19:53 +0900 Sleep               	Entering Sleep state due to 'Maintenance Sleep': Using AC 9 secs    
2017-03-24 07:20:47 +0900 Sleep               	Entering Sleep state due to 'Maintenance Sleep': Using AC 12 secs   
2017-03-24 07:21:45 +0900 Sleep               	Entering Sleep state due to 'Maintenance Sleep': Using AC 12 secs   
2017-03-24 07:22:43 +0900 Sleep               	Entering Sleep state due to 'Maintenance Sleep': Using AC 11 secs   
2017-03-24 07:23:40 +0900 Sleep               	Entering Sleep state due to 'Maintenance Sleep': Using AC 13 secs   
2017-03-24 07:24:39 +0900 Sleep               	Entering Sleep state due to 'Maintenance Sleep': Using AC 13 secs   
2017-03-24 07:25:38 +0900 Sleep               	Entering Sleep state due to 'Maintenance Sleep': Using AC 12 secs   
2017-03-24 07:26:36 +0900 Sleep               	Entering Sleep state due to 'Maintenance Sleep': Using AC 12 secs   
2017-03-24 07:27:34 +0900 Sleep               	Entering Sleep state due to 'Maintenance Sleep': Using AC 11 secs   
2017-03-24 07:28:31 +0900 Sleep               	Entering Sleep state due to 'Maintenance Sleep': Using AC 15 secs   
2017-03-24 07:29:32 +0900 Sleep               	Entering Sleep state due to 'Maintenance Sleep': Using AC 11 secs   
2017-03-24 07:30:29 +0900 Sleep               	Entering Sleep state due to 'Maintenance Sleep': Using AC 12 secs   
2017-03-24 07:31:26 +0900 Sleep               	Entering Sleep state due to 'Maintenance Sleep': Using AC 12 secs   
2017-03-24 07:32:24 +0900 Sleep               	Entering Sleep state due to 'Maintenance Sleep': Using AC 17 secs   
2017-03-24 07:33:27 +0900 Sleep               	Entering Sleep state due to 'Maintenance Sleep': Using AC 13 secs   
2017-03-24 07:34:26 +0900 Sleep               	Entering Sleep state due to 'Maintenance Sleep': Using AC 13 secs   
2017-03-24 07:35:25 +0900 Sleep               	Entering Sleep state due to 'Maintenance Sleep': Using AC 15 secs   
2017-03-24 07:36:25 +0900 Sleep               	Entering Sleep state due to 'Maintenance Sleep': Using AC 8 secs    
2017-03-24 07:37:19 +0900 Sleep               	Entering Sleep state due to 'Maintenance Sleep': Using AC 7 secs

먼저 시스템 환경 설정에서 Network 요청에 의한 깨우기를 꺼봤다. 그랬더니 역시나 잠자기가 유지가 된다. 뭔가 Network 패킷에 의해서 깨어나는 것은 확실해 보였다.

시스템 환경 설정 > 에너지 절약

다음으로 tcpdump를 실행해보았다. 그랬더니 이상한 IP로부터 ssh 연결이 끊임없이 들어오고있는 것이 아닌가. ssh 연결을 위한 22번 포트는 내가 외부에서 사용할 목적으로 열어둔 포트다. 그런데 이 포트로 요청이 계속 들어오니 맥은 깨어날 수밖에 없는 것이었다.

IP를 차단할 수 있는지를 타임캡슐에서 살펴보았는데 firewall 기능이 거의 없다시피해서 따로 설정하는 메뉴가 없는 것 같았다. iptime같은 공유기를 쓴다면 IP를 걸러낼 수 있지 않을까 싶다.

도통 패킷이 멈출 기미가 안 보여서 포트를 변경하기로 했다. 외부 포트를 22번이 아닌 다른 것을 쓰고 그 포트를 내부 22번으로 연결시켰다.

Airport 유틸리티 > IPv4 포트 매핑

ssh 연결 요청이 맥에 도착하지 않으니 맥이 잠자기를 잘 유지한다. 로그를 보니 두시간 마다 한번씩 깨는데, 이는 요청시 깨우기 및 Bonjour 잠자기 프록시에 의한 정상적인 동작이다. (https://support.apple.com/ko-kr/HT201960)

아래는 ssh 포트 변경 후 어젯밤 상황을 잡은 로그다. 잠자기가 길게 유지되는 것을 명확히 확인할 수 있다. Idle sleep(아무것도 하지 않아 잠자기에 들어가는 것)으로 잠자기에 진입 후 아침까지 계속 잠자기가 유지되었다. 🙂

imac:~ cky$ pmset -g log | grep "Entering Sleep state"
2017-03-24 17:41:57 +0900 Sleep               	Entering Sleep state due to 'Software Sleep pid=104': Using AC 566 secs  
2017-03-24 18:10:31 +0900 Sleep               	Entering Sleep state due to 'Idle Sleep': Using AC 5446 secs 
2017-03-24 19:42:02 +0900 Sleep               	Entering Sleep state due to 'Maintenance Sleep': Using AC 5315 secs 
2017-03-24 21:11:23 +0900 Sleep               	Entering Sleep state due to 'Maintenance Sleep': Using AC 4558 secs 
2017-03-24 23:49:20 +0900 Sleep               	Entering Sleep state due to 'Idle Sleep': Using AC 4793 secs 
2017-03-25 01:09:59 +0900 Sleep               	Entering Sleep state due to 'Maintenance Sleep': Using AC 6443 secs 
2017-03-25 02:58:08 +0900 Sleep               	Entering Sleep state due to 'Maintenance Sleep': Using AC 6443 secs 
2017-03-25 04:46:17 +0900 Sleep               	Entering Sleep state due to 'Maintenance Sleep': Using AC 6443 secs 
2017-03-25 06:34:26 +0900 Sleep               	Entering Sleep state due to 'Maintenance Sleep': Using AC 6443 secs 
2017-03-25 08:22:35 +0900 Sleep               	Entering Sleep state due to 'Maintenance Sleep': Using AC 5109 secs

맥 시작 소리 없애기

맥을 켜거나 재부팅할 때 나는 소리를 없애기 위해 검색을 좀 해 보니 Mac App Store에 Silent Start(https://www.tunabellysoftware.com/silent_start/)라는 앱이 올라와있었다. 원리는 간단한데, 재부팅 하기 전에 볼륨을 최저로 줄이고 부팅 후 볼륨을 복원하는 방식이다.

Slient Start상태표시줄에 아이콘이 하나 생기는데 별로 신경쓸 일 없이 실행만 해 두면 잘 동작한다. 여기를 클릭하여 Mac App Store에서 무료로 다운로드 가능하다.

기존에 시스템 환경 설정에 설치하여 사용하던 번들은 이제 동작하지 않는지 찾아봐도 잘 나오질 않아서 앱을 설치하는 방식으로 변경했다.

워드프레스 한글 파일 링크 깨지는 이슈

최근 워드프레스에 업로드한 이미지 파일들이 엑스박스 처리되어 브라우저 화면에 나타나지 않는 현상이 발생하였다. 파일을 업로드한 뒤 바로 글을 보면 문제가 없는데 나중에 보면 이상하게 깨져나타나는 것이었다. 결론은 크롬에서 업로드한 파일에 한글이 들어있으면 사파리 브라우저에서 안보인다는 것이다.

라즈베리파이에 서버를 구축하여 운영하면서 나타나는 문제인 것 같아서 서버 설정에 문제가 있나 여러모로 검토를 해 보았으나 최근 배포되는 서버 이미지는 당연히 UTF-8을 지원하고, 설치한 APM도 UTF-8을 기본적으로 사용하도록 되어있었다.

그런데 희안하게 브라우저마다 다른 현상이 나타났다. 사파리 브라우저에서는 깨져나오는데, 크롬 브라우저에서는 제대로 나오는 것이 아닌가. 혹시나 싶어 Windows에서 한번 봤는데, 크롬, 에지, 인터넷 익스플로러 모두 제대로 나왔다. 음 이건 사파리의 버그인가…

wp-content 디렉토리를 살펴봤다. 주로 안보이는 이미지는 스크린샷-어쩌구.png 식의 이미지파일들로 맥에서 화면 캡춰하면 생기는 디폴트 이름들이다. 이 파일들이 크롬에서는 보이는데, 사파리에서는 404 에러가 뜨는 것이었다.

좀 더 확인해보니 사파리에서 업로드한 파일이름과 크롬에서 올리는 파일 이름이 서버에 다르게 저장된다는 것을 알았다. 사파리에서 업로드한 이미지들은 사파리에서도 잘 보이고 크롬에서도 잘 보인다. 그런데 크롬에서 업로드한 이미지는 크롬에서는 잘 보이는데 사파리에서는 404에러가 뜬다. (확인해본 다른 브라우저들은 모두 제대로 나온다.)

집에서는 사파리를 주로 쓰고, 회사에서는 업무용으로 크롬을 주로 쓰고있는데, 회사에서 작성한 포스트를 집에서 확인해볼 때 문제가 나왔던 것이었다.

서버를 좀 들여다보니, 업로드한 파일들이 똑같이 스크린샷 어쩌구란 이름으로 나오지만 정열되는 순서가 다르다. 즉 화면에는 스크린샷이라고 동일하게 보이지만, 사파리에서 업로드한 파일들은 알파벳 뒤에, 크롬에서 업로드한 파일들은 알파벳 앞에 나온다. 동일하게 보이지만 다른 파일인 것이다.

두 그룹으로 나뉜 스크린샷 파일들

추측해보건데 사파리에서는 맥의 파일시스템의 이름을 그대로 업로드하여 저장하는 것 같다. 맥에서는 풀어쓰기 방식의 유니코드를 사용하는데 (이름은 잘 기억이..) 이것이 그대로 Linux 서버에 저장되는 듯 싶다. 크롬에서는 UTF-8 변환을 하여 한글을 저장하는 것 같고..

풀어쓰기 형태로 저장된 스크린샷과 모아쓰기 형태로 저장된 스크린샷이 화면상에는 동일하게 보이지만 unicode가 달라서 정열되는 순서가 다르다.

왜 다르게 저장되는지 분석을 해보려다 이건 내가 할 일이 아닌것 같아서 한글 이름을 변환해서 업로드 해 주는 플러그인을 쓰기로 했다. uploading downloading non-latin filename 이라는 플러그인인데, 깔끔하고 괜찮다. 설치하고 활성화해 두기만 하면 한글이 들어간 이미지를 업로드할 때 자동으로 숫자로 된 파일로 바꿔준다.

아래 첨부 이미지는 크롬브라우저에서 업로드한 이미지 파일이다. 사파리에서는 안보이는데 다른 브라우저에서는 보인다.

시스템 환경설정

여튼 희안하다. 왜 이런건지 누가 좀… 사파리 설정 문젠가?? -_-

macOS Sierra 업데이트 후 git 동작 안할 때

macOS를 업데이트 한 후에 아래와 같이 나오면서 git command가 동작을 안했다.

imac:scm cky$ git statuxcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun

xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun

xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun

다음과 같이 command line tool을 설치해주면 해결된다. 🙂

imac:scm cky$ xcode-select --install
xcode-select: note: install requested for command line developer tools