6 คะแนน โดย GN⁺ 2023-12-28 | 1 ความคิดเห็น | แชร์ทาง WhatsApp

DeskHop - สลับเดสก์ท็อปอย่างรวดเร็ว

  • ฟรีและโอเพนซอร์ส
  • แทบไม่มีความหน่วงขณะสลับ
  • สามารถลากเมาส์พอยน์เตอร์ข้ามระหว่างคอมพิวเตอร์เพื่อสลับได้
  • ไม่ต้องติดตั้งซอฟต์แวร์
  • ใช้ชิ้นส่วนราคาถูกและหาซื้อง่าย (ต่ำกว่า 15 ยูโร)
  • เคสแบบ snap-fit ที่พิมพ์ด้วยเครื่องพิมพ์ 3D ได้
  • มีการแยกวงจรแบบ galvanic isolation อย่างสมบูรณ์ระหว่างเอาต์พุต
  • ทำงานได้บน Linux, macOS และ Windows

หลักการทำงาน

  • อุปกรณ์ทำหน้าที่เป็นตัวกลางระหว่างคีย์บอร์ด/เมาส์กับคอมพิวเตอร์ และรักษาการเชื่อมต่อกับคอมพิวเตอร์ทั้งสองเครื่องพร้อมกัน
  • ตัดสินใจว่าจะส่งอินพุตจากเมาส์และคีย์ไปยังคอมพิวเตอร์เครื่องใดตามที่ผู้ใช้เลือก
  • เมื่อคุณลากเมาส์ไปยังเดสก์ท็อปอีกฝั่ง คีย์บอร์ดจะสลับตามโดยอัตโนมัติ

เมาส์

  • เปลี่ยน mouse HID report descriptor ให้ใช้พิกัดแบบสัมบูรณ์ และสะสม mouse report (การเคลื่อนที่แบบสัมพัทธ์) ภายในเพื่อคงตำแหน่งให้แม่นยำ
  • หากพยายามเลื่อนออกนอกพื้นที่จอไปทางจออีกฝั่ง จะคงค่า Y ไว้ เปลี่ยนค่า X สูงสุดเป็นค่า X ต่ำสุด แล้วสลับเอาต์พุต
  • ทำให้เคอร์เซอร์ไปปรากฏที่ระดับความสูงเดียวกันบนอีกจอหนึ่ง เพื่อให้รับรู้การสลับได้อย่างลื่นไหล

คีย์บอร์ด

  • ในฐานะ USB host ระบบจะโพลคีย์บอร์ดเป็นระยะ และตรวจหาปุ่มลัดที่ตั้งค่าไว้ล่วงหน้า (เช่น Caps Lock) เพื่อส่งอักขระไปยังอีกเอาต์พุตหนึ่ง
  • นำ LED ของคีย์บอร์ดมาใช้เป็นฟีดแบ็ก เพื่อให้มองเห็นได้ว่ากำลังใช้งานเอาต์พุตใดอยู่
  • จดจำสถานะ LED ของคอมพิวเตอร์แต่ละเครื่องไว้ ทำให้กลับไปทำงานต่อได้ด้วยสถานะเดิม

การใช้ image ที่ build ไว้ล่วงหน้า

  • สามารถใช้ image ที่ build ไว้ล่วงหน้าได้
  • เสียบบอร์ด Pico เข้ากับสล็อต A ของ PCB แล้วกดปุ่มบนบอร์ดค้างไว้ขณะต่อสาย จากนั้นระบบจะมองเห็นเป็น USB drive
  • คัดลอกไฟล์ board_A.uf2 ที่ตรงกับรุ่น และทำซ้ำแบบเดียวกันสำหรับ B

การอัปเกรดเฟิร์มแวร์

  • ตัวเลือก 1: เปิดเคส แล้วคัดลอกไฟล์ uf2 ที่ถูกต้องขณะกดปุ่มค้างไว้ระหว่างเชื่อมต่อ Pico แต่ละตัว
  • ตัวเลือก 2: ใช้คีย์ผสมเฉพาะ (Right Shift, P, H, X, Left Shift) เพื่อเข้าสู่โหมด BOOTSEL และสลับ Picos ไปยังโหมดอัปเกรดบูตโหลดเดอร์

ฟีเจอร์อื่น ๆ

  • เมื่อต้องการปรับเมาส์อย่างละเอียด หากกด Right ALT ค้างไว้ระหว่างขยับเมาส์ ความเร็วเมาส์จะลดลงมาก ทำให้ทำงานที่ต้องการความแม่นยำได้

ฮาร์ดแวร์

  • วงจรมีราคาถูก (ชิ้นละ 4.10 ยูโร) บัดกรีด้วยมือได้ และอิงจากบอร์ด Raspberry Pi Pico สองตัวที่ซัพพลายเออร์ส่วนใหญ่มีสต็อก
  • Picos เชื่อมต่อกันผ่าน UART โดยใช้ Analog Devices ADuM1201 digital isolator แบบดูอัลแชนเนล (~3 ยูโร)
  • สามารถทำงานเป็นทั้ง USB host และ device ได้ ต้องขอบคุณโปรเจกต์อันน่าทึ่งที่นำ USB มาใช้งานด้วย programmable I/O ของ RP2040

PCB

  • เพื่อให้การประกอบแบบ DIY ง่ายที่สุด จึงวางลายวงจรไว้เพียงด้านเดียวและลดจำนวนชิ้นส่วนให้เหลือน้อยที่สุด
  • แม้สาย differential USB D+/D- ต้องมีความยาวเท่ากัน แต่บนตัว PICO PCB เองมีการทำให้ไม่สมมาตรเล็กน้อยโดยตั้งใจ เพื่อชดเชยความต่างของความยาวลาย GPIO ที่เกี่ยวข้องและให้ความยาวรวมสอดคล้องกัน

เคส

  • เนื่องจากไม่ได้ถนัดงาน 3D modeling มากนัก เคสจึงเรียบง่ายและพื้นฐาน แต่ใช้งานได้ตรงตามวัตถุประสงค์
  • พิมพ์ง่าย ใช้เส้นฟิลาเมนต์ประมาณ 33 กรัม และใช้เวลาเพียงไม่กี่ชั่วโมง
  • การขยับในแนวนอนของ PCB ถูกกันไว้ด้วยพินที่ลอดผ่านรู ส่วนการขยับในแนวตั้งถูกกันด้วยเดือย snap-fit ด้านข้าง จึงไม่ต้องใช้สกรู
  • คอนเน็กเตอร์ micro USB ยื่นออกจากด้านข้างของเคส จึงสามารถทำรูให้ใหญ่ขึ้นเล็กน้อยเพื่อให้สายลอดเข้าได้
  • ฝาเป็นดีไซน์ snap-fit และมีช่องสำหรับไขควงเพื่อใช้เปิด
  • เครื่องหมายด้านบนเป็นแบบจมลงไป จึงสามารถแต่งด้วยสีเทียนหรือวัสดุอื่นเพื่อเพิ่มความคอนทราสต์ได้ (หรือจะปล่อยไว้แบบเดิมก็ได้)

รายการวัสดุ

  • Raspberry Pi Pico 2 ตัว, ADuM1201BRZ 1 ตัว, Cap 1206 SMD 100nF 2 ตัว, คอนเน็กเตอร์ USB-A PCB 2 ตัว, Headers 2.54 1x03 2 ตัว
  • ราคารวม: 11.53 ยูโร
  • คอนเน็กเตอร์ USB-A สามารถใช้ Molex MX-67643-0910 หรือทางเลือกที่ถูกกว่าซึ่งมีขนาดเท่ากันได้
  • ขั้นตอนเพิ่มเติม: ผลิต PCB (มี Gerber ให้, JLC ผลิตได้ในราคาไม่กี่ดอลลาร์, เลือกความหนา 1.6mm), พิมพ์เคส 3D (มีไฟล์ stl ให้, ใช้ฟิลาเมนต์ประมาณ 33 กรัม)

FAQ

  1. ถ้ามีแค่ Pico สองตัวโดยไม่มี PCB และ isolator จะใช้งานได้ไหม?
    • แนะนำให้มี isolator แต่ถึงไม่มีก็อาจใช้งานได้
  2. ถ้าความละเอียดของจอไม่เท่ากันจะเกิดอะไรขึ้น?
    • การเคลื่อนที่ของเมาส์ทำในพื้นที่พิกัดเชิงนามธรรม และคอมพิวเตอร์จะคำนวณการแมปกับหน้าจอจริงเอง ดังนั้นควรทำงานได้ไม่มีปัญหา
  3. ซื้อผลิตภัณฑ์นี้ได้ที่ไหน?
    • ไม่มีการวางจำหน่าย และเป็นโปรเจกต์งานอดิเรกส่วนตัวที่ไม่ใช่เชิงพาณิชย์
  4. เมื่อหน้าจอที่ active ด้วยเมาส์เปลี่ยน คีย์บอร์ดจะย้ายตามไปด้วยหรือไม่ (และในทางกลับกันด้วยหรือไม่)?
    • ใช่ ถูกออกแบบมาให้ทำงานเหมือนเป็นคอมพิวเตอร์เครื่องเดียว
  5. ใช้งานร่วมกับคอมโบดองเกิลคีย์บอร์ด/เมาส์ เช่น Logitech Unifying Receiver ได้หรือไม่?
    • ในเวอร์ชันปัจจุบัน ใช้งานไม่ได้ เพราะสมมติว่าเมาส์เชื่อมต่ออยู่คนละพอร์ต จำเป็นต้องศึกษาการทำงานของ Logitech Unifying Receiver และเพิ่มการรองรับ
  6. ใช้งานร่วมกับเมาส์และคีย์บอร์ดไร้สายที่มีรีซีฟเวอร์แยกกันได้หรือไม่?
    • ยังไม่ได้ทดสอบกรณีนี้ จึงอาจมีปัญหาที่ไม่คาดคิดเกิดขึ้นได้ แต่ในทางทฤษฎีควรใช้งานได้ทันที

ข้อเสีย

  • ข้อควรทราบ: หากจะใช้ฟีเจอร์นี้ คอมพิวเตอร์ทั้งสองเครื่องต้องเชื่อมต่อและเปิดอยู่ (เพราะแต่ละบอร์ดรับไฟจากคอมพิวเตอร์ที่ต่ออยู่)
  • ยังต้องมีการจัดระเบียบโค้ด, รีแฟกเตอร์ และอื่น ๆ
  • มีบั๊กและพฤติกรรมแปลก ๆ เกิดขึ้นเป็นครั้งคราว
  • ยังไม่ได้ทดสอบกับอุปกรณ์หลากหลาย จึงไม่ทราบว่าจะทำงานกับฮาร์ดแวร์ของผู้ใช้ได้อย่างไร
  • Pico-PIO-USB ถูกแพตช์เพื่อรองรับการควบคุม LED ของคีย์บอร์ด ซึ่งตามปกติแล้วในโหมด host จะถูกจัดการโดย TinyUSB

ข้อจำกัดความรับผิดชอบ

  • ผู้ที่ทดลองทำโปรเจกต์นี้ต้องเข้าใจและยอมรับว่าผู้สร้างจะไม่รับผิดชอบต่อการบาดเจ็บ ความเสียหาย หรือผลลัพธ์อื่นใดทั้งหมด
  • ความปลอดภัยเป็นสิ่งสำคัญ จึงควรใช้มาตรการป้องกันที่จำเป็นและรับผิดชอบต่อความปลอดภัยของตนเองตลอดทั้งโปรเจกต์
  • ระวังไฟดูด แผลไหม้ ความเครียด หรืออารมณ์เสีย และขอให้ทำอย่างสนุกและเพลิดเพลิน

GN⁺ ความเห็น:

  • บทความนี้อาจมีประโยชน์มากสำหรับผู้ที่ใช้คอมพิวเตอร์สองเครื่อง โดยเฉพาะผู้ใช้ที่ต้องการแชร์คีย์บอร์ดและเมาส์ชุดเดียวเพื่อเพิ่มประสิทธิภาพการทำงาน
  • ความเป็นโอเพนซอร์สและแนวทางแบบ DIY ทำให้เป็นโปรเจกต์ที่น่าสนใจสำหรับผู้ที่สนใจเทคโนโลยี ผู้ใช้สามารถปรับแต่งและพัฒนาระบบให้เหมาะกับความต้องการของตนเองได้
  • โปรเจกต์นี้แสดงให้เห็นถึงจิตวิญญาณแห่งนวัตกรรมของชุมชนในการแก้ปัญหาทางเทคนิค เมื่อผู้ใช้ลงมือแก้ปัญหาด้วยตนเองและแบ่งปันกระบวนการ ก็ทำให้ผู้อื่นได้รับประโยชน์ไปด้วย

1 ความคิดเห็น

 
GN⁺ 2023-12-28
ความคิดเห็นจาก Hacker News
  • น่าสนใจตรงที่สามารถตรวจจับขอบหน้าจอได้โดยไม่ต้องมีซอฟต์แวร์ฝั่งไคลเอนต์

    • เพื่อให้เคอร์เซอร์เมาส์ข้ามหน้าจอได้อย่างกับเวทมนตร์ จึงมีการเปลี่ยนตัวอธิบายรายงานเมาส์ HID ให้ใช้พิกัดแบบสัมบูรณ์ และรายงานเมาส์ที่เข้ามาเป็นการเคลื่อนไหวแบบสัมพัทธ์จะถูกสะสมภายในเพื่อคงตำแหน่งให้แม่นยำ
    • ทำงานคล้าย SynergyKM/Barrier แต่ไม่ต้องใช้ฟังก์ชันคลิปบอร์ดหรือซอฟต์แวร์ฝั่งไคลเอนต์
  • ใช้โซลูชันซอฟต์แวร์ชื่อ Synergy มานานกว่าสิบปีแล้ว สลับได้ทันทีผ่าน Wi-Fi และใช้งานข้าม Windows/Mac/Linux ได้ด้วย

  • เวลาพยายามเลื่อนสไลเดอร์ใน YouTube ไปยังตำแหน่งที่ต้องการให้แม่น เมาส์มักไวเกินไปจนต้องขยับมืออย่างระมัดระวังมาก

    • ใน YouTube สามารถใช้ปุ่มลูกน้ำ (,) และจุด (.) เพื่อเลื่อนวิดีโอทีละเฟรมได้โดยไม่ต้องมีฮาร์ดแวร์พิเศษ
  • บน Windows สามารถใช้เครื่องมือชื่อ Mouse Without Borders ที่พัฒนาโดย Microsoft Garage และตอนนี้เป็นส่วนหนึ่งของ Windows PowerToys ได้

  • ได้แรงบันดาลใจจากโปรเจ็กต์คล้ายกันอื่น ๆ เลยทำเวอร์ชันของตัวเองขึ้นมา

    • โปรแกรมหนึ่งรันบนเดสก์ท็อป Linux และรับเหตุการณ์อินพุตจาก Linux input subsystem (evdev) เมื่อกดคีย์หนึ่ง มันจะกินทุกเหตุการณ์แล้วส่งผ่าน USB serial ไปยัง RPI Pico เมื่อกดคีย์อีกครั้งก็จะสลับเป็นโหมดรับฟังแบบพาสซีฟ
    • RPI Pico ถูกโปรแกรมให้แปลงเหตุการณ์ Linux evdev เป็นเหตุการณ์ USB HID แล้วส่งต่อไปยัง Windows PC อีกเครื่อง
    • ผลลัพธ์คือกลายเป็น KM switch ที่สลับได้ทันทีระหว่าง Linux PC กับ PC ที่รัน OS ตามต้องการ
    • ในฐานะคนที่เพิ่งเริ่มด้านฮาร์ดแวร์ คิดว่าโปรเจ็กต์นี้เป็นโปรเจ็กต์เริ่มต้นที่ดีสำหรับมือใหม่คนอื่น ๆ เพราะต้องใช้สายแค่ 2 เส้นเท่านั้น
  • เคยซื้อ USB hub มา 4 ตัวเพื่อสลับคีย์บอร์ดกับเมาส์ แต่ส่วนใหญ่แย่มากจนต้องถอดเสียบฮับใหม่จริง ๆ วันละหลายรอบ

    • กำลังใช้ซอฟต์แวร์ Synergy ซึ่งทำงานได้ดี แต่ต้องการ KVM ที่ดีจริงและรองรับเว็บแคม ไมโครโฟน อุปกรณ์เสียง ฯลฯ
    • คนใช้ KVM สมควรได้รับตัวเลือกที่ดีกว่านี้แน่นอน
  • หนึ่งในเรื่องที่น่าหงุดหงิดมากคือการใช้ USB 3.0 switch เพื่อสลับอินพุตเมาส์และคีย์บอร์ดระหว่าง PC สองเครื่อง

    • ระหว่างประชุม Teams ถ้ามีคนเรียกชื่อหรือมีข้อความเข้า ก็ต้องรีบคลำหาปุ่มเพื่อสลับอินพุตไปยัง PC ที่กำลังรัน Teams
    • เคยมีไอเดียจะต่อ ESP32 หรือ Rpi Pico W เข้ากับขาปุ่มของ USB switch แล้วสลับอินพุตระหว่างสองเครื่องผ่าน HTTP endpoint แต่หาวิธีระบุไม่ได้ว่าอินพุตฝั่งไหนกำลังแอ็กทีฟอยู่ เลยล้มเลิกไป
  • ตอนนี้ใช้ KVM switch อยู่ และเพราะการสลับใช้เวลา 2-3 วินาที เลยเลือก SSH เข้าอีกเครื่องแล้วใช้ tmux session แทนเป็นส่วนใหญ่

  • นี่เป็นพัฒนาการที่ยอดเยี่ยม

    • ในฐานะคนที่ใช้เดสก์ท็อปแบบวางกล่อง Lin-Mac-Win เรียงจากซ้ายไปขวามานาน การตั้งค่าแบบนี้ยิ่งทำได้ง่ายขึ้นในช่วงไม่กี่ปีที่ผ่านมาเมื่อการออกแบบ SoC แพร่หลายมากขึ้น
    • ชุดปัจจุบันประกอบด้วยเครื่อง Ryzen SoC เลียนแบบ Mac-mini 2 เครื่องจากเซินเจิ้น เครื่องละ $250 และ M1 MBP
    • น่าเสียดายที่โลกของโซลูชัน KVM แบบโอเพนซอร์สที่เคยรุ่งเรือง กลับเสื่อมถอยจนกลายเป็นฝันร้ายแบบแตกฟอร์กซ้ำซ้อน ทำให้หา KVM แบบซอฟต์แวร์โอเพนซอร์สข้ามแพลตฟอร์มที่ใช้งานได้ฟรียากขึ้น
    • ตอนนี้ยังใช้ KVM switch แบบ 'ดั้งเดิม' ที่ดีอยู่ แต่การต้องกดปุ่มก็ยังเป็นตัวขัดจังหวะ
  • Synergy แก้ปัญหานี้ได้ดีด้วยซอฟต์แวร์ล้วน ๆ ไม่ฟรีและไม่ใช่โอเพนซอร์ส แต่ราคาค่อนข้างย่อมเยา