HyperDesk - แอปเดสก์ท็อปที่ฝังเซสชัน Hyper-V/RDP หลายตัวไว้ในหน้าต่างเดียว
(github.com/qetqet910)เลยสร้างขึ้นมาเพราะเหนื่อยกับการเปิด VM หลายตัวแล้วสลับหน้าต่างไปมา
ระหว่างที่กำลังปรับตัวกับงานที่บริษัท อยู่ ๆ ก็มีความคิดนี้ขึ้นมา
พอมีงานบำรุงรักษาเข้ามาสักเคส ก็ต้องเปิดรีโมตเดสก์ท็อปไปยังเซิร์ฟเวอร์ของลูกค้า (MST),
สภาพแวดล้อมสำหรับพัฒนาที่ตรงกับเวอร์ชันของไคลเอนต์ (Hyper-V), ลูกค้าที่ต้องการสภาพแวดล้อมพิเศษ (VDI/Omnissa) ฯลฯ
หน้าจอมันวุ่นวายเกินไป.. มีวิธีที่ดีกว่านี้ไหม?
เลยลองทำขึ้นมาเอง เผื่อว่าจะช่วยทีมได้บ้างไม่มากก็น้อย
- วิธีการทำงาน
HyperDesk ฝังเซสชัน Hyper-V (VMConnect) และ RDP ไว้ในแอปด้วยวิธี Win32 Window Swallowing
ไม่ใช่พรีวิวหรือแท็บ แต่เป็นการดูดหน้าต่างเซสชันจริงเข้ามาด้วย SetParent
- มุมมองที่แอ็กทีฟเพียงหนึ่งเดียว + สลับได้ทันที: แสดงเซสชันที่กำลังใช้งานแบบเต็มจอเพียงหนึ่งตัว และสลับได้ทันทีสูงสุด 4 เซสชันด้วย Alt+1~4 (หรือแท็บบนเฮดเดอร์) เซสชันที่เหลือยังคงทำงานอยู่เบื้องหลัง จึงสลับแล้วไม่หลุดการเชื่อมต่อ
- การส่งคีย์บอร์ด: หากโฟกัสอยู่ที่เซสชันที่แอ็กทีฟ ระบบจะส่งคีย์ลัดระดับระบบอย่างปุ่ม Win หรือ Alt+Tab เข้าไปภายใน VM
- ป้องกัน UI ค้าง: แม้จะมีหน้าต่างยืนยันตัวตนแบบ modal ของไคลเอนต์ภายนอกเด้งขึ้นมา Main UI ก็จะไม่ค้าง โดยใช้คิวข้อความอิสระแทน
AttachThreadInputเพื่อหลีกเลี่ยง deadlock - การติดตามหน้าต่าง: เมื่อมีการเปลี่ยนเลย์เอาต์ เช่น การปรับขนาดหน้าต่างแอป ตำแหน่งของหน้าต่างภายนอกที่ฝังไว้จะตามไปด้วยผ่าน
requestAnimationFrame+ backend delta filtering
ยังมีฟีเจอร์อำนวยความสะดวกอื่น ๆ เช่น snapshot, ชื่อเล่น/โน้ตแยกตามรีโมตแอสเซ็ต, command palette, RDP, เปิด/ปิด Hyper-V
- สแตก / สภาพแวดล้อม
Tauri v2 + Rust + React 19
รองรับเฉพาะ Windows
หน้าแลนดิ้งเพจ : https://landinghyperdesk.netlify.app/ (Y2K)
- สิ่งที่ยังใช้ไม่ได้
สำหรับ VMware/Omnissa Horizon มีโค้ดสำหรับรันไคลเอนต์อยู่บางส่วน แต่ยังไม่ได้ทดสอบการใช้งานจริง โดยเฉพาะ Omnissa ที่ไม่ได้เป็นตัว VM เอง แต่มีลักษณะเป็นแดชบอร์ด ทำให้จับหน้าต่างได้ยาก จึงปิดการทำงานแบบฝังไว้ในตอนนี้
เพราะเป็นโปรเจกต์ทำข้างงาน จึงยังมีหลายจุดที่ขาดไป โดยเฉพาะข้อจำกัดของวิธี Window Swallowing เอง หรือแนวทางแบบนี้จะใช้งานในงานจริงได้อย่างเสถียรหรือไม่ ก็อยากฟังความเห็นมาก ๆ ถ้าใครเคยเจอปัญหาแนวนี้เหมือนกัน ฝากช่วยแนะนำด้วย ยินดีรับทุกฟีดแบ็กอย่างเต็มที่ !
ยังไม่มีความคิดเห็น