รายละเอียดเทคนิค วิธีตั้งค่า และวิธีตรวจสอบแอปด้วยตัวเอง
macOS อนุญาตให้แอปดักจับและแก้ไข keystrokes ได้เฉพาะผ่านกลไก CGEventTap ซึ่งต้องการสิทธิ์ Accessibility
KeyXamathi ใช้สิทธิ์นี้เพื่อ:
Input Monitoring — ไม่จำเป็น เพราะแอปใช้ .cghidEventTap (active tap ที่ต้องการ Accessibility) ไม่ใช่ .listenOnly tap (ที่ต้องการ Input Monitoring)
ตรวจสอบได้เองที่ System Settings → Privacy & Security → Input Monitoring — KeyXamathi ไม่อยู่ในรายการ
เปิดไฟล์ .dmg แล้วลาก KeyXamathi ไปโฟลเดอร์ Applications ถ้า macOS แจ้งว่าแอปจากนักพัฒนาที่ไม่รู้จัก ให้คลิกขวาที่ไอคอนแอป → เลือก Open
แอปจะแสดงหน้าต่างแนะนำพร้อมปุ่มพาไป System Settings โดยตรง
อนุญาตให้แอปพลิเคชันด้านล่างควบคุมคอมพิวเตอร์ของคุณ
แอปมี 3 ตัวเลือก:
ใช้ Caps Lock ตามที่ macOS ตั้งไว้ ไม่ remap อะไร ทำงานได้แต่ยังมี latency เล็กน้อยจากระบบ
ใช้ hidutil remap Caps Lock เป็นปุ่ม F19 ทุกคีย์บอร์ดที่ต่ออยู่ KeyXamathi จัดการสลับภาษาเองโดยตรงผ่าน TISSelectInputSource ตัดปัญหา latency ได้เกือบ 100%
remap เฉพาะคีย์บอร์ดภายนอก MacBook ยังใช้ Caps Lock ปกติ (ไฟ LED ทำงานตามปกติ)
เราไม่อยากให้คุณเชื่อแค่เพราะเราบอก — นี่คือวิธีตรวจสอบด้วยตัวเองว่าแอปไม่ส่งข้อมูลออกไปไหนจริงๆ
ความยาก: ⭐ ทำได้ทุกคน
ความยาก: ⭐⭐ ต้องติดตั้งแอปเพิ่ม
ความยาก: ⭐⭐ ต้องอ่าน log
KeyXamathi ในช่องค้นหาความยาก: ⭐⭐⭐ สำหรับ technical users
เปิด Terminal แล้วรัน:
sudo tcpdump -i any -n host 0.0.0.0/0 and proc KeyXamathi หรือใช้ Wireshark filter by process
ความยาก: ⭐ ทำได้ทุกคน
CGEventTap (.cghidEventTap, active tap) — ดักจับ key events ก่อนระบบจัดการTISSelectInputSource (Carbon API) — สั่งสลับภาษาโดยตรง ไม่ผ่าน shortcuthidutil property --set — remap Caps Lock → F19 ระดับ HIDIOHIDManager — enumerate คีย์บอร์ดที่ต่ออยู่ (สำหรับ Option 3: remap เฉพาะคีย์บอร์ดนอก)TISSelectInputSource สลับภาษาทันทีถ้า TISSelectInputSource ล้มเหลว (หายากมาก) แอปจะ fallback ไปใช้ "Select next source in input menu" ซึ่งเป็นกลไกของ macOS เอง — ไม่มี latency แฝงเหมือน Control+Space
Event Tap (CGEventTap) ใช้ Accessibility permission — สามารถดักจับและแก้ไข key events ได้ (active tap)
Input Monitoring ใช้สำหรับ .listenOnly tap — แค่ฟังอย่างเดียว ไม่สามารถแก้ไข events ได้
KeyXamathi ต้องการแก้ไข keystrokes (เปลี่ยนตัวอักษรที่หลุดภาษา) จึงใช้ active tap + Accessibility ไม่ใช่ listen-only + Input Monitoring
hidutil เป็นเครื่องมือของ macOS เอง (ไม่ใช่ third-party) สำหรับ remap ปุ่มในระดับ HID (Human Interface Device) — เปลี่ยน keycode ก่อนที่ระบบจะเห็น
KeyXamathi ใช้ hidutil property --set เพื่อ remap Caps Lock (keycode 57) เป็น F19 (keycode 80) ทำให้ macOS ไม่จัดการ Caps Lock toggle เอง ปล่อยให้ KeyXamathi สั่งสลับภาษาโดยตรง
LaunchAgent เป็นกลไกของ macOS สำหรับรันคำสั่งตอนเปิดเครื่อง KeyXamathi ใช้เพื่อ:
hidutil remap ใหม่ทุกครั้งที่ login (เพราะ remap หายตอน reboot)ไฟล์อยู่ที่ ~/Library/LaunchAgents/ — ลบได้ทุกเมื่อ
ต้องปิดแล้วเปิดโหมดใหม่ (หรือรีสตาร์ทแอป) เพื่อให้แอปจับอุปกรณ์ใหม่ — ยังไม่มี auto-detect คีย์บอร์ดที่เสียบเพิ่มระหว่างใช้งาน