Show HN: KVM หลายจอที่ใช้เพียง USB Switch
(github.com/fiddyschmitt)- SimpleKVM เป็นโปรแกรมสำหรับ Windows ที่ช่วยให้ควบคุมคอมพิวเตอร์หลายเครื่องด้วยชุดคีย์บอร์ด เมาส์ และจอภาพชุดเดียว และเป็นทางเลือกที่ช่วยลดค่าใช้จ่ายของ KVM สำหรับความละเอียดสูงและรีเฟรชเรตสูง
- ผู้ใช้เพียงเชื่อมต่อคอมพิวเตอร์แต่ละเครื่องเข้ากับจอภาพ เชื่อมคีย์บอร์ดและเมาส์เข้ากับ USB Switch แล้วรัน SimpleKVM บนคอมพิวเตอร์เครื่องหนึ่ง
- การสลับทำได้ผ่านปุ่มบน USB Switch หรือ ฮอตคีย์ โดยโปรแกรมจะตรวจจับการเชื่อมต่อ·ถอดอุปกรณ์ USB หรือการกดฮอตคีย์
- การสลับอินพุตของจอภาพจัดการผ่าน คำสั่ง DDC/CI ที่จอภาพจำนวนมากรองรับ และยังรองรับการตั้งค่าแบบหลายจอด้วย
- ดาวน์โหลดได้จากส่วน releases บน GitHub และขณะนี้มีให้ใช้งานเฉพาะ Windows
ปัญหาที่ SimpleKVM แก้ไข
- SimpleKVM เป็นโปรแกรมสำหรับควบคุมคอมพิวเตอร์หลายเครื่องด้วยคีย์บอร์ด เมาส์ และจอภาพเพียงชุดเดียว
- KVM ทั่วไปมักมีราคาสูง โดยเฉพาะรุ่นที่รองรับ ความละเอียดสูง และ รีเฟรชเรตสูง
- SimpleKVM ทำให้สามารถใช้ร่วมกับ USB Switch ราคาประหยัดเพื่อสร้างชุดใช้งานที่ใกล้เคียงกันได้ โดยไม่ต้องจ่ายหลายร้อยดอลลาร์
การตั้งค่าที่ต้องใช้
- ผู้ใช้ตั้งค่าตามลำดับดังนี้
- เชื่อมต่อคอมพิวเตอร์เข้ากับจอภาพ
- เชื่อมเมาส์และคีย์บอร์ดเข้ากับ USB Switch
- รัน SimpleKVM บนคอมพิวเตอร์เครื่องใดเครื่องหนึ่ง
- หลังจากนั้นสามารถสลับระหว่างคอมพิวเตอร์ได้ด้วย USB Switch หรือ ฮอตคีย์
วิธีการทำงาน
- โปรแกรมจะตรวจจับช่วงเวลาที่อุปกรณ์ USB ถูกเชื่อมต่อหรือถอดออก
- การกดฮอตคีย์ก็ใช้เป็นตัวกระตุ้นการสลับได้เช่นกัน
- เมื่อสลับ โปรแกรมจะส่ง คำสั่ง DDC/CI ไปยังจอภาพเพื่อเปลี่ยนแหล่งสัญญาณเข้า
- DDC/CI เป็นวิธีที่จอภาพจำนวนมากรองรับ
หลายจอและสภาพแวดล้อมการทำงาน
- SimpleKVM รองรับ หลายจอ
- สามารถดาวน์โหลดรีลีสได้จากส่วน releases
- บิลด์ที่มีให้ในตอนนี้เป็น สำหรับ Windows
ตัวอย่าง USB Switch
- สามารถใช้ USB Switch รุ่นใดก็ได้
- ใน README มีการยกตัวอย่างผลิตภัณฑ์ต่อไปนี้โดยไม่มีความเกี่ยวข้องทางการค้า
- SABRENT 4 Port USB Switch for $29 USD: รองรับคอมพิวเตอร์ 4 เครื่อง
- 2 port USB switch for $24 USD: รองรับคอมพิวเตอร์ 2 เครื่อง
- 2 ports for for $3 USD: รองรับคอมพิวเตอร์ 2 เครื่อง, อินพุต USB มี 1 ช่อง
การตั้งค่าให้เริ่มพร้อมระบบและที่มา
- หากต้องการให้รันอัตโนมัติเมื่อเริ่มระบบ ให้คลิกปุ่มตั้งค่าแล้วเลือก Run at Startup
- SimpleKVM ได้แรงบันดาลใจจาก โปรแกรม display-switch ของ haimgel
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
อาจพูดได้แค่ว่า “ผมก็ได้ข้อสรุปเดียวกัน” แต่คอนฟิกของผมซับซ้อนกว่านิดหน่อย แลกกับที่ผมมองว่าดีกว่าและถูกกว่า
วิธีข้างต้นสำหรับผมทำได้ยากเพราะต้องติดตั้งบนคอมพิวเตอร์ทุกเครื่อง และพึ่งพาการสลับ USB จึงทริกเกอร์จากระยะไกลอย่างสมบูรณ์ไม่ได้
แต่ผมจัดการการสลับอินพุตของจอด้วย คำสั่ง DDC, USB ใช้ USB KVM ราคา 25 ดอลลาร์แบบปุ่มเดียว และอินพุตปุ่มใช้ macropad จาก AliExpress ราคา 5–15 ดอลลาร์
สินค้าสำเร็จรูปอย่าง Stream Deck แพงเกินไป ราคาเกิน 80 ดอลลาร์สำหรับปุ่มไม่กี่ปุ่ม ส่วน macropad ราคาถูกสามารถโปรแกรมได้ด้วยโปรเจกต์บน GitHub อย่าง https://github.com/rOzzy1987/MacroPad แทนซอฟต์แวร์ที่แถมมา
ปุ่มของ USB KVM ให้ FingerBot ราคา 16 ดอลลาร์หรือ Switchbot ราคา 28 ดอลลาร์เป็นตัวกด และ AHK คอยเฝ้าดูคีย์ลัดเพื่อทริกเกอร์คำสั่ง DDC พร้อมกับปุ่ม USB switch
ถึงจะมีดีเลย์ไม่กี่วินาที แต่ ควบคุมจากที่เดียวเท่านั้น และสั่งรันจากระยะไกลได้อย่างสมบูรณ์ด้วย
สุดท้ายมันค่อนข้างไม่นิ่ง และเรื่องอื่น ๆ ก็เละเทะกว่าเดิม เลยแทบจะยอมแพ้ไป
macropad เป็นไอเดียที่ดี และการหาตำแหน่งวาง USB switch ก็เป็นเรื่องน่ารำคาญเสมอ
ค่าส่งไปสหรัฐฯ ไม่รู้เท่าไร แต่ส่งยุโรปอยู่ที่ 15 ดอลลาร์
ระหว่างศึกษาข้อมูล KVM สุดท้ายก็ได้ข้อสรุปเดียวกันว่า DDC คือทางออก
กรณีของผมเป็น Windows สองเครื่องกับจอคู่ และใช้ NirSoft ControlMyMonitor ที่มี CLI ร่วมกับ Elgato Stream Deck
KVM ทั่วไปจะทำให้จอสองจอแสดงผลจากคอมพิวเตอร์เครื่องเดียวเท่านั้น แต่ผมอยากให้จอ A แสดงคอมเครื่องหนึ่ง จอ B แสดงอีกเครื่องหนึ่ง และสลับกันได้เมื่อจำเป็น
ผมใช้จอแนวตั้ง/แนวนอนร่วมกัน และอยากสลับเมาส์กับคีย์บอร์ดได้อย่างอิสระจากคอนฟิกของจอ
รันซอฟต์แวร์ Stream Deck บนคอมพิวเตอร์แต่ละเครื่อง และต่อ Stream Deck เข้ากับ USB switch
แม้แต่ USB switcher ธรรมดา ๆ ก็ยังค่อนข้างแพง และบางครั้งก็ต้องใช้ไดรเวอร์ที่ใช้กับ Linux ไม่ได้
เลยวาดแผงวงจรง่าย ๆ ที่มี USB hub กับ switch แบบรวดเร็ว แล้วให้โรงงาน DIY อย่าง JLCPCB หรือ PCBWay ผลิตและประกอบให้
สวิตช์ 2 ต่อ 1 แบบปุ่มเดียวจำนวน 5 ชิ้นราคา 25 ยูโร ทั้งที่ผมไม่มีประสบการณ์ออกแบบวงจรและไม่ได้บัดกรีเอง แต่มันทำงานได้สมบูรณ์แบบ
น่าจะเข้ากันได้ดีกับซอฟต์แวร์นี้ด้วย เลยอาจลองดูสักครั้ง
ผมว่าถูกกว่าทำแบบสั่งทำ
การหลีกเลี่ยงกราวด์กับ ground loop จากศักย์ไฟฟ้าที่ต่างกันน่าจะเป็นส่วนสำคัญทีเดียว
น่าสนใจที่ USB switcher บางตัวทำงานบน Linux ได้ไม่ดี
ผมนึกว่ามันเป็นแค่ USB hub ธรรมดา เลยไม่น่าต้องใช้ไดรเวอร์แยก แต่ผลิตภัณฑ์ที่มีฟีเจอร์ขั้นสูงอย่างการโอนไฟล์ระหว่างพีซีหรือแชร์เมาส์ เช่น https://www.aliexpress.com/item/1005006202631772.html มักต้องใช้ซอฟต์แวร์และไดรเวอร์เฉพาะ
มันเป็นอุปกรณ์ที่ “โง่” ที่สุดเท่าที่เป็นไปได้ ตามรีวิวหนึ่งบอกว่าถ้าเสียบเข้าออกบ่อยเกินไปพอร์ตอาจเริ่มไม่ค่อยนิ่งนิดหน่อย แต่กับจอ Dell P2419H สองตัวของผม ตอนนี้ยังทำงานได้สมบูรณ์แบบ
ผมเลือกตัวนี้เพราะสายทั้งหมดอยู่ด้านหลัง และรุ่นที่มีรีโมตบนหน้า GitHub ของ OP ก็ดูน่าจะโอเคเหมือนกัน
ระหว่างหาคอนฟิกคล้าย ๆ กัน ผมลองใช้และค้นข้อมูลมาหลายตัว แต่ไม่เจอรุ่นไหนที่ต้องใช้ไดรเวอร์เลย
ผมใช้ udev เพื่อจุดประสงค์นี้ เมื่อ USB switch ปรากฏขึ้น ก็ส่งคำสั่ง DDC
ACTION=="add", SUBSYSTEM=="usb", ENV{ID_VENDOR_ID}=="1a40", ENV{ID_MODEL_ID}=="0101", RUN+="/usr/bin/ddcutil --sn ABCDEFGHI setvcp 60 0x0f"KVM ที่ดี โดยเฉพาะผลิตภัณฑ์ของ Level1Tech จะคงสถานะให้มอนิเตอร์ทั้งหมดเหมือนเชื่อมต่อแบบเสมือนอยู่ตลอด ทำให้เมื่อสลับไปมาระหว่างเครื่อง ตำแหน่งหน้าต่างก็ยังคงเดิม
จากมุมมองของพีซีไคลเอนต์ อุปกรณ์ USB/DisplayPort ไม่เคยหายไป จึงไม่มีดีเลย์จากการเสียบอุปกรณ์ใหม่
อาจต่ออุปกรณ์ต่อพ่วงจำนวนมากเข้ากับด็อก แล้วสลับเฉพาะ upstream Thunderbolt ก็ได้ แต่วิธีนั้นทำงานได้ไม่ดี
KVM ห่วย ๆ ทำง่าย แต่ KVM ดี ๆ ทำยาก
ไม่เกี่ยวข้องกับ https://www.store.level1techs.com/products/hardware
เมื่อสลับระหว่าง Mac กับเครื่อง Linux (Gnome) เครื่อง Mac จะเข้าสลีป ส่วน Gnome จะกลับไปใช้การตั้งค่ามอนิเตอร์เริ่มต้นและย้ายตำแหน่งหน้าต่าง
มี KVM แบบ DP 1.2 ที่มี EDID emulation แต่จะเสียข้อดีของ DP 1.4 ไป
มีระบุไว้ในฟอรัม FAQ ด้วย: https://forum.level1techs.com/t/official-l1techs-kvm-faq-ult...
ถ้าใช้ร่วมกับอุปกรณ์ต่อพ่วงไร้สายที่ใช้ตัวรับสัญญาณ USB ก็จะได้ชุดที่แทบไม่ต้องมีสาย เหมาะดี และสำหรับโน้ตบุ๊ก เสียบสายเส้นเดียวก็เชื่อมต่อทุกอย่างได้
ใช้สลับไปมาระหว่างพีซีที่ทำงานกับพีซีส่วนตัววันละหลายครั้ง และจนถึงตอนนี้ทำงานได้สมบูรณ์กับเครื่อง Linux สองเครื่องบนจอมอนิเตอร์คู่ 4K 60Hz กับ 2K 144Hz
ต่อทั้ง USB audio, ไมโครโฟน, กล้อง 4K, พรินเตอร์, คีย์บอร์ด และเมาส์ไว้ด้วย
window manager ที่ดีพอจะฉลาดพอที่จะย้ายหน้าต่างกลับไปตำแหน่งเดิมเมื่อมอนิเตอร์กลับมา
ไม่เคยมีปัญหาสลับแหล่งสัญญาณล้มเหลวเลย และดีเลย์ที่คนอื่นพูดถึงก็มีแค่ขั้นตอน HDMI handshake ของมอนิเตอร์เองเท่านั้น
เคยมี TESmart ที่แพงกว่ามาก https://www.amazon.com/gp/product/B08N494N7X ด้วย แต่ใช้ไม่ได้เพราะมีปัญหาความเข้ากันได้แปลก ๆ กับชุด Thunderbolt dock https://www.amazon.com/gp/product/B08HR3T837 และ MBP
ติดต่อทีมซัพพอร์ตแล้ว แต่สุดท้ายก็หาสาเหตุไม่ได้
สิ่งที่ต้องระวังกับเครื่องมือแบบนี้คือ ใน DisplayPort โดยปกติจะอนุญาตให้ส่งคำสั่งได้เฉพาะกับ input ที่กำลังใช้งานอยู่เท่านั้น
พอสลับไป input อื่นแล้ว ก็จะสลับกลับมาไม่ได้ เว้นแต่จะรันจากคอมพิวเตอร์อีกฝั่งหนึ่ง ซึ่งยุ่งยาก
ในทางกลับกัน HDMI โดยปกติจะอนุญาตให้ส่งคำสั่ง DDC ไปยังพอร์ตที่ไม่ใช่ input ที่กำลังใช้งานได้ด้วย
ไม่รู้ว่าจำเป็นต้องเป็นแบบนั้นหรือไม่ แต่จอทุกตัวที่ผมเคยใช้เป็นแบบนั้น
เป็นโปรเจกต์ที่ผมต้องการพอดีเลย สงสัยเหมือนกันว่าจะสลับเฉพาะ Thunderbolt dock ได้ไหม
เช่น มีคอมพิวเตอร์สี่เครื่องที่รองรับ Thunderbolt แล้วสลับ USB-C เพียงเส้นเดียวระหว่างเครื่องเหล่านั้น
ยังไม่กล้าลองเพราะกลัวจะกระทบฮาร์ดแวร์ และพอได้แรงบันดาลใจจากบทความนี้ไปค้นหา Thunderbolt KVM ก็เจออย่าง https://sabrent.com/products/sb-tb4k กับ https://www.reddit.com/r/Thunderbolt/comments/11gos6n/kvm_sw...
ถ้ายอมรับดีเลย์ได้ ก็อาจทำงานได้
สรุปคือ คอมพิวเตอร์แต่ละเครื่องต้องเสียบ สาย HDMI ของตัวเองเข้ากับแต่ละ input ของมอนิเตอร์
ไม่ใช่ KVM จริง ๆ อย่างที่หลายคนคิด แต่เป็นวิธีที่ทำให้ไม่ต้องกดปุ่มเลือก input บนมอนิเตอร์
อย่างน้อยต้องมีเครื่องหนึ่งเปิดอยู่และรัน Windows แต่ดูเหมือนว่าแค่เครื่องเดียวก็น่าจะพอ
เมื่อมันตรวจพบว่าเสียบอุปกรณ์ USB ก็จะเปลี่ยน input ของมอนิเตอร์ไปยังคอมพิวเตอร์ Windows และเมื่อมันตรวจพบว่าถอดอุปกรณ์ USB ก็จะเปลี่ยนไปยังคอมพิวเตอร์ Linux
ตอนนี้ก็ใช้งานคล้าย ๆ กันอยู่แล้ว โดยกดปุ่มลัดให้รันสคริปต์เพื่อเปลี่ยนการหมุนจอด้วย xrandr
ก่อนจะกลับไปใช้คอมพิวเตอร์เครื่องเดียว ผมเคยถอดเสียบสายเอง ใช้สวิตช์ USB ของ Ugreen ที่ระบุไว้ใน README แล้วสุดท้ายก็ลงเอยกับ จอมอนิเตอร์ที่มี KVM ในตัว ซึ่งดีที่สุด
ปัญหาคือเวลาต้องการใช้จอเดียวกันทั้งทำงานและเล่นเกม
สวิตช์ KVM สำหรับ 4K หรือรีเฟรชเรตสูงนั้นแพงมากและมักไม่น่าเชื่อถือ จึงมักใช้สวิตช์ USB แล้วสลับอินพุตจอด้วยมือ
ซอฟต์แวร์นี้ช่วยลดการกดปุ่ม “เปลี่ยนแหล่งอินพุต” แต่ดูเหมือนจะรองรับเฉพาะ Windows ดังนั้นถ้าเครื่องทั้งสองฝั่งไม่ได้เป็น Windows ทั้งคู่ ก็จะสลับได้แค่ทิศทางเดียว และตอนกลับมาต้องสลับด้วยมือ
จอที่เหมาะกับการเล่นเกม พร้อม DPI สูง รีเฟรชเรตสูง และมี KVM ในตัว มี Gigabyte M28U
กดปุ่มเดียวแล้วแหล่งอินพุตกับอุปกรณ์ USB รอบข้างจะสลับไปพร้อมกัน และทำงานได้ค่อนข้างดี
มี M32U ด้วย แต่ DPI ต่ำกว่า
เพราะมันตรวจจับได้ว่าอุปกรณ์ USB ถูกถอดออกไป ซึ่งหมายถึงย้ายไปอีกเครื่องแล้ว และถูกเสียบเข้ามา ซึ่งหมายถึงกลับมาที่เครื่องนี้แล้ว
ผมก็ทำของคล้าย ๆ กันเอง และทำให้ทำงานได้โดยไม่ต้องใช้สวิตช์ USB หรือฮาร์ดแวร์อื่น
ส่ง คำสั่ง DDC ไปยังจอ HDMI/USB-C และส่ง HID++ bytecode ไปยังคีย์บอร์ดกับเมาส์ Logi MX
โค้ดยุ่งเกินกว่าจะแชร์ได้ แต่ถ้าใครอยากทำเอง ก็จัดโครงสร้างโดยส่งลำดับไบต์สำหรับสลับไปยังแต่ละโฮสต์ให้กับ Logi Bolt Receiver, Logitech Unified Receiver, MX Keys Mini Bluetooth, MX Anywhere 3 Bluetooth
ชุดที่ใช้อยู่ตอนนี้คือจอ Dell U2415 สองตัวกับเดสก์ท็อป Linux x86_64 และใช้เมาส์แนวตั้ง Logi ที่รองรับทั้ง Bluetooth และดองเกิล รวมถึงคีย์บอร์ด ATK(A.JAZZ)
อยากแชร์คีย์บอร์ด/จอ/เมาส์ด้วยซอฟต์แวร์ล้วน ๆ ผ่าน Bluetooth และพอร์ต micro-HDMI สองพอร์ตของ Raspberry Pi 5 และไม่อยากจ่ายเงินก้อนใหญ่กับฮาร์ดแวร์ KVM