6 điểm bởi GN⁺ 2023-12-28 | 1 bình luận | Chia sẻ qua WhatsApp
  • DeskHop là một dự án phần cứng mã nguồn mở cho phép hai máy tính dùng chung một bàn phím/chuột, chuyển nhanh thiết bị nhận nhập liệu bằng phím tắt và di chuyển con trỏ chuột thay cho công tắc USB dạng nút bấm
  • Thiết bị đóng vai trò USB Host/Device giữa bàn phím/chuột và hai máy tính, duy trì đồng thời kết nối với cả hai phía rồi chuyển chuyển động chuột và phím bấm tới đầu ra đang được chọn
  • Việc chuyển chuột được thực hiện bằng cách đổi HID report descriptor sang tọa độ tuyệt đối và nội bộ tích lũy lượng dịch chuyển tương đối, để khi vượt qua mép màn hình thì con trỏ xuất hiện trên màn hình của máy còn lại ở cùng độ cao
  • Các điểm nổi bật gồm gần như không cảm nhận được độ trễ, không cần cài phần mềm, hỗ trợ Linux/macOS/Windows, linh kiện dưới 15€, vỏ in 3D và cách ly galvanic giữa các đầu ra
  • Các giới hạn cũng khá rõ: sau Windows 10 KB5003637 có vấn đề với tọa độ tuyệt đối trên nhiều màn hình, đa màn hình trên macOS cần biện pháp vòng tránh thử nghiệm, và không đảm bảo tương thích với bàn phím cao cấp, chuột nhiều nút hay nhiều loại thiết bị khác nhau

Công tắc phần cứng để chuyển nhanh giữa hai máy tính

  • DeskHop bắt đầu từ nhu cầu sử dụng hằng ngày hai máy tính nhưng muốn dùng chung một bàn phím/chuột
  • Dự án nhằm giải quyết nhược điểm của các hộp chuyển USB hiện có là mất thời gian khi chuyển và bất tiện vì phải tìm nút bấm
  • Hành vi mong muốn có hai dạng
    • Chuyển đầu ra bằng phím tắt bàn phím
    • Tự động chuyển khi kéo con trỏ chuột qua giữa các màn hình
  • Được thiết kế để hoạt động ngay cả giữa các máy tính dùng hệ điều hành khác nhau
  • Có cung cấp User Manual

Tính năng chính

  • Hoàn toàn miễn phí và mã nguồn mở, đồng thời có chứng nhận Open Source Hardware
  • Không có độ trễ có thể cảm nhận được khi chuyển
  • Có thể kéo con trỏ chuột qua lại giữa các máy tính
  • Không cần cài thêm phần mềm trên máy tính
  • Chi phí linh kiện được nêu là dưới 15€
  • Dùng vỏ snap-fit có thể in 3D
  • Cung cấp cách ly galvanic hoàn toàn giữa các đầu ra
  • Hoạt động trên Linux, macOS, Windows

Cách hoạt động

  • Thiết bị hoạt động như một thiết bị trung gian giữa bàn phím/chuột và máy tính
  • Thiết lập và duy trì đồng thời kết nối với cả hai máy tính
  • Tùy theo trạng thái đang chọn, thiết bị quyết định sẽ gửi chuyển động chuột và phím bấm tới máy nào
  • Bàn phím đi theo chuột, và chuột cũng đi theo trạng thái chuyển của bàn phím
    • Khi kéo chuột sang desktop còn lại, đích nhận nhập liệu của bàn phím cũng đổi theo

Cơ chế chuyển chuột

  • Để tạo cảm giác con trỏ chuột di chuyển giữa các màn hình, HID report descriptor được đổi sang chế độ tọa độ tuyệt đối
  • Báo cáo chuột thực tế vẫn đi vào dưới dạng lượng dịch chuyển tương đối, và thiết bị sẽ tích lũy chúng để quản lý vị trí hiện tại
  • Khi cố đi ra khỏi vùng màn hình hiện tại theo hướng sang màn hình kia, thiết bị giữ nguyên tọa độ Y, đổi tọa độ X sang biên đối diện rồi chuyển đầu ra
  • Nhờ vậy con trỏ xuất hiện trên màn hình của máy còn lại ở cùng độ cao, giúp việc chuyển trông tự nhiên hơn
  • Việc chuyển thực sự xảy ra vào khoảnh khắc mũi tên ở một phía dừng lại và mũi tên ở phía kia bắt đầu di chuyển

Chuyển bàn phím và trạng thái LED

  • Thiết bị hoạt động như USB Host và thăm dò bàn phím theo chu kỳ
  • Nếu tìm thấy phím tắt được cấu hình trước trong HID report, các ký tự sau đó sẽ được gửi sang đầu ra khác
    • Ví dụ sử dụng là Ctrl + Caps Lock
  • Có thể tận dụng lại LED bàn phím để hiển thị đang dùng đầu ra nào
  • Thiết bị ghi nhớ trạng thái LED của từng máy tính, nên có thể tiếp tục từ trạng thái trước đó

Build và cập nhật firmware

  • Để giảm lỗi lệch phiên bản và vấn đề đường dẫn, đồng thời tránh phải tải SDK lớn, dự án đi kèm bản tối thiểu của pico sdktinyusb
  • Trên Debian/Ubuntu cần cài build-essential, cmake, gcc-arm-none-eabi, libnewlib-arm-none-eabi, python3
  • Build mặc định được thực hiện bằng các lệnh sau
    • cmake -S . -B build
    • cmake --build build
  • Cũng có cung cấp build tái lập được bằng Docker
    • docker-compose -f misc/docker.yml run --rm build_container
  • Có thể dùng pre-built images
    • Từ phiên bản 0.6 trở đi có một image phổ dụng duy nhất
    • Chỉ cần chép file .uf2 vào thiết bị để sử dụng

Cách nâng cấp firmware

  • Option 1: với firmware 0.6 trở lên, vào config mode bằng left ctrl + right shift + c + o
    • Thiết bị phía có bàn phím kết nối sẽ khởi động lại và xuất hiện dưới dạng ổ USB tên DESKHOP
    • Sao chép file .uf2, thiết bị sẽ kiểm tra image rồi flash và khởi động lại, sau đó tiếp tục nâng cấp bo mạch còn lại
    • Ổ này không phải thiết bị lưu trữ USB thông thường nên không thể dùng để sao chép file thông thường
  • Option 2: dùng ROM bootloader, giữ nút trên từng bo Pico khi cắm vào rồi chép .uf2 vào ổ flash xuất hiện
  • Option 3: trong bản debug được build với DH_DEBUG_CDC_FLASH=ON, có thể vào bootloader mode bằng lệnh CDC serial
    • echo -n 'flash' > /dev/tty.usbmodem11104

Tính năng bổ sung

  • Mouse slowdown

    • Bật/tắt chế độ chuột chậm bằng right CTRL + right ALT
    • Giảm mạnh tốc độ con trỏ khi cần căn chỉnh vị trí chính xác
  • Switch Lock

    • Khóa vào màn hình hiện tại bằng RIGHT CTRL + K
    • Ngăn việc vô tình chuyển sang màn hình khác
  • Lock Both Screens

    • Có thể khóa đồng thời cả hai máy tính bằng RIGHT CTRL + L
    • Cần cấu hình hệ điều hành của từng đầu ra
  • Gaming Mode

    • Bật/tắt bằng LEFT CTRL + RIGHT SHIFT + G
    • Sẽ khóa vào màn hình hiện tại và chuột hoạt động như chuột tọa độ tương đối tiêu chuẩn
    • Đây là chế độ để xử lý game, máy ảo hoặc các vấn đề hệ điều hành hiện chưa hỗ trợ vốn không phù hợp với chế độ chuột tuyệt đối
  • Screensaver

    • Mặc định tắt
    • Khi bật, sau một khoảng không hoạt động con trỏ sẽ nảy khắp màn hình như quả bóng Pong
    • Tự động tắt khi gửi nhập liệu tới màn hình đó

Cấu hình phần cứng

  • Sơ đồ mạch dựa trên hai bo Raspberry Pi Pico
    • Pico được chọn vì rẻ, khoảng 4.10€ mỗi bo, có thể hàn tay và dễ mua
  • Hai Pico được nối với nhau qua UART
  • Hai phía được tách biệt bằng bộ cách ly số
    • Analog Devices ADuM1201 giá khoảng 3€
    • TI ISO7721DR giá khoảng 1.5€, rẻ hơn, nhanh hơn và tương thích chân nên được ưu tiên
  • RP2040 vốn không hỗ trợ dual USB theo mặc định, nhưng thông qua Pico-PIO-USB, USB được triển khai bằng PIO để đảm nhiệm cả vai trò USB Host lẫn Device

PCB và vỏ

  • Để dễ tự làm, các trace trên PCB được đặt ở một mặt và số lượng linh kiện được tối giản
  • Đường vi sai USB D+/D- về nguyên tắc phải dài bằng nhau, nhưng được thiết kế hơi bất đối xứng có chủ ý để bù chênh lệch độ dài trace GPIO trên PCB của Pico
  • Mục tiêu trở kháng vi sai là 90Ω, và thực tế đạt khoảng 107Ω
  • Độ dày PCB được thiết kế là 1.6mm để vừa với vỏ snap-fit
  • PCB v1.1 bổ sung các điểm sau so với v1.0
    • Bảo vệ ESD TPD4E1U06DBVR
    • Tụ VBUS cho đầu nối bàn phím/chuột
    • Ký hiệu hướng trên silkscreen
    • Lỗ dành cho bo clone có header hàn sẵn và cải thiện căn chỉnh
    • Điện trở USB 27Ω
  • v1.1 hơi khó hàn tay hơn do IC TVS nhỏ và điện trở 0805
  • Vỏ được cung cấp tại case, dùng khoảng 33g filament và có thể in trong vài giờ
  • Cấu trúc snap-fit cố định không cần vít, nắp có khe để mở bằng tua vít

Chi phí và linh kiện

  • Tổng BOM của PCB v1.1 được nêu là 11.22€
  • Các linh kiện chính gồm
    • 2 Raspberry Pi Pico: 8.20€
    • 2 đầu nối USB-A PCB: 0.40€
    • 1 TI ISO7721DR: 1.40€
    • 2 tụ 100nF: 0.18€
    • 4 điện trở 27Ω: 0.12€
    • 2 TPD4E1U06DBVR: 0.62€
    • 2 tụ 4.7uF: 0.14€
    • 2 header 2.54mm 1x03: 0.16€
  • Ngoài ra còn cần gia công PCB, và có cung cấp Gerber
  • Cũng có cung cấp file STL cho in 3D

Phím tắt và cấu hình sử dụng

  • Theo firmware 0.68 trở lên, các phím tắt chính như sau
    • Left Ctrl + Right Shift + C + O: vào config mode
    • Right Shift + F12 + D: xóa cấu hình trong flash
    • Right Shift + F12 + Y: lưu offset chuyển màn hình
    • Right CTRL + Right ALT: bật/tắt chế độ chuột chậm
    • Right CTRL + K: khóa/mở khóa chuyển desktop bằng chuột
    • Right CTRL + L: khóa đồng thời hai đầu ra
    • Left CTRL + Right Shift + G: bật/tắt gaming mode
    • Left CTRL + Right Shift + S: bật screensaver
    • Left CTRL + Right Shift + X: tắt screensaver
    • Left CTRL + Caps Lock: chuyển đầu ra
  • Một số bàn phím không gửi đúng tổ hợp nhấn đồng thời hai phím Shift nên phím tắt đã được thay đổi

Chế độ cấu hình trên web

  • Từ firmware 0.6, dự án đưa vào configuration mode được cải tiến
  • Nhấn Left Ctrl + Right Shift + C + O, thiết bị sẽ khởi động lại và vào chế độ cấu hình
  • Một ổ USB tên DESKHOP sẽ xuất hiện, bên trong chỉ có file config.htm
  • File này cần được mở bằng Chromium hoặc Chrome
    • Firefox hiện chưa được hỗ trợ vì tránh triển khai WebHID
  • Sau khi cho phép kết nối, người dùng có thể đặt tùy chọn và lưu để ghi vào thiết bị
  • Lý do dùng file cục bộ thay vì trang cấu hình trực tuyến là vì việc tải JavaScript tương tác với thiết bị nhập liệu từ một vị trí trực tuyến tùy ý có thể tạo ra rủi ro bảo mật tiềm tàng
  • Trang web cấu hình dùng cơ chế tự giải nén do giới hạn dung lượng lưu trữ, và toàn bộ mã nguồn đều có trong repository

Thiết kế bảo mật và an toàn

  • Không có chức năng copy/paste hay chia sẻ thông tin giữa các hệ thống
    • Đây là giới hạn có chủ đích để ngăn rò rỉ thông tin
  • Không có kết nối đi vào từ các máy tính đầu ra
    • Ngoại lệ duy nhất là thông điệp bật/tắt LED bàn phím chuẩn, giới hạn ở dữ liệu 1 byte
  • Không thể kích hoạt nâng cấp firmware từ máy tính đầu ra
    • Chỉ cho phép hành động người dùng rõ ràng thông qua phím tắt đặc biệt trên bàn phím
  • Không phơi bày custom endpoint của bàn phím/chuột đã kết nối hay chuyển thông tin đó về phía thiết bị
  • Không lưu lịch sử nhập liệu
  • Thiết bị không tự tạo phím bấm tùy ý
    • Chỉ xuất những gì người dùng nhập hoặc kích hoạt
  • Các đầu ra được tách biệt vật lý và dùng cách ly galvanic tối thiểu 2kV
  • Gói tin giữa các thiết bị có độ dài cố định, và các tùy chọn cấu hình được truyền đi chỉ nằm trong một danh sách ngắn
  • Không có Bluetooth, Wi‑Fi, mạng nội bộ hay truy cập Internet
  • Máy tính được kết nối không bao giờ được xem là đáng tin cậy
  • Chế độ cấu hình sẽ tự tắt sau một khoảng không hoạt động
  • Mã nguồn được cung cấp dưới dạng mã mở, không có binary blob

FAQ và khả năng tương thích

  • Có thể hoạt động chỉ với hai Pico mà không cần PCB và bộ cách ly, nhưng vẫn khuyến nghị dùng bộ cách ly
  • Với các màn hình có độ phân giải khác nhau, việc di chuyển chuột được xử lý trong không gian tọa độ trừu tượng và máy tính sẽ ánh xạ sang màn hình vật lý nên về lý thuyết vẫn hoạt động
  • Đây không phải sản phẩm thương mại, mà là dự án cá nhân phi thương mại mang tính sở thích
  • Có cập nhật rằng có thể đặt mua PCB, PCB đã lắp ráp, hoặc thiết bị hoàn chỉnh theo từng chiếc tại Elecrow
    • Theo phản hồi người dùng, bo mạch đến ở trạng thái trống và cần tự nạp firmware
  • Dongle combo bàn phím/chuột như Logitech Unifying được cho là hỗ trợ tốt hơn sau các bản cập nhật firmware gần đây
  • Chuột và bàn phím không dây dùng đầu thu riêng hoạt động bình thường trong thử nghiệm với chuột không dây Anker
  • Nếu gặp vấn đề build, có thể tham khảo Troubleshooting Wiki

Giải pháp thay thế bằng phần mềm

Giới hạn đã biết và kế hoạch

  • Sau Windows 10 KB5003637, cơ chế tọa độ tuyệt đối của HID bị hỏng nên trên Windows không thể dùng quá 1 màn hình
    • Chuột sẽ bị giữ ở màn hình chính; hiện có biện pháp vòng tránh thử nghiệm và đang phát triển biện pháp tốt hơn
  • Mã nguồn cần được dọn dẹp và refactor
  • Chưa được thử nghiệm đầy đủ với nhiều loại thiết bị nên có thể sẽ không hoạt động ngay trên một số phần cứng
  • Các bàn phím cao cấp có núm xoay, nút phụ hoặc thanh trượt có thể không dùng được các phần cứng bổ sung đó
  • Các chuột hiện đại có rất nhiều nút có thể có một số nút không hoạt động như mong đợi
  • Cần cả hai máy tính đều được kết nối và cấp nguồn USB thì thiết bị mới hoạt động
    • Vì mỗi bo nhận nguồn từ máy tính mà nó kết nối
  • macOS có vấn đề khi dùng từ 2 màn hình trở lên, và firmware mới nhất cung cấp biện pháp vòng tránh mang tính thử nghiệm cho trường hợp này
  • Các tính năng dự kiến gồm cải thiện biện pháp vòng tránh đa màn hình cho Windows/macOS, transparent/gaming mode, hỗ trợ hơn 2 đầu ra, cải thiện UI cấu hình, v.v.
  • Cũng đang phát triển phiên bản lite chỉ dùng một bo Pico W để cung cấp tính năng cơ bản
  • Tần số polling chuột hiện có thể đạt 1000Hz

1 bình luận

 
GN⁺ 2023-12-28
Các ý kiến trên Hacker News
  • Điểm hay là có thể phát hiện mép màn hình mà không cần phần mềm client
    Để con trỏ chuột di chuyển qua một cách tự nhiên, họ đổi mouse HID report descriptor sang tọa độ tuyệt đối, rồi bên trong tích lũy các báo cáo chuột thực tế vốn đi vào dưới dạng di chuyển tương đối để duy trì vị trí chính xác
    Vì vậy nó hoạt động giống synergykm / Barrier nhưng không có tính năng clipboard và không cần phần mềm client

    • Đặc biệt hay ở chỗ các máy tính không cần phải kết nối qua mạng
    • Không rõ nó có hỏng hoàn toàn nếu con trỏ được di chuyển bởi yếu tố khác ngoài chuột không
      Ví dụ như script tự động hóa hoặc game cố định con trỏ ở giữa màn hình
  • Trên YouTube, ngay cả khi không có phần cứng riêng, cũng có thể dùng phím ,. để tua video theo từng khung hình

    • Giá mà trên Android cũng có giải pháp
      Việc chọn chính xác bằng thanh trượt trên giao diện cảm ứng thật sự rất tệ
    • Không thể di chuyển ở mức giữa 30 giây và 1 khung hình
    • Tôi thấy chuột ngày nay rất chính xác và hoạt động tốt, nên không biết họ dùng loại chuột nào mà phải nín thở khi cuộn
    • mpv cũng dùng cùng phím tắt
      Không biết bên nào có trước, nhưng tôi biết đến nó trong mpv, rồi tình cờ bấm thử trên YouTube thì thấy hoạt động
  • Trên Windows có thể dùng Mouse Without Borders, do Microsoft Garage phát triển và hiện được đưa vào Windows PowerToys
    Liên kết:
    https://www.microsoft.com/en-us/garage/profiles/mouse-without-borders
    https://github.com/microsoft/PowerToys

    • Barrier là dự án mã nguồn mở đa nền tảng tách ra từ Synergy, và hoạt động khá tốt mà không cần phần cứng bổ sung
      Tuy nhiên nhìn lại thì dự án đã ngừng bảo trì, và bản kế nhiệm là Input Leap
      https://github.com/debauchee/barrier
      https://github.com/input-leap/input-leap
    • Trước đây tôi từng dùng và nó hoạt động rất tốt
      Đặc biệt là việc kéo thả tệp giữa các máy tính để sao chép trở nên dễ dàng hơn
  • Tôi đã mua tới 4 USB hub để chuyển đổi bàn phím và chuột, nhưng phần lớn thiết bị quá tệ nên rất bực
    Có ngày tôi phải rút rồi cắm lại hub nhiều lần, và nếu nối thêm webcam hoặc micro USB thì còn tệ hơn
    Tôi vẫn dùng Synergy ổn, nhưng cần một KVM đúng nghĩa có thể xử lý tốt cả webcam, micro, âm thanh và cho phép chỉ chuyển cụm thiết bị đang kết nối bằng phím tắt
    Người dùng KVM rõ ràng chưa được hỗ trợ đầy đủ

    • Cấu hình KVM tích hợp trong màn hình BenQ 32 inch 4K mà tôi tình cờ dùng ở công ty là tốt nhất
      Mỗi đầu vào DisplayPort có cổng USB đi kèm, còn USB-C đảm nhiệm cả thiết bị ngoại vi, đầu vào hiển thị và cả công suất cấp nguồn khá ổn
      Chuyển đổi bằng một công tắc nhỏ trên bàn; nó vẫn làm cho máy thấy màn hình như đang được kết nối ngay cả với đầu vào không hiển thị, nên Windows không bị nhấp nháy để sắp xếp lại, và việc chuyển đổi nhanh, mượt hơn nhiều
    • Tôi muốn chia sẻ bàn phím, chuột và màn hình giữa PC và MacBook, nhưng dường như không có KVM nào mà một bên là DP+USB, bên kia là Thunderbolt
      Có vẻ đây là trường hợp sử dụng phổ biến nên khá tiếc
      Cũng có thể tách ra trước bằng dock, nhưng độ phân giải màn hình tôi dùng cao nên hầu hết dock đều đuối hoặc chỉ hỗ trợ 30Hz
    • Gần đây tôi mua màn hình 32 inch 6K của Dell, có tích hợp hub Thunderbolt 4 và KVM, và hoạt động hoàn hảo
      Mac kết nối bằng một sợi cáp Thunderbolt 4, còn PC dùng HDMI 2.1 và USB3 10Gbps làm upstream
      Tôi cắm Ethernet và bàn phím/chuột vào màn hình, rồi chuyển sang đúng thiết bị bằng phím tắt hoặc OSD của màn hình
      Tính năng PIP cũng cho phép xem đồng thời cả hai thiết bị
    • Tôi rất hài lòng với KVM tesmart dual DP 4 cổng
      Hạn chế là nó chỉ có host controller USB 2, nên khó chuyển đổi một số thiết bị tốc độ cao như webcam
      Nếu phải dùng lẫn sản phẩm Apple, vì Apple không thích MST, nên cần dùng hai cáp USB3 vật lý từ Mac để phân biệt hai kênh hiển thị
    • ATEN USB KVM có thể cắm gần như mọi thứ
      Tôi cắm USB drive để chuyển tệp nhanh, và nhìn chung thiết bị nào chạy bằng nguồn USB thì đều được
      Nếu chọn USB 3+, DP, v.v. thì đắt, nhưng cũng có các mẫu rẻ chỉ chuyển USB
      Tuy nhiên nhược điểm lớn là một số chuột và bàn phím có phím đặc biệt không hoạt động 100%
  • Tôi đã dùng Synergy cho mục đích này hơn 10 năm
    https://symless.com/synergy, nhanh, chuyển tức thì ngay cả qua Wi‑Fi, và hỗ trợ cả Windows/Mac/Linux

    • Synergy, Barrier, Input Leap là những giải pháp phần mềm khá ổn, cùng xuất phát từ một nguồn gốc
      Hai cái sau là mã nguồn mở miễn phí, còn Synergy có cách cấu hình ranh giới giữa các thiết bị khá tốt
      Tuy nhiên, dù là giải pháp nào thì tôi cũng mong nó hỗ trợ đúng nghĩa bố cục màn hình tùy chỉnh
      Môi trường cá nhân của tôi có các màn hình không nằm trên một hàng, và từng màn hình có thể được chuyển độc lập sang từng thiết bị, nên nếu có thể chỉ định ranh giới theo từng màn hình·từng thiết bị thì tuyệt, nhưng có vẻ cả phần mềm lẫn phần cứng đều chưa có
      Gần đây hỏi Synergy thì họ nói đây là yêu cầu tính năng phổ biến và đã có trong lộ trình, hy vọng sẽ sớm ra mắt
    • Nếu dùng các VPN khác nhau trên nhiều máy tính thì Synergy không hoạt động tốt, nên tôi đã mua một thiết bị thương mại tương tự DIY ở đây và nó chạy rất tốt
      Không cần đăng nhập vào máy tính trước; có thể chuyển bằng cách đi qua mép màn hình hoặc bằng tổ hợp phím
      Các thiết bị USB được kết nối cũng có thể chuyển độc lập với bàn phím·chuột
      Những sản phẩm như vậy đôi khi được gọi là boundless, borderless, roaming KM switch
      https://www.cdw.com/product/siig-4-port-roaming-km-switch-wi...
    • ShareMouse cũng đáng nhắc đến: https://www.sharemouse.com/
      Cá nhân tôi thấy nó hoạt động tốt hơn Synergy rất nhiều
      Tôi chuyển sang nó sau khi các nhà phát triển Synergy không phản hồi với một lỗi đã tồn tại nhiều năm, khiến tôi không thể tiếp tục dùng nữa
      Ví dụ: https://github.com/symless/synergy-core/issues/5992
      Nhược điểm là nếu muốn tiếp tục nhận cập nhật sau 1 năm thì phải “gia hạn bảo trì”, nhưng dù chưa gia hạn tôi vẫn dùng tốt
    • Vài tháng trước, chuột trên máy tính thứ hai bị đứng, nhưng tôi đã quên mất là mình đang chạy Synergy nên mất vài phút mới sửa được
      Kiểm tra lại thì cấu hình đó đã hoạt động 4~5 năm không vấn đề gì, và thuộc nhóm phần mềm trả phí rất đáng tiền
    • Trông có vẻ tốt, nhưng hơi tiếc khi TLS được đặt làm tính năng cao cấp nằm trên SKU trả phí cơ bản
      Bảo mật nên là mặc định và miễn phí trong mọi thứ; đó không phải xa xỉ mà là điều kiện tối thiểu
      Dù vậy, nếu dùng thử thấy ổn thì tôi vẫn có thể mua giấy phép premium vì tính năng sao chép·dán
  • Có một dự án tôi làm lấy cảm hứng từ dự án tương tự https://github.com/jfedor2/screen-hopper
    Phiên bản tự làm của tôi gồm hai chương trình
    Một chương trình chạy trên desktop Linux, lắng nghe các sự kiện đầu vào từ evdev, hệ thống con nhập liệu của Linux, và khi nhấn một phím nhất định thì nó tiêu thụ toàn bộ sự kiện rồi gửi qua USB serial đến RPI Pico
    Nhấn lại thì quay về chế độ lắng nghe thủ công
    RPI Pico chuyển các sự kiện Linux evdev nhận qua serial thành sự kiện USB HID rồi gửi sang một PC Windows khác
    Kết quả là một KM switch chuyển tức thì giữa PC Linux và một PC chạy hệ điều hành bất kỳ
    Ảnh dây nối: https://ibb.co/m0zhzgz
    Tôi dùng thêm một Pico khác làm bộ chuyển đổi USB serial, và với tư cách người mới về phần cứng thì việc chỉ cần 2 dây là một sự nhẹ nhõm lớn
    Cả hai chương trình đều dưới 100 dòng, và có rất nhiều crate Rust cũng như package Python để lắng nghe Linux evdev
    Phía Pico cũng gần như chỉ là một vòng lặp với một câu lệnh switch lớn, và có crate Rust để gửi sự kiện USB HID
    Dùng COBS thì có thể gửi qua serial mà không phải lo về framing
    Cuối cùng tôi không công bố mã nguồn mở vì lỗi USB serial: sau khi ngắt kết nối, nó không kết nối lại đúng cách với desktop Linux
    Không biết do Linux hay do Pico, và vì tôi không rút dây nên đến giờ vẫn dùng không vấn đề gì
    Vì chơi FPS nhiều nên tôi cố ý bỏ tính năng tọa độ tuyệt đối, và gán phím chuyển đổi vào nút cạnh chuột để có thể đổi hệ thống mà không cần chạm vào bàn phím

    • Ý tưởng thật sự rất hay
      Tôi mới biết dự án screen-hopper hôm qua, và cảm giác như nó xác nhận giả thuyết rằng bất kể mình định làm gì thì đã có ai đó thông minh hơn làm tốt hơn rồi
      Tôi hoàn toàn không chơi game nên tọa độ tuyệt đối cũng ổn, nhưng trong danh sách việc cần làm có mục biến nó thành tùy chọn cấu hình được
    • Lỗi USB serial ngược lại có thể là lý do để công bố
      Có thể nerd snipe ai đó đào sâu vào chi tiết tinh vi gây ra lỗi
    • Tôi đã nhận được nhiều đề nghị cứ công bố dù còn lỗi, và lập luận đó có lý
      Mã nguồn được cung cấp nguyên trạng ở đây: https://github.com/null-dev/picokvm
    • Sẽ rất tốt nếu có thể đưa lên repo kèm cảnh báo không hỗ trợ, người dùng tự chịu trách nhiệm
    • Tôi nghĩ sẽ có nhiều người muốn xem dù vẫn còn lỗi
  • Một trong những điều tôi rất khó chịu là phải chuyển đầu vào chuột và bàn phím giữa hai PC bằng một USB 3.0 switch
    Khi trong cuộc họp Teams mà mình không có nhiều việc phải nói, nếu ai đó gọi tên hoặc nhắn tin, tôi lại luống cuống tìm nút để chuyển đầu vào về PC đang bật Teams
    Tôi từng nghĩ đến việc nối ESP32 hoặc Rpi Pico W cùng vài optocoupler vào chân nút của USB switch, rồi expose một HTTP endpoint để dùng script AutoHotkey và phím tắt toggle đầu vào giữa hai máy
    Nhưng tôi đã bỏ cuộc vì không nghĩ ra cách xác định đầu vào hiện đang active, còn giải pháp này thì tôi thích

    • Bạn nên xem các headset tương thích Teams có nút mute
      Headset Logitech công ty cấp cho tôi có các nút âm lượng, kết thúc cuộc gọi và mute trên dây, nên việc bật lại tiếng trong lúc đa nhiệm dễ hơn nhiều
  • Synergy xử lý tốt nhu cầu này bằng phần mềm thuần túy
    Dù không miễn phí hay mã nguồn mở, nhưng giá tương đối rẻ
    https://symless.com/synergy

    • Trước khi Synergy trở thành mã nguồn đóng, nó đã được fork thành Barrier[0], rồi lại được fork thành input-leap[1]
      Cả hai đều là mã nguồn mở
      [0] https://github.com/debauchee/barrier
      [1] https://github.com/input-leap/input-leap
    • Synergy là open core, và các phần này được cấp phép theo GPL: https://github.com/symless/synergy-core/#License-1-ov-file
      Cũng có một fork mã nguồn mở tách ra từ phiên bản 1.9: https://github.com/debauchee/barrier#what-is-it
    • Synergy có những lỗi mà có vẻ họ không để tâm
      Ví dụ, khi dùng host macOS, trên client Windows/Linux nó dùng đường cong tăng tốc của macOS để tính vị trí con trỏ, nhưng lại không dùng cho chuyển động con trỏ thực tế
      Vì vậy khi cố làm việc ở một phần ba màn hình Windows gần host, bạn sẽ vô tình bị nhảy trở lại
    • Tôi thắc mắc liệu có gợi ý nào dùng được cho tổ hợp Windows và máy tính bảng Android không
      Có vẻ mọi giải pháp đều chỉ hoạt động trên hệ điều hành desktop
    • Có người nói “Không gì khó chịu bằng Synergy, nhưng cái nào cũng vậy”
      Trong các công nghệ kiểu này chẳng có cái nào ổn định, và Synergy từng nhiều lần làm đơ cả bàn phím đang kết nối, khiến máy tính phải tắt rồi bật lại mới phản hồi
  • Thật sự rất ấn tượng
    Đặc biệt là với người đã dùng cấu hình desktop đặt các máy Linux-Mac-Windows từ trái sang phải trong ít nhất 20 năm như tôi
    Nếu trong ngôn ngữ lập trình có đa ngôn ngữ, thì trong phần cứng có cấu hình đa nền tảng
    May là vài năm gần đây việc thiết kế system-on-chip (SoC) tăng lên nên mọi thứ đã dễ hơn
    Cấu hình hiện tại là 2 bản sao Mac mini Ryzen SoC giá 250 đô từ Thâm Quyến và một M1 MBP
    Thật tiếc là thế giới các giải pháp KVM mã nguồn mở như Synergy, vốn từng khá vững chắc, đã biến thành cơn ác mộng đệ quy của các bản fork, khiến việc tìm một KVM phần mềm mã nguồn mở đa nền tảng hoạt động miễn phí trở nên khó khăn
    Giờ cuối cùng tôi vẫn dùng switch KVM truyền thống, nhưng việc phải bấm nút làm mất tập trung
    Một ngày nào đó tôi muốn thử lại những thứ như thế này

  • Nếu có ai muốn cùng thương mại hóa thứ này, tôi sẵn sàng chịu chi phí và đảm nhận ép phun nhựa, marketing, lắp ráp hàng loạt và những việc cần thiết khác
    Email nằm trong hồ sơ của tôi

    • Nếu thương mại hóa, tôi rất mong nhược điểm “chỉ hoạt động khi cả hai máy tính đều được kết nối và bật nguồn” phải được giải quyết
      Với tôi đó là điều kiện khiến không thể chấp nhận
    • Đã có sản phẩm thương mại rồi
      Hãy tìm bằng các từ khóa boundless, borderless, roaming KM switch