6 คะแนน โดย GN⁺ 2023-12-28 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • DeskHop คือโปรเจ็กต์ฮาร์ดแวร์โอเพนซอร์สที่ช่วยสลับเป้าหมายการรับอินพุตได้อย่างรวดเร็วด้วยคีย์ลัดและการเลื่อนเมาส์ แทนการใช้ USB สวิตช์แบบปุ่มกด เมื่อคอมพิวเตอร์สองเครื่องใช้คีย์บอร์ด/เมาส์ร่วมกัน
  • อุปกรณ์ทำหน้าที่เป็นทั้ง USB Host/Device ระหว่างคีย์บอร์ด/เมาส์กับคอมพิวเตอร์สองเครื่อง โดยคงการเชื่อมต่อทั้งสองฝั่งไว้พร้อมกัน แล้วส่งการเคลื่อนที่ของเมาส์และการกดปุ่มไปยังเอาต์พุตที่เลือก
  • การสลับเมาส์ทำโดยเปลี่ยน HID report descriptor ให้เป็นพิกัดแบบ absolute และสะสมค่าการเคลื่อนที่แบบ relative ภายใน เพื่อให้เมื่อข้ามขอบหน้าจอ เคอร์เซอร์ไปโผล่บนหน้าจอของอีกเครื่องที่ระดับความสูงเดียวกัน
  • จุดเด่นหลักคือแทบไม่รู้สึกถึงดีเลย์, ไม่ต้องติดตั้งซอฟต์แวร์, รองรับ Linux/macOS/Windows, ใช้อะไหล่ราคาไม่ถึง 15€, มีเคสพิมพ์ 3D และมี galvanic isolation ระหว่างเอาต์พุต
  • ข้อจำกัดก็ชัดเจนเช่นกัน: หลัง Windows 10 KB5003637 มีปัญหาพิกัด absolute กับหลายจอ, macOS แบบหลายจอต้องใช้วิธีแก้ชั่วคราวเชิงทดลอง และยังไม่รับประกันความเข้ากันได้กับคีย์บอร์ดขั้นสูง เมาส์ที่มีปุ่มจำนวนมาก และอุปกรณ์หลากหลายประเภท

ฮาร์ดแวร์สวิตช์สำหรับสลับไปมาระหว่างคอมพิวเตอร์สองเครื่องอย่างรวดเร็ว

  • DeskHop เป็นโปรเจ็กต์ที่เริ่มจากกรณีใช้งานของคนที่ใช้คอมพิวเตอร์สองเครื่องทุกวันและต้องการแชร์คีย์บอร์ด/เมาส์ชุดเดียวกัน
  • มีเป้าหมายเพื่อแก้ปัญหาของ USB switching box แบบเดิมที่ใช้เวลาตอนสลับ และไม่สะดวกเพราะต้องคอยหาปุ่ม
  • พฤติกรรมที่ต้องการมีสองแบบ
    • สลับเอาต์พุตด้วย คีย์ลัดบนคีย์บอร์ด
    • ลากเมาส์พอยน์เตอร์ข้ามระหว่างจอเพื่อสลับอัตโนมัติ
  • ออกแบบมาให้ทำงานได้แม้คอมพิวเตอร์ทั้งสองใช้ระบบปฏิบัติการต่างกัน
  • มี User Manual

ฟีเจอร์หลัก

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

วิธีการทำงาน

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

การทำงานของการสลับเมาส์

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

การสลับคีย์บอร์ดและสถานะ LED

  • อุปกรณ์ทำงานเป็น USB Host และโพลคีย์บอร์ดเป็นระยะ
  • หากพบคีย์ลัดที่ตั้งไว้ล่วงหน้าใน HID report ระบบจะส่งตัวอักษรถัดไปไปยังอีกเอาต์พุต
    • ตัวอย่างการใช้งานคือ Ctrl + Caps Lock
  • สามารถนำ LED บนคีย์บอร์ดกลับมาใช้เพื่อแสดงว่าใช้งานเอาต์พุตใดอยู่
  • ระบบจำสถานะ LED ของแต่ละคอมพิวเตอร์ไว้ จึงกลับไปใช้สถานะเดิมต่อได้

การบิลด์และอัปเดตเฟิร์มแวร์

  • เพื่อลดปัญหาเวอร์ชันไม่ตรงกันและปัญหา path รวมถึงหลีกเลี่ยงการดาวน์โหลด SDK ขนาดใหญ่ จึงมี pico sdk ขั้นต่ำและ tinyusb รวมมาให้ในตัว
  • บน Debian/Ubuntu ต้องติดตั้ง build-essential, cmake, gcc-arm-none-eabi, libnewlib-arm-none-eabi, python3
  • การบิลด์พื้นฐานใช้คำสั่งต่อไปนี้
    • cmake -S . -B build
    • cmake --build build
  • ยังมีการบิลด์แบบทำซ้ำได้ผ่าน Docker ด้วย
    • docker-compose -f misc/docker.yml run --rm build_container
  • หรือจะใช้ pre-built images ก็ได้
    • ตั้งแต่เวอร์ชัน 0.6 เป็นต้นไป มีอิมเมจสากลแบบเดียวให้ใช้
    • ใช้งานโดยคัดลอกไฟล์ .uf2 ไปยังอุปกรณ์

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

  • Option 1: สำหรับ firmware 0.6 ขึ้นไป ให้กด left ctrl + right shift + c + o เพื่อเข้า config mode
    • อุปกรณ์ฝั่งที่ต่อคีย์บอร์ดจะรีบูตและปรากฏเป็นไดรฟ์ USB ชื่อ DESKHOP
    • เมื่อคัดลอกไฟล์ .uf2 ระบบจะตรวจสอบอิมเมจก่อน จากนั้นแฟลชและรีบูต แล้วทำการอัปเกรดบอร์ดอีกฝั่งต่อ
    • ไดรฟ์นี้ไม่ใช่อุปกรณ์เก็บข้อมูล USB ทั่วไป จึงใช้เก็บไฟล์ไม่ได้
  • Option 2: ใช้ ROM bootloader โดยกดปุ่มบนบอร์ดของ Pico แต่ละตัวค้างไว้ขณะเชื่อมต่อ แล้วคัดลอก .uf2 ไปยังแฟลชไดรฟ์ที่ปรากฏ
  • Option 3: ใน debug build ที่บิลด์ด้วย DH_DEBUG_CDC_FLASH=ON สามารถเข้า bootloader mode ผ่านคำสั่ง CDC serial ได้
    • echo -n 'flash' > /dev/tty.usbmodem11104

ฟีเจอร์เสริม

  • Mouse slowdown

    • สลับโหมดเมาส์ช้าด้วย right CTRL + right ALT
    • ลดความเร็วพอยน์เตอร์ลงมากเมื่อจำเป็นต้องจัดตำแหน่งอย่างละเอียด
  • Switch Lock

    • ล็อกให้อยู่กับหน้าจอปัจจุบันด้วย RIGHT CTRL + K
    • ป้องกันการเผลอข้ามไปอีกหน้าจอ
  • Lock Both Screens

    • ล็อกคอมพิวเตอร์ทั้งสองเครื่องพร้อมกันได้ด้วย RIGHT CTRL + L
    • ต้องตั้งค่าระบบปฏิบัติการของแต่ละเอาต์พุตก่อน
  • Gaming Mode

    • สลับด้วย LEFT CTRL + RIGHT SHIFT + G
    • ระบบจะล็อกอยู่กับหน้าจอปัจจุบันและทำให้เมาส์ทำงานแบบเมาส์ relative มาตรฐาน
    • เป็นโหมดสำหรับจัดการเกม, เครื่องเสมือน, และปัญหาของระบบปฏิบัติการที่ยังไม่รองรับซึ่งไม่เข้ากับโหมดเมาส์ absolute
  • Screensaver

    • ค่าเริ่มต้นคือปิดอยู่
    • เมื่อเปิดใช้งาน หลังไม่มีการใช้งานช่วงหนึ่ง เมาส์พอยน์เตอร์จะเด้งไปมาบนหน้าจอเหมือนลูก Pong
    • หากส่งอินพุตไปยังหน้าจอนั้น ระบบจะปิดให้อัตโนมัติ

องค์ประกอบฮาร์ดแวร์

  • วงจร อิงจากบอร์ด Raspberry Pi Pico สองตัว
    • เลือก Pico เพราะราคาถูกเพียง 4.10€ ต่อตัว บัดกรีด้วยมือได้ และหาซื้อได้ง่าย
  • Pico ทั้งสองตัวเชื่อมต่อกันผ่าน UART
  • ทั้งสองฝั่งถูกแยกออกจากกันด้วย digital isolator
    • Analog Devices ADuM1201 ราคาประมาณ 3€
    • TI ISO7721DR ราคาประมาณ 1.5€ ถูกกว่า เร็วกว่า และ pin-compatible จึงเป็นตัวเลือกที่ชอบมากกว่า
  • โดยปกติ RP2040 ไม่รองรับ dual USB แต่ใช้ Pico-PIO-USB เพื่อทำ USB ผ่าน PIO และรับบทเป็นทั้ง USB Host และ Device ได้พร้อมกัน

PCB และเคส

  • เพื่อให้ทำแบบ DIY ได้ง่าย ลายวงจร PCB ถูกวางไว้ด้านเดียวและลดจำนวนชิ้นส่วนให้เหลือน้อยที่สุด
  • ตามหลักแล้วสาย differential ของ USB D+/D- ควรยาวเท่ากัน แต่ที่นี่จงใจออกแบบให้ไม่สมมาตรเล็กน้อยเพื่อชดเชยความต่างของความยาวลาย GPIO บน PCB ของ Pico
  • เป้าหมาย differential impedance คือ 90Ω และของจริงทำได้ประมาณ 107Ω
  • ความหนา PCB ออกแบบไว้ที่ 1.6mm เพื่อให้พอดีกับเคสแบบ snap-fit
  • PCB v1.1 เพิ่มสิ่งต่อไปนี้เมื่อเทียบกับ v1.0
    • ESD protection TPD4E1U06DBVR
    • VBUS capacitor สำหรับคอนเนกเตอร์คีย์บอร์ด/เมาส์
    • สัญลักษณ์บอกทิศทางบน silkscreen
    • รูและการจัดแนวที่ดีขึ้นสำหรับบอร์ด clone ที่บัดกรี header มาแล้ว
    • ตัวต้านทาน USB 27Ω
  • v1.1 บัดกรีด้วยมือยากขึ้นเล็กน้อยเพราะมี TVS IC ขนาดเล็กและตัวต้านทาน 0805
  • มีเคสให้ที่ case ใช้เส้นพลาสติกประมาณ 33g และพิมพ์เสร็จได้ภายในไม่กี่ชั่วโมง
  • ยึดด้วยโครงสร้าง snap-fit โดยไม่ต้องใช้สกรู และมีช่องบนฝาที่เปิดด้วยไขควงได้

ราคาและชิ้นส่วน

  • BOM รวมของ PCB v1.1 ระบุไว้ที่ 11.22€
  • ชิ้นส่วนหลักมีดังนี้
    • Raspberry Pi Pico 2 ตัว: 8.20€
    • USB-A PCB connector 2 ตัว: 0.40€
    • TI ISO7721DR 1 ตัว: 1.40€
    • คาปาซิเตอร์ 100nF 2 ตัว: 0.18€
    • ตัวต้านทาน 27Ω 4 ตัว: 0.12€
    • TPD4E1U06DBVR 2 ตัว: 0.62€
    • คาปาซิเตอร์ 4.7uF 2 ตัว: 0.14€
    • 2.54mm 1x03 header 2 ตัว: 0.16€
  • นอกจากนี้ยังต้องผลิต PCB เพิ่มเอง โดยมี Gerber ให้
  • และมี ไฟล์ STL สำหรับพิมพ์ 3D ด้วย

คีย์ลัดและการตั้งค่า

  • คีย์ลัดหลักใน firmware 0.68 ขึ้นไปมีดังนี้
    • Left Ctrl + Right Shift + C + O: เข้า config mode
    • Right Shift + F12 + D: ลบการตั้งค่าจากแฟลช
    • Right Shift + F12 + Y: บันทึก offset ของการสลับหน้าจอ
    • Right CTRL + Right ALT: สลับโหมดเมาส์ช้า
    • Right CTRL + K: ล็อก/ปลดล็อกการสลับเดสก์ท็อปของเมาส์
    • Right CTRL + L: ล็อกทั้งสองเอาต์พุตพร้อมกัน
    • Left CTRL + Right Shift + G: สลับ gaming mode
    • Left CTRL + Right Shift + S: เปิด screensaver
    • Left CTRL + Right Shift + X: ปิด screensaver
    • Left CTRL + Caps Lock: สลับเอาต์พุต
  • คีย์ลัดถูกเปลี่ยนเพราะคีย์บอร์ดบางรุ่นส่งการกด Shift ทั้งสองข้างพร้อมกันได้ไม่ถูกต้อง

โหมดตั้งค่าผ่านเว็บ

  • ตั้งแต่ firmware 0.6 มีการเพิ่ม configuration mode ที่ปรับปรุงใหม่
  • เมื่อกด Left Ctrl + Right Shift + C + O อุปกรณ์จะรีบูตและเข้าสู่โหมดตั้งค่า
  • จะมีไดรฟ์ USB ชื่อ DESKHOP ปรากฏขึ้น และข้างในมีไฟล์ config.htm เพียงไฟล์เดียว
  • ต้องเปิดไฟล์นี้ด้วย Chromium หรือ Chrome
    • Firefox ยังไม่รองรับในตอนนี้ เพราะหลีกเลี่ยงการทำ WebHID
  • เมื่ออนุญาตการเชื่อมต่อแล้ว สามารถตั้งค่าตัวเลือกและบันทึกลงอุปกรณ์ได้
  • เหตุผลที่ใช้ไฟล์แบบ local แทนหน้าตั้งค่าออนไลน์ เพราะการโหลด JavaScript ที่โต้ตอบกับอุปกรณ์อินพุตจากตำแหน่งออนไลน์ใด ๆ มีความเสี่ยงด้านความปลอดภัยโดยธรรมชาติ
  • หน้าเว็บตั้งค่าจะใช้วิธีคลายข้อมูลแบบ self-decompressing เนื่องจากข้อจำกัดด้านพื้นที่เก็บข้อมูล และมีซอร์สทั้งหมดรวมอยู่ใน repository

การออกแบบด้านความปลอดภัย

  • ไม่มีฟีเจอร์ คัดลอก/วาง หรือแชร์ข้อมูลระหว่างระบบ
    • เป็นข้อจำกัดที่ตั้งใจไว้เพื่อป้องกันการรั่วไหลของข้อมูล
  • ไม่มีการเชื่อมต่อขาเข้าจากคอมพิวเตอร์ฝั่งเอาต์พุต
    • ข้อยกเว้นเดียวคือข้อความเปิด/ปิด LED คีย์บอร์ดแบบมาตรฐาน ซึ่งจำกัดไว้ที่ข้อมูล 1 ไบต์
  • ไม่สามารถทริกเกอร์การอัปเกรดเฟิร์มแวร์จากคอมพิวเตอร์ฝั่งเอาต์พุตได้
    • อนุญาตเฉพาะการกระทำที่ผู้ใช้สั่งอย่างชัดเจนผ่านคีย์ลัดพิเศษ
  • ไม่เปิดเผย custom endpoint ของคีย์บอร์ด/เมาส์ที่เชื่อมต่ออยู่ หรือส่งต่อข้อมูลของมันเข้ามายังฝั่งอุปกรณ์
  • ไม่บันทึกประวัติอินพุต
  • อุปกรณ์ไม่สร้างการกดแป้นพิมพ์ขึ้นมาเองโดยพลการ
    • เอาต์พุตจะมีเฉพาะสิ่งที่ผู้ใช้พิมพ์หรือเป็นผู้ทริกเกอร์เท่านั้น
  • เอาต์พุตแยกจากกันทางกายภาพ และใช้ galvanic isolation ที่แรงดันฉนวนอย่างน้อย 2kV
  • แพ็กเก็ตระหว่างอุปกรณ์มีความยาวคงที่ และตัวเลือกการตั้งค่าที่ส่งผ่านถูกจำกัดให้อยู่ในรายการสั้น ๆ
  • ไม่มี Bluetooth, Wi-Fi, เครือข่าย หรือการเข้าถึงอินเทอร์เน็ต
  • คอมพิวเตอร์ที่เชื่อมต่อจะไม่ถูกถือว่าเป็นแหล่งที่เชื่อถือได้ไม่ว่าในกรณีใด
  • โหมดตั้งค่าจะปิดเองอัตโนมัติเมื่อไม่มีการใช้งานตามระยะเวลาที่กำหนด
  • โค้ดเป็นโอเพนซอร์สและไม่มี binary blob

FAQ และความเข้ากันได้

  • สามารถทำงานได้แม้มีแค่ Pico สองตัวโดยไม่มี PCB และ isolator แต่แนะนำให้ใช้ isolator
  • แม้จอภาพจะมีความละเอียดต่างกัน เมาส์ก็ควรทำงานได้ เพราะการเคลื่อนที่ถูกประมวลผลในพื้นที่พิกัดเชิงนามธรรม แล้วคอมพิวเตอร์จึงแม็ปไปยังหน้าจอจริง
  • ไม่ใช่สินค้าสำหรับจำหน่าย แต่เป็นโปรเจ็กต์งานอดิเรกส่วนตัวแบบไม่เชิงพาณิชย์
  • มีอัปเดตว่า Elecrow สามารถสั่ง PCB, PCB ที่ประกอบแล้ว, และอุปกรณ์สำเร็จรูปได้แบบชิ้นเดียว
    • ตามรายงานของผู้ใช้ บอร์ดจะมาถึงในสภาพยังว่างและต้องแฟลชเฟิร์มแวร์เอง
  • ดองเกิลคอมโบคีย์บอร์ด/เมาส์อย่าง Logitech Unifying รองรับได้ดีขึ้นหลังการอัปเดตเฟิร์มแวร์ล่าสุด
  • เมาส์และคีย์บอร์ดไร้สายที่ใช้ตัวรับแยกสามารถใช้งานได้ โดยมีการทดสอบเมาส์ไร้สายของ Anker แล้วทำงานปกติ
  • หากมีปัญหาในการบิลด์ สามารถดู Troubleshooting Wiki

ทางเลือกแบบซอฟต์แวร์

ข้อจำกัดที่ทราบและแผนในอนาคต

  • หลัง Windows 10 KB5003637 การทำงานของ HID absolute coordinates พัง ทำให้บน Windows ใช้มากกว่า 1 จอไม่ได้
    • เมาส์จะค้างอยู่บนจอหลัก มีวิธีแก้ชั่วคราวเชิงทดลองอยู่ และกำลังพัฒนาวิธีที่ดีกว่า
  • โค้ดยังต้องการการจัดระเบียบและรีแฟกเตอร์
  • ยังทดสอบกับอุปกรณ์หลากหลายไม่มากพอ จึงมีโอกาสที่ฮาร์ดแวร์บางแบบจะใช้งานไม่ได้ทันที
  • คีย์บอร์ดขั้นสูงที่มีปุ่มหมุน ปุ่มเสริม หรือสไลเดอร์ อาจทำให้ฮาร์ดแวร์เสริมเหล่านั้นใช้งานไม่ได้
  • เมาส์รุ่นใหม่ที่มีปุ่มจำนวนมาก อาจมีบางปุ่มทำงานไม่เป็นไปตามที่คาดหวัง
  • ต้องต่อคอมพิวเตอร์ทั้งสองเครื่องและจ่ายไฟ USB ทั้งคู่จึงจะใช้งานได้
    • เพราะแต่ละบอร์ดรับไฟจากคอมพิวเตอร์ที่มันเชื่อมต่ออยู่
  • macOS มีปัญหาเมื่อใช้มากกว่า 2 จอ และเฟิร์มแวร์ล่าสุดมีวิธีแก้ชั่วคราวเชิงทดลองสำหรับเรื่องนี้
  • ฟีเจอร์ที่วางแผนไว้ได้แก่ การปรับปรุงวิธีแก้หลายจอบน Windows/macOS, transparent/gaming mode, รองรับเอาต์พุตมากกว่า 2 เครื่อง, และปรับปรุง UI การตั้งค่า
  • กำลังพัฒนา เวอร์ชัน lite ที่ใช้บอร์ด Pico W เพียงตัวเดียวเพื่อให้ฟังก์ชันพื้นฐานใช้งานได้
  • ปัจจุบันการโพลเมาส์สามารถทำงานได้ที่ 1000Hz

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

 
GN⁺ 2023-12-28
ความคิดเห็นจาก Hacker News
  • ชอบตรงที่สามารถตรวจจับขอบหน้าจอได้ โดยไม่ต้องมีซอฟต์แวร์ฝั่งไคลเอนต์
    วิธีการคือเปลี่ยน descriptor ของรายงาน HID ของเมาส์ให้เป็นพิกัดแบบสัมบูรณ์ เพื่อให้เคอร์เซอร์เมาส์ข้ามไปได้อย่างเป็นธรรมชาติ แล้วภายในจะสะสมรายงานเมาส์ที่จริง ๆ เข้ามาเป็นการเคลื่อนที่แบบสัมพัทธ์ เพื่อรักษาตำแหน่งที่แม่นยำไว้
    ดังนั้นจึงทำงานคล้าย synergykm / Barrier ที่มีฟีเจอร์คลิปบอร์ดและไม่ต้องใช้ซอฟต์แวร์ไคลเอนต์

    • ชอบเป็นพิเศษตรงที่คอมพิวเตอร์ ไม่จำเป็นต้องเชื่อมต่อกันผ่านเครือข่าย
    • สงสัยว่าถ้าเคอร์เซอร์ถูกย้ายด้วยองค์ประกอบอื่นที่ไม่ใช่เมาส์ มันจะพังไปเลยไหม
      เช่น สคริปต์อัตโนมัติ หรือเกมที่ล็อกเคอร์เซอร์ไว้กลางหน้าจอ
  • บน YouTube สามารถใช้ ปุ่ม , และ . เพื่อเลื่อนวิดีโอทีละเฟรมได้ แม้ไม่มีฮาร์ดแวร์แยกต่างหาก

    • ถ้ามีทางแก้บน Android ด้วยก็คงดี
      การเลือกอย่างละเอียดด้วยสไลเดอร์บนอินเทอร์เฟซแบบสัมผัสนั้นแย่มากจริง ๆ
    • ไม่สามารถเลื่อนในช่วง ระหว่าง 30 วินาทีกับ 1 เฟรม ได้
    • ผมมองว่าเมาส์สมัยนี้แม่นยำมากและทำงานได้ดี เลยสงสัยว่าใช้เมาส์แบบไหนถึงต้องกลั้นหายใจเวลาเลื่อนสกรอลล์
    • mpv ก็ใช้คีย์ลัดเดียวกัน
      ไม่รู้ว่าใครมาก่อน แต่ผมรู้จักจาก mpv แล้วลองกดบน YouTube โดยบังเอิญก็พบว่าใช้ได้
  • บน Windows สามารถใช้ Mouse Without Borders ซึ่ง Microsoft Garage พัฒนาขึ้นและตอนนี้รวมอยู่ใน Windows PowerToys ได้
    ลิงก์:
    https://www.microsoft.com/en-us/garage/profiles/mouse-without-borders
    https://github.com/microsoft/PowerToys

    • Barrier เป็นโปรเจกต์ โอเพนซอร์สข้ามแพลตฟอร์ม ที่แยกมาจาก Synergy และทำงานได้ค่อนข้างดีโดยไม่ต้องมีฮาร์ดแวร์เพิ่มเติม
      แต่ดูตอนนี้เหมือนจะหยุดดูแลไปแล้ว และตัวสืบทอดคือ Input Leap
      https://github.com/debauchee/barrier
      https://github.com/input-leap/input-leap
    • เคยลองใช้มาก่อน และมันทำงานได้ดีมากจริง ๆ
      โดยเฉพาะทำให้ ลากไฟล์ไปวางเพื่อคัดลอก ระหว่างคอมพิวเตอร์ได้ง่ายขึ้น
  • ซื้อ USB hub มาถึง 4 ตัวเพื่อสลับคีย์บอร์ดกับเมาส์ แต่หงุดหงิดเพราะอุปกรณ์ส่วนใหญ่แย่มาก
    บางวันต้องถอดแล้วเสียบ hub กลับเข้าไปใหม่หลายครั้ง และถ้าต่อเว็บแคมหรือไมค์ USB ด้วยก็ยิ่งแย่ลง
    ใช้ Synergy ได้ดีอยู่ แต่ต้องการ KVM ที่ทำมาดีจริง ๆ ซึ่งจัดการเว็บแคม ไมค์ และเสียงได้ครบ และย้ายเฉพาะชุดอุปกรณ์ที่เชื่อมต่ออยู่ด้วยคีย์ลัดได้
    ผู้ใช้ KVM ยังไม่ได้รับการรองรับเพียงพออย่างชัดเจน

    • ชุด KVM ในตัวจอ BenQ 32 นิ้ว 4K ที่บังเอิญได้ใช้ที่บริษัทเป็นตัวที่ดีที่สุด
      แต่ละอินพุต DisplayPort มีพอร์ต USB ผูกอยู่ด้วย และ USB-C รับผิดชอบทั้งอุปกรณ์ต่อพ่วง อินพุตจอภาพ และการจ่ายไฟที่ค่อนข้างดี
      สลับด้วยสวิตช์เล็ก ๆ บนโต๊ะ และมันทำให้แม้แต่อินพุตที่ไม่ได้แสดงผลก็ยังดูเหมือนว่าจอยังคงเชื่อมต่ออยู่ จึงไม่มีอาการ Windows กะพริบเพราะต้องจัดเรียงใหม่ และการสลับก็เร็วและลื่นไหลกว่ามาก
    • อยากแชร์คีย์บอร์ด เมาส์ และจอภาพระหว่าง PC กับ MacBook แต่ดูเหมือนจะไม่มี KVM ที่ฝั่งหนึ่งเป็น DP+USB และอีกฝั่งเป็น Thunderbolt
      น่าเสียดาย เพราะน่าจะเป็นกรณีใช้งานที่พบได้ทั่วไป
      อาจต่อผ่าน dock ก่อนก็ได้ แต่ความละเอียดจอที่ใช้สูงมาก ทำให้ dock ส่วนใหญ่รับไม่ไหวหรือรองรับแค่ 30Hz
    • เพิ่งซื้อ จอ Dell 32 นิ้ว 6K มาเมื่อไม่นานนี้ มี Thunderbolt 4 hub และ KVM ในตัว และทำงานได้สมบูรณ์แบบ
      Mac ต่อด้วยสาย Thunderbolt 4 เส้นเดียว ส่วน PC ต่อ upstream ด้วย HDMI 2.1 และ USB3 10Gbps
      ต่ออีเทอร์เน็ตกับคีย์บอร์ด/เมาส์เข้ากับจอ และสลับไปยังเครื่องที่ถูกต้องด้วยคีย์ลัดหรือ OSD ของจอ
      ยังสามารถใช้ฟีเจอร์ PIP เพื่อดูสองเครื่องพร้อมกันได้ด้วย
    • พอใจกับ tesmart dual DP 4-port KVM มาก
      ข้อจำกัดคือมีแค่ USB 2 host controller เท่านั้น ทำให้อุปกรณ์ความเร็วสูงบางอย่าง เช่น เว็บแคมบางรุ่น สลับใช้งานได้ยาก
      ถ้าต้องผสมกับผลิตภัณฑ์ Apple เนื่องจาก Apple ไม่ชอบ MST จึงต้องใช้สาย USB3 แบบกายภาพสองเส้นจาก Mac เพื่อแยกช่องสัญญาณจอสองช่อง
    • ATEN USB KVM เสียบอะไรก็ได้แทบทุกอย่าง
      ผมเสียบ USB drive ใช้เพื่อย้ายไฟล์อย่างรวดเร็ว และโดยทั่วไปอุปกรณ์ที่ทำงานด้วยไฟ USB ก็ใช้ได้
      ถ้าเลือก USB 3+, DP ฯลฯ ก็แพง แต่ก็มีรุ่นราคาถูกที่สลับเฉพาะ USB เท่านั้น
      อย่างไรก็ตาม ข้อเสียใหญ่คือเมาส์และคีย์บอร์ดบางรุ่นที่มีปุ่มพิเศษทำงานได้ไม่เต็ม 100%
  • ผมใช้ Synergy เพื่อจุดประสงค์นี้มานานกว่า 10 ปีแล้ว
    คือ https://symless.com/synergy ใช้งานเร็ว สลับได้ทันทีแม้ผ่าน Wi‑Fi และรองรับทั้ง Windows/Mac/Linux

    • Synergy, Barrier และ Input Leap เป็นโซลูชันซอฟต์แวร์ที่ค่อนข้างดี ซึ่งมีต้นกำเนิดร่วมกัน
      สองตัวหลังเป็นโอเพนซอร์สฟรี ส่วน Synergy มีวิธีตั้งค่าขอบเขตระหว่างอุปกรณ์ที่ดี
      แต่ไม่ว่าจะเป็นโซลูชันไหน ก็อยากให้รองรับ การจัดวางมอนิเตอร์แบบกำหนดเอง ได้ดี
      สภาพแวดล้อมส่วนตัวของผม มอนิเตอร์ไม่ได้เรียงเป็นเส้นตรง และแต่ละมอนิเตอร์สามารถสลับไปยังแต่ละอุปกรณ์ได้อย่างอิสระ ถ้ากำหนดขอบเขตแยกตามมอนิเตอร์และตามอุปกรณ์ได้ก็คงยอดเยี่ยม แต่ดูเหมือนทั้งซอฟต์แวร์และฮาร์ดแวร์ยังไม่มี
      เมื่อไม่นานมานี้ถาม Synergy ไป เขาบอกว่าอยู่ในโรดแมปในฐานะคำขอฟีเจอร์ยอดนิยม หวังว่าจะออกมาเร็ว ๆ นี้
    • ถ้าใช้ VPN คนละตัวบนคอมพิวเตอร์หลายเครื่อง Synergy จะทำงานได้ไม่ดี เลยซื้อ อุปกรณ์เชิงพาณิชย์ ที่คล้ายกับ DIY ตรงนี้มา และทำงานได้ดีมาก
      ไม่จำเป็นต้องล็อกอินเข้าคอมพิวเตอร์ก่อน และสามารถสลับได้ด้วยการเลื่อนข้ามขอบหน้าจอหรือกดคีย์ลัด
      อุปกรณ์ USB ที่เชื่อมต่ออยู่ก็สลับได้เป็นอิสระจากคีย์บอร์ดและเมาส์
      ผลิตภัณฑ์แบบนี้บางครั้งเรียกว่า boundless, borderless หรือ roaming KM switch
      https://www.cdw.com/product/siig-4-port-roaming-km-switch-wi...
    • ShareMouse ก็น่าพูดถึง: https://www.sharemouse.com/
      โดยส่วนตัวทำงานได้ดีกว่า Synergy มาก
      ย้ายมาใช้หลังจากนักพัฒนา Synergy ไม่ตอบสนองต่อบั๊กที่มีมาหลายปี จนใช้ต่อไม่ได้แล้ว
      ตัวอย่าง: https://github.com/symless/synergy-core/issues/5992
      ข้อเสียคือถ้าต้องการรับอัปเดตหลังผ่านไป 1 ปี ต้อง “ต่ออายุการบำรุงรักษา” แต่ถึงตอนนี้ยังไม่ได้ต่ออายุก็ยังใช้งานได้ดี
    • เมื่อไม่กี่เดือนก่อน เมาส์ค้างบนคอมพิวเตอร์เครื่องที่สอง แต่ผมลืมไปเลยว่ากำลังรัน Synergy อยู่ เลยใช้เวลาซ่อมอยู่ไม่กี่นาที
      ตรวจสอบแล้วพบว่าการตั้งค่านี้ทำงานมา 4–5 ปีโดยไม่มีปัญหา และถือเป็นหนึ่งในซอฟต์แวร์แบบเสียเงินที่คุ้มค่ามาก
    • ดูดีทีเดียว แต่เสียดายที่เอา TLS ไปเป็นฟีเจอร์พรีเมียมเหนือ SKU แบบจ่ายเงินพื้นฐาน
      ความปลอดภัยควรเป็นค่าเริ่มต้นและฟรีในทุกอย่าง เป็นข้อกำหนดขั้นต่ำ ไม่ใช่ของฟุ่มเฟือย
      ถึงอย่างนั้นถ้าลองใช้แล้วโอเค ก็คิดว่าจะซื้อไลเซนส์พรีเมียมเพราะฟีเจอร์คัดลอกและวาง
  • มีโปรเจกต์ที่ทำขึ้นโดยได้แรงบันดาลใจจากโปรเจกต์คล้ายกันคือ https://github.com/jfedor2/screen-hopper
    เวอร์ชันที่ทำเองประกอบด้วยโปรแกรมสองตัว
    ตัวหนึ่งรันบนเดสก์ท็อป Linux คอยฟัง input event จาก evdev ซึ่งเป็นระบบย่อยอินพุตของ Linux และเมื่อกดคีย์ที่กำหนด จะ consume event ทั้งหมดแล้วส่งไปยัง RPI Pico ผ่าน USB serial
    กดอีกครั้งก็กลับสู่โหมดฟังแบบแมนนวล
    RPI Pico จะแปลง event ของ Linux evdev ที่ได้รับผ่าน serial ให้เป็น event ของ USB HID แล้วส่งไปยังพีซี Windows อีกเครื่อง
    ผลลัพธ์คือกลายเป็น KM switch ที่สลับระหว่างพีซี Linux กับพีซีที่รัน OS ใดก็ได้ทันที
    รูปการเดินสาย: https://ibb.co/m0zhzgz
    ใช้ Pico อีกตัวเป็นอะแดปเตอร์ USB serial และในฐานะมือใหม่ด้านฮาร์ดแวร์ การที่ต้องใช้สายแค่ 2 เส้นทำให้โล่งใจมาก
    โปรแกรมทั้งสองตัวมีไม่ถึง 100 บรรทัด และมี Rust crate กับแพ็กเกจ Python จำนวนมากสำหรับฟัง Linux evdev
    ฝั่ง Pico ก็แทบจะเป็นลูปที่มี switch statement ใหญ่ ๆ และมี Rust crate สำหรับส่ง event ของ USB HID
    ถ้าใช้ COBS ก็ส่งผ่าน serial ได้โดยไม่ต้องกังวลเรื่อง framing
    สุดท้ายไม่ได้เปิดซอร์สเพราะบั๊ก USB serial หลังจากการเชื่อมต่อหลุดแล้ว มัน reconnect กลับไปยังเดสก์ท็อป Linux ได้ไม่ถูกต้อง
    ไม่รู้ว่าเป็นเพราะ Linux หรือ Pico และเพราะไม่ได้ถอดสาย ตอนนี้ก็ยังใช้อยู่โดยไม่มีปัญหา
    เล่นเกม FPS เยอะ เลยจงใจตัดฟีเจอร์พิกัดแบบสัมบูรณ์ออก และผูกปุ่มสลับไว้กับปุ่มด้านข้างของเมาส์ ทำให้เปลี่ยนระบบได้โดยไม่ต้องแตะคีย์บอร์ด

    • เป็นไอเดียที่เจ๋งมากจริง ๆ
      เพิ่งรู้จักโปรเจกต์ screen-hopper เมื่อวานนี้เอง รู้สึกเหมือนเป็นการยืนยันทฤษฎีที่ว่าไม่ว่าจะพยายามสร้างอะไร ก็มีใครบางคนที่ฉลาดกว่าได้สร้างสิ่งนั้นไว้ดีกว่าแล้ว
      ผมไม่เล่นเกมเลย ดังนั้นพิกัดแบบสัมบูรณ์ก็โอเค แต่ในรายการสิ่งที่ต้องทำมีข้อให้ทำให้มันตั้งค่าได้อยู่
    • บั๊ก USB serial อาจกลายเป็นเหตุผลให้เปิดเผยก็ได้
      อาจ ล่อเนิร์ด ให้มีใครสักคนไปขุดจุดละเอียดอ่อนที่ทำให้เกิดบั๊กได้
    • ได้รับข้อเสนอหลายครั้งว่าให้เปิดเผยแม้จะมีบั๊ก และตรรกะนั้นก็มีเหตุผล
      ซอร์สที่ให้แบบตามสภาพอยู่ที่นี่: https://github.com/null-dev/picokvm
    • ถ้าติดคำเตือนว่าไม่มีการสนับสนุน ผู้ใช้รับผิดชอบเอง แล้วอัปขึ้นรีโพซิทอรีได้ก็คงดี
    • ต่อให้ยังมีบั๊กอยู่ ก็น่าจะมีหลายคนอยากดู
  • หนึ่งในเรื่องที่ไม่พอใจมากคือการสลับอินพุตเมาส์และคีย์บอร์ดระหว่างพีซีสองเครื่องด้วยสวิตช์ USB 3.0
    เวลาอยู่ในประชุม Teams แล้วไม่ค่อยมีอะไรต้องพูด แต่มีคนเรียกชื่อหรือส่งข้อความมา ก็ต้องลนหาปุ่มเพื่อสลับอินพุตกลับไปยังพีซีที่เปิด Teams อยู่
    เคยคิดจะต่อ ESP32 หรือ Rpi Pico W กับออปโตคัปเปลอร์สองสามตัวเข้ากับพินปุ่มของ USB switch แล้วเปิด HTTP endpoint เพื่อให้สคริปต์ AutoHotkey กับคีย์ลัดใช้ toggle อินพุตระหว่างสองเครื่อง
    แต่คิด วิธีตรวจว่าขณะนี้อินพุตตัวไหน active อยู่ ไม่ออก เลยล้มเลิกไป วิธีนี้ถูกใจผม

    • ลองดูเฮดเซ็ตที่รองรับ Teams ซึ่งมี ปุ่มปิดเสียง ก็น่าจะดี
      เฮดเซ็ต Logitech ที่บริษัทให้มามีปุ่มปรับเสียง วางสาย และปิดเสียงอยู่บนสาย ทำให้ยกเลิกปิดเสียงได้ง่ายขึ้นมากแม้กำลังทำหลายอย่างพร้อมกัน
  • Synergy จัดการการใช้งานแบบนี้ได้ดีด้วยซอฟต์แวร์ล้วน
    แม้จะไม่ฟรีหรือโอเพนซอร์ส แต่ราคาค่อนข้างถูก
    https://symless.com/synergy

    • ก่อนที่ Synergy จะกลายเป็นซอร์สปิด ได้ถูกแยกเป็น Barrier[0] และต่อมาก็แยกอีกเป็น input-leap[1]
      ทั้งคู่เป็นโอเพนซอร์ส
      [0] https://github.com/debauchee/barrier
      [1] https://github.com/input-leap/input-leap
    • Synergy เป็นโอเพนคอร์ และส่วนเหล่านี้อยู่ภายใต้ไลเซนส์ GPL: https://github.com/symless/synergy-core/#License-1-ov-file
      ยังมีฟอร์กโอเพนซอร์สที่แยกออกมาจากเวอร์ชัน 1.9 ด้วย: https://github.com/debauchee/barrier#what-is-it
    • Synergy มีบั๊กบางอย่างที่ดูเหมือนไม่ได้ใส่ใจจะแก้
      เช่น ถ้าใช้โฮสต์ macOS บนไคลเอนต์ Windows/Linux จะใช้เส้นโค้งการเร่งความเร็วของ macOSในการคำนวณตำแหน่งเคอร์เซอร์ แต่ไม่ได้ใช้กับการเคลื่อนเคอร์เซอร์จริง
      ดังนั้นเวลาพยายามทำงานในพื้นที่หนึ่งในสามของหน้าจอ Windows ที่อยู่ใกล้โฮสต์ อาจเผลอข้ามกลับมาโดยไม่ตั้งใจ
    • สงสัยว่ามีคำแนะนำอะไรที่ใช้ได้กับชุด Windows และแท็บเล็ต Android ไหม
      ดูเหมือนทุกวิธีจะแอปได้เฉพาะบน OS เดสก์ท็อปเท่านั้น
    • มีคำพูดว่า “ไม่มีอะไรน่าหงุดหงิดเท่า Synergy แต่ทุกตัวก็เป็นแบบนั้น”
      เทคโนโลยีประเภทนี้ไม่มีตัวไหนเสถียรเลย และ Synergy เคยทำให้คีย์บอร์ดที่ต่ออยู่หลายตัวค้าง จนคอมพิวเตอร์ไม่ตอบสนอง ต้องปิดแล้วเปิดเครื่องใหม่
  • ยอดเยี่ยมจริง ๆ
    โดยเฉพาะในฐานะคนที่ใช้เซ็ตอัปเดสก์ท็อปที่วางเครื่อง Linux-Mac-Windows เรียงจากซ้ายไปขวามาอย่างน้อย 20 ปี
    ถ้าในภาษาโปรแกรมมีการใช้หลายภาษา ในฮาร์ดแวร์ก็มีการจัดชุดหลายแพลตฟอร์ม
    โชคดีที่ในช่วงไม่กี่ปีมานี้ การออกแบบ system-on-chip (SoC) เพิ่มขึ้น ทำให้ทำได้ง่ายขึ้น
    เซ็ตอัปปัจจุบันคือเครื่องโคลน Mac mini ที่เป็น Ryzen SoC ราคา 250 ดอลลาร์จากเซินเจิ้น 2 เครื่อง กับ M1 MBP
    น่าเสียดายที่โลกของโซลูชัน KVM โอเพนซอร์สอย่าง Synergy ซึ่งเคยแข็งแกร่ง กลายเป็นฝันร้ายแบบฟอร์กซ้อนฟอร์ก ทำให้หา KVM ซอฟต์แวร์โอเพนซอร์สหลายแพลตฟอร์มที่ใช้ฟรีและใช้งานได้จริงได้ยาก
    ตอนนี้สุดท้ายก็กลับไปใช้ KVM switch แบบเดิม แต่การต้องกดปุ่มทำให้เสียสมาธิ
    สักวันหนึ่งอยากลองทำสิ่งแบบนี้อีกครั้ง

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

    • ถ้าจะทำเชิงพาณิชย์ ขอให้แก้ข้อเสียที่ว่า “คอมพิวเตอร์ทั้งสองเครื่องต้องเชื่อมต่ออยู่และเปิดเครื่องอยู่จึงจะทำงานได้” ให้ได้
      สำหรับผม/ฉัน นี่เป็นเงื่อนไขที่ทำให้เลิกสนใจทันที
    • มีผลิตภัณฑ์เชิงพาณิชย์อยู่แล้ว
      ลองค้นหาด้วยคำว่า boundless, borderless, roaming KM switch