Contents
see List제가 QK Alice Duo v1.0.6의 펌웨어 구조와 실제 기기 동작을 직접 분석하고 개발한 macOS 잠자기 개선 펌웨어입니다. 기존 펌웨어의 sleep, USB resume, HID report, Pod LED, 좌우 키보드 통신 경로를 분석하고, 실제 QK Alice Duo에서 ‘나의 찾기’를 이용해 DarkWake 현상을 재현하며 문제의 원인과 수정 동작을 검증했습니다.
맥북은 덮개가 닫혀 있거나 화면이 꺼진 상태에서도 ‘나의 찾기’, 네트워크 연결, 시스템 관리 작업 등을 처리하기 위해 잠깐 깨어날 수 있습니다. macOS에서는 이를 DarkWake라고 하며, 화면과 일반 작업 환경을 모두 깨우지 않고 필요한 백그라운드 작업만 처리하는 정상적인 기능입니다.
다만 이 과정에서 QK Alice Duo가 USB 연결을 재개하면서 Pod와 좌우 키보드의 LED를 켜거나, 실제로 누르지 않은 키 입력 신호를 보낼 수 있습니다. 이 신호가 사용자 활동으로 처리되면 맥북의 절전이 완전히 풀리는 FullWake로 이어질 수 있습니다. 이 문제로 인해 일부 환경에서는 Logi Options+와 같은 상주 서비스가 죽거나 오류 상태에 빠져, Mac을 재부팅하거나 해당 서비스를 다시 실행해야 하는 일이 생길 수 있습니다.
이 펌웨어는 DarkWake 자체를 막거나 키보드의 전원을 물리적으로 차단하지 않습니다. 맥북과 키보드의 정상적인 백그라운드 연결, MCU 동작, 통신 link, key scan 및 실제 키 wake 기능은 유지하면서 불필요한 LED 점등과 phantom keyboard report만 제한하도록 개발했습니다.
DarkWake 중에는 Pod와 좌우 키보드 LED가 꺼진 상태를 유지하고, 실제로 누르지 않은 6KRO/NKRO key report를 차단합니다. DarkWake나 reconnect가 반복돼도 같은 제한을 유지합니다. 실제 물리 키가 눌리면 첫 키 입력부터 Mac에 정상적으로 전달하고, 잠자기 전 LED가 켜져 있었다면 Pod와 양쪽 키보드 LED를 기존 enable, effect, color, brightness 설정으로 복구합니다. 잠자기 전에 LED를 꺼두었다면 실제 키를 눌러도 LED는 계속 꺼진 상태를 유지하고 키 입력만 정상 전달합니다. macOS agent, LaunchAgent 또는 별도 상주 프로그램은 필요하지 않습니다.
QK Alice Duo의 물리 구성은 Pod, Left, Right 세 부분이지만 펌웨어 파일은 네 개입니다. Pod 내부에 서로 다른 역할을 담당하는 Master MCU와 Host MCU가 들어 있기 때문입니다. Master는 Mac에 직접 연결되는 USB/VIA/HID 장치로 keyboard report와 Pod LED를 담당합니다. Host는 macOS의 WindowServer나 Host를 의미하는 것이 아니라 Pod 내부의 두 번째 MCU이며, 좌우 키보드의 packet, wake command 및 LED 설정을 중계합니다. Left와 Right는 각각 왼쪽과 오른쪽 키보드의 key matrix와 LED를 담당합니다. 따라서 좌우 LED까지 함께 제어하려면 Master만 수정해서는 부족하며 Master, Host, Left, Right가 하나의 정책으로 함께 동작해야 합니다.
덮개가 닫힌 상태에서 실제 키를 누르면 펌웨어는 첫 키부터 정상적인 HID wake 입력으로 전달하고 LED 제한을 해제합니다. 외부 모니터와 전원 연결 등 macOS의 closed-display 또는 clamshell 사용 조건이 충족된 상태라면 해당 키 입력으로 Mac을 정상적으로 깨울 수 있습니다. 조건이 충족되지 않아 Mac이 다시 잠드는 동작은 펌웨어 문제가 아니라 macOS의 전원 관리 정책에 따릅니다.
이 펌웨어는 USB 전원이나 키보드 전원을 완전히 끄지 않습니다. DarkWake 중에도 MCU, 통신 link 및 key scan에 필요한 회로는 잠깐 깨어날 수 있으며, 이후 기존 펌웨어의 저전력 idle 또는 sleep 상태로 돌아갑니다. 유선 magnetic-cable 연결에서는 소량의 대기 전력을 Mac과 Pod에서 사용하고, 무선에서는 키보드 배터리의 대기 전력을 사용합니다. 정확한 소비 전력은 별도 계측 전에는 수치로 단정할 수 없지만, 제어 회로의 대기 소비는 LED를 계속 켜두는 것보다 훨씬 작습니다.
현재 실사용 구성인 Pod와 좌우 키보드의 magnetic-cable 유선 연결을 기준으로 분석했습니다. 유선과 무선 데이터는 cable 또는 radio transport를 지난 뒤 동일한 Host command와 half dispatcher 경로로 합쳐집니다. 이 펌웨어는 cable detection이나 radio driver를 변경하지 않고 그 이후의 공통 경로에서 동작하므로 유선과 무선에 같은 정책을 적용하도록 설계했습니다. 다만 complete 4-component set의 실제 무선 timing은 전체 세트를 적용한 뒤 별도로 확인해야 합니다.
함께 적용할 최신 펌웨어 파일은 다음 네 개입니다.
qk_alice_right_v1.0.6_EXPERIMENTAL_complete_darkwake_guard.uf2
qk_alice_left_v1.0.6_EXPERIMENTAL_complete_darkwake_guard.uf2
qk_alice_master_v1.0.6_EXPERIMENTAL_complete_darkwake_guard.uf2
qk_alice_host_v1.0.6_EXPERIMENTAL_complete_darkwake_guard.uf2
실제 장치에는 위 UF2 네 개만 적용합니다. 예전 Master 단독 파일이나 서로 다른 버전의 파일을 섞어 사용하면 안 됩니다.
적용 순서는 Right → Left → Master → Host입니다. 반드시 한 구성씩 적용하고, 각 단계가 끝날 때마다 장치가 다시 연결되어 정상적으로 부팅되고 키 입력이 되는지 확인한 다음 다음 단계로 진행해야 합니다. 한 단계라도 실패하면 나머지 업데이트를 진행하지 않아야 합니다.
적용 전에는 VIA keymap을 백업하고 공식 v1.0.6 Master, Host, Left, Right UF2를 원복용으로 보관해야 합니다. 파일명과 적용할 component를 이중 확인해야 하며, Left와 Right는 코드가 비슷해도 Family ID와 role data가 다르므로 서로 바꿔 플래시하면 안 됩니다. 안정적인 USB 연결에서 한 구성씩 업데이트하고, 업데이트 도중 케이블을 분리하지 않아야 합니다. 제공된 UF2에는 resident bootloader 영역이 포함되어 있지 않으므로 mass erase 또는 chip erase를 실행하면 안 됩니다.
기존 Master v2는 실제 QK Alice Duo에서 ‘나의 찾기’ DarkWake를 재현해 실기기 검증을 마쳤습니다. 이 테스트에서 Pod LED와 QK에서 발생하던 phantom FullWake가 차단됐고 정상 동작하는 것을 확인했습니다. 동시에 Master 단독 수정만으로는 Host가 다시 켜는 좌우 키보드 LED까지 제어할 수 없다는 점도 확인했습니다.
이번 complete Master는 실기기 검증을 마친 Master v2와 byte-for-byte 동일합니다. 새로 추가된 Host, Left, Right는 공식 원본 UF2, Family ID, target range, 변경 위치, code cave, 결정론적 재빌드, Cortex-M4 Unicorn emulation, 반복 DarkWake, LED ON/OFF 설정, 실제 키 입력 상태 전이 및 Left/Right packet 전달 경로 검증을 모두 통과했습니다.
현재 complete Master, Host, Left, Right 네 개 전체를 실제 장치에 함께 적용하는 실기기 검증은 진행 전입니다. 정적 분석과 CPU emulation은 통과했지만 실제 radio timing, magnetic contact 상태 및 bootloader update 과정은 적용 후 유선과 무선 환경에서 각각 확인해야 합니다.