간단하게 상황 설명을 하자면, Synergy나 기타 유사한 부류의 경우 Windows 메인 환경에서 우측 Alt, 우측 Windows, 우측 Ctrl 키를 macOS로 전달하지 않고 있음. 아니 정확하게는 전달은 하는데 macOS의 synergy-core가 매핑 대응되는 키가 없으면 먹어버리게 작성되어 있어서 한/영 키 및 한자 키 등이 먹히는 증상임.
macOS 메인일 때에도 그런지는 확인하지 못했는데 같은 상황일 걸로 생각됨.
gksdud의 경우 우측 Command가 기본인데 내가 이거에 익숙해져 버린게 문제 ㅋㅋ
결국 Synergy를 통해서 한영키나 우측 Alt키를 macOS로 전달하고, Synergy로 macOS에서는 이를 우측 Command로 바꿔주도록 설정해야 함. 그리고 HID만 인식하는 gksdud을 수정해서 Synergy로 교체된 우측 Command도 인식해서 동작하게 해야 함.
문제는 Windows에서 한영키 혹은 우측 Alt키의 경우 IME_Hangul로 전달되는데 Synergy는 이를 무시함.
처음에는 PowerToy를 이용해서 IME_Hangul을 우측 Alt키로 리매핑을 하고 Synergy 설정에서 AltGr을 Super로 전달되게 설정함. 그리고 macOS 쪽에서 키로깅을 했더니 정상 동작함을 확인함. 하지만, 이렇게 하면 Windows 쪽에서 더이상 한영키로 한영 전환이 안 됨!
Claude는 이를 AutoHotKey로 해결하자고 하고 다양한 실험을 진행함. 특정 상황(macOS로 제어가 넘어간 상황)에서는 IME_Hangul을 우측 Alt로 리매핑하고 그렇지 않은 상황에선 다시 리매핑을 해제하도록 함. 하지만.. 막상 해보니 '특정 상황'을 제대로 인식하지 못함.

위와 같은 Synergy 상의 설정이 True 일 때 synergy-core.exe가 최상단에 등장할 거라 기대했는데 synergy-core 소스코드를 보니 그 반대로 되어 있는거 같았다는 거였고, 실제로 해보니까 False 일 때 의도한 대로 동작하고 있었음.
그리고 AutoHotKey로 최상단 창을 제대로 찾을 때 동작하게 했더니 1x1 크기의 투명 창을 AutoHotKey가 올바로 찾지 못하는 현상도 있었음. 그래서 PID로 프로세스를 찾게 시키는 방향으로 선회함.
하지만 그럼에도 불구하고 제대로 동작하지 않았는데, IME_Hangul이 여전히 제대로 전달되지 않았음. 이는 AutoHotKey에서는 이제 제대로 동작했으나 Synergy가 리매핑한 스캔 코드를 어떻게 해석하느냐에서 갈렸음.

따라서 다음과 같이 스크립트가 수정됨.
#Requires AutoHotkey v2.0
#SingleInstance Force
PidOf(hwnd) {
if !hwnd
return 0
DllCall("GetWindowThreadProcessId", "ptr", hwnd, "uint*", &pid := 0)
return pid
}
GuiActivePid() {
gi := Buffer(72, 0), NumPut("uint", 72, gi, 0)
return DllCall("GetGUIThreadInfo", "uint", 0, "ptr", gi) ? PidOf(NumGet(gi, 8, "ptr")) : 0
}
; Synergy가 Mac을 조작 중이면 synergy-core의 창이 활성 창이 됨 ('Take foreground window' 끔 필요)
SynergyHasFocus() {
core := ProcessExist("synergy-core.exe")
return core && (PidOf(DllCall("GetForegroundWindow", "ptr")) = core || GuiActivePid() = core)
}
; 우측 Alt(VK_RMENU)를 스캔 코드 0x38(비확장)로 보냄.
; 표준 스캔 코드(0xE038)는 한국어 자판의 한/영 키 자리라 Synergy가 한/영으로 해석해 Mac에서 버려짐
RAlt(up) => DllCall("keybd_event", "uchar", 0xA5, "uchar", 0x38, "uint", up ? 2 : 0, "uptr", 0)
#HotIf SynergyHasFocus()
vk15:: {
RAlt(false)
}
vk15 up:: {
RAlt(true)
}
#HotIf이제 이 스크립트를 ahk로 저장하고 UI Access 모드로 실행(shell:startup에 다음과 같은 바로가기를 저장하면 됨: "C:\Program Files\AutoHotkey\v2\AutoHotkey64_UIA.exe" "스크립트 경로.ahk")하면 Synergy를 통해 macOS 까지 전달하는 데엔 문제가 없음. 단, Synergy 쪽 설정도 필요함. 위에서 보여준 Windows 쪽의 Take foreground window (more reliable input capture)를 False로 설정하는 것과,

위 처럼 macOS 장치 쪽 키 설정의 Alt Gr을 Super로 설정하는 것.
이제 남은 것은 gksdud 쪽에서 HID가 아닌 가상 키코드로 전달된 우측 Command를 인식해서 한영 변환 동작을 하도록 하는 것! 이미 gksdud 쪽에는 Ctrl+Space나 Shift+Space 등을 위해 이벤트 창을 등록하고 동작하는 관련 코드가 들어가 있으므로 여기에서 우측 Command만 인식하면 될 걸로 보임.
수정: 실제로 gksdud을 수정함: https://github.com/devbug/gksdud/tree/feat/software-hangul-key