Bỏ qua đến nội dung

Beamer là gì: Phần mềm chia sẻ chuột và phím giữa Mac và Windows

Cách Beamer đồng bộ chuột, bàn phím và clipboard giữa macOS, Windows và Linux qua giao thức mã hóa mạng nội bộ P2P, thay thế KVM switch cồng kềnh.

Hoang Yell
Hoang Yell
11 phút đọc
English
Beamer là gì: Phần mềm chia sẻ chuột và phím giữa Mac và Windows

Lập trình viên làm việc với hai máy tính song song luôn đối mặt với vấn đề bàn làm việc bừa bộn. Bạn dùng MacBook Pro để gõ code giao diện và họp hành vì máy chạy êm, pin bền. Ngay cạnh đó là dàn PC Windows hoặc máy Linux gắn card đồ họa rời để chạy mô hình AI cục bộ và render đồ họa.

Bàn làm việc nhanh chóng bị chiếm chỗ bởi hai bàn phím cơ, hai con chuột và mớ dây chuyển đổi USB lộn xộn.

Phần cứng KVM (bộ chuyển mạch chia sẻ phím chuột màn hình / Keyboard, Video, Mouse switch) giải quyết được phần nào nhưng chi phí đắt đỏ, làm trễ tín hiệu và dễ mất kết nối Bluetooth. Apple có Universal Control mượt mà nhưng khóa chặt trong macOS, không hỗ trợ Windows hay Linux. Các công cụ cũ như Barrier hay Deskflow lại đòi hỏi cấu hình IP thủ công, chứng chỉ TLS tự ký phức tạp và hay nghẽn bộ nhớ đệm clipboard.

Kỹ sư Toby Kalkman đã tạo ra kalkman-code/beamer: giải pháp KVM mã nguồn mở siêu nhẹ, không cần tài khoản, chia sẻ chuột và phím giữa Mac, Windows và Linux qua mạng Wi-Fi nội bộ.

Tóm tắt (TL;DR)

Hộp Trả Lời Nhanh (Google Search Featured Snippet):

  • Beamer là gì? Phần mềm KVM mã nguồn mở do Kalkman Code phát triển, giúp dùng chung một chuột và bàn phím để điều khiển liền mạch giữa máy tính Mac, Windows và Linux trong mạng nội bộ mà không qua máy chủ đám mây.
  • Kiến trúc cốt lõi: Giao thức Wire Protocol v6 sử dụng thuật toán trao đổi khóa X25519, hàm phái sinh khóa HKDF-SHA256, mã hóa từng gói tin ChaCha20-Poly1305 và cơ chế nhận diện lực đẩy chuột ở mép màn hình.
  • Điểm đột phá: Ghép đôi bằng mã số 6 chữ số thay vì gõ IP thủ công, truyền gia tốc chuột mượt mà, đồng bộ clipboard nạp trước chống bom nén bộ nhớ và chọn cổng mạng tránh xung đột WinNAT trên Windows.
  • Kho mã nguồn: kalkman-code/beamer trên GitHub · Giấy phép GNU GPL-3.0.

Repository: kalkman-code/beamer


Bản đồ tư duy (Mô hình trực quan)

Dùng hai máy tính trên cùng một bàn mà thiếu phần mềm KVM giống như mở hai cuốn sổ tay đặt cạnh nhau, nhưng mỗi cuốn bị xích chặt vào một cây bút riêng. Mỗi khi đổi máy, tay bạn phải bỏ bút này xuống rồi với tay nhấc bút kia lên.

Beamer hoạt động như một băng chuyền nam châm ngầm. Khi con trỏ chuột chạm mép phải màn hình MacBook, phần mềm nhận diện lực đẩy, viền màn hình sáng nhẹ và chuyển ngay quyền điều khiển sang màn hình Windows.

Sơ đồ Markdy dưới đây mô tả chu trình vận hành: ghép đôi bằng mã 6 số, thỏa thuận khóa phiên tức thời và truyền tọa độ chuột cùng clipboard.


Phần 1: Bế tắc phần cứng (Cơn ác mộng hai máy một bàn)

Kỹ sư phần mềm dùng nhiều máy tính vì nhu cầu kỹ thuật thực tế. Bạn code giao diện và chạy máy ảo iOS trên macOS vì máy mát và pin bền. Đồng thời, bạn cần chạy mô hình AI cục bộ hoặc biên dịch đồ họa nặng trên máy Windows gắn card đồ họa rời.

Các giải pháp cũ luôn bộc lộ nhược điểm:

  1. Bộ chia KVM phần cứng: Giá từ vài triệu đến hàng chục triệu đồng, đi kèm mớ dây cáp rối rắm. Mỗi lần gạt công tắc chuyển máy, màn hình phải mất vài giây để nhận lại tín hiệu.
  2. Logitech Flow: Yêu cầu mua toàn bộ chuột phím cùng hãng Logitech. Ứng dụng quản trị Logi Options+ viết bằng Electron là daemon (tiến trình chạy ngầm không có giao diện) tốn từ 300MB đến 500MB RAM và dễ bị khựng.
  3. Synergy, Barrier và Deskflow: Phải nhập IP tĩnh, tự tạo chứng chỉ bảo mật và xếp lưới màn hình thủ công. Mỗi khi router cấp lại IP qua DHCP (giao thức tự động cấp phát địa chỉ IP nội bộ), kết nối sẽ đứt gãy.

Beamer xóa bỏ toàn bộ rào cản đó bằng liên kết ngang hàng gọn nhẹ và tự nhận diện thiết bị trong mạng cục bộ.


Phần 2: Mổ xẻ Wire Protocol v6 (Cơ chế bắt tay và bảo mật ngầm)

Logic truyền thông của Beamer được định nghĩa trong core/protocol.py, tuân thủ chuẩn Wire Protocol v6 với cấu trúc ngang hàng độc lập.

1. Bắt tay X25519 tức thời và tính năng Forward Secrecy

Để tránh rủi ro lộ mật khẩu gõ phím khi truyền qua Wi-Fi, Beamer áp dụng nguyên lý Forward Secrecy (cơ chế đảm bảo phiên truyền quá khứ không bị giải mã dù khóa định danh bị lộ) qua thuật toán X25519 (thuật toán trao đổi khóa mật mã đường cong elip siêu tốc):

Máy gửi A (Initiator)                                Máy nhận B (Responder)
       |                                                    |
       |  Lời chào: WIRE_MAGIC (BEAMY) + Phiên bản (6)      |
       |  + Tiền tố Nonce ngẫu nhiên (8 bytes)              |
       |  + Khóa công khai X25519 tức thời                  |
       | -------------------------------------------------> |
       |                                                    |
       |  Phản hồi: WIRE_MAGIC + Phiên bản + Tiền tố Nonce  |
       |  + Khóa công khai X25519 tức thời của B            |
       | <------------------------------------------------- |
       |                                                    |
       [ Tạo khóa phiên HKDF-SHA256 từ Token và X25519 ]    |
       [ Khởi tạo bộ đếm gói tin ChaCha20 bắt đầu từ 1 ]    |

Mỗi kết nối tạo một tiền tố ngẫu nhiên và cặp khóa X25519 tạm thời. Khóa phiên được phái sinh bằng HKDF-SHA256 (hàm phái sinh khóa mật mã an toàn). Từng khung dữ liệu gửi đi gồm: độ dài khung 4 bytes, bộ đếm tuần tự 4 bytes, và dữ liệu mã hóa ChaCha20-Poly1305 (thuật toán mã hóa dòng và xác thực dữ liệu siêu tốc). Máy nhận lập tức hủy mọi gói tin có bộ đếm không đúng thứ tự, ngăn chặn hoàn toàn tấn công phát lại.

2. Thu thập tọa độ vi mô cho chuột và bàn rê

Nhiều phần mềm cũ chỉ gửi tọa độ số nguyên thô, khiến con trỏ trên máy đích bị giật cục. Beamer giải quyết vấn đề này trong MSG_MOUSEMOVE bằng mảng tọa độ vi mô:

# Trích từ core/protocol.py
elif kind == MSG_MOUSEMOVE:
    if not _int(data.get("dx"), -MOVE_MAX, MOVE_MAX) or not _int(data.get("dy"), -MOVE_MAX, MOVE_MAX):
        return None
    read.update(dx=data["dx"], dy=data["dy"])
    if "samples" in data:
        samples = data["samples"]
        # Xác thực mảng tọa độ vi mô để giữ gia tốc mượt mà
        if sum(sample[0] for sample in samples) != data["dx"] or sum(sample[1] for sample in samples) != data["dy"]:
            return None
        read["samples"] = samples

Cơ chế này giúp con trỏ giữ nguyên gia tốc và quán tính tự nhiên khi chuyển giữa macOS và Windows.

3. Đồng bộ Clipboard nạp trước và chống bom giải nén

Để tránh việc bấm dán ra nội dung cũ do trễ mạng, Beamer mã hóa và gửi gói tin clipboard (MSG_CLIPBOARD) đi trước gói tin chuyển tiêu điểm chuột. Khi chuột vừa sang màn hình bên cạnh, dữ liệu đã nằm sẵn trong bộ nhớ RAM máy đích.

Đồng thời, phần mềm kiểm soát nghiêm ngặt dung lượng ảnh chụp màn hình Retina (màn hình mật độ điểm ảnh siêu cao của Apple): văn bản tối đa 256KB, ảnh tối đa 8MB. Hàm png_fits() đọc trực tiếp byte tiêu đề để chặn các file có kích thước giải nén vượt quá 2^25 điểm ảnh (khoảng 33,5 triệu điểm ảnh), triệt tiêu nguy cơ tràn bộ nhớ RAM do bom nén dữ liệu.


Phần 3: Góc khuất thực chiến (Những cái bẫy hệ điều hành)

Can thiệp vào tầng nhập liệu của ba hệ điều hành khác nhau luôn có những ràng buộc kỹ thuật cần lưu ý.

1. Bẫy cấp quyền TCC trên macOS buộc phải khởi động lại

Trên macOS, ứng dụng cần hai quyền trong Cài đặt hệ thống: Accessibility và Input Monitoring. Cơ chế TCC (hệ thống kiểm soát quyền bảo mật của macOS / Transparency, Consent, and Control) không tự cập nhật quyền cho tiến trình đang chạy. Bạn bắt buộc phải tắt hẳn Beamer rồi mở lại, nếu không chuột vẫn rê được nhưng bàn phím sẽ bị liệt hoàn toàn.

2. Lỗi chiếm dụng cổng mạng ngẫu nhiên của WinNAT trên Windows

Nhiều công cụ KVM cũ chạy cổng 51820 thường bị mất kết nối sau khi khởi động lại máy. Nguyên nhân do WinNAT (cơ chế dịch địa chỉ mạng nội bộ của Windows dùng cho WSL2) tự động chiếm dụng các dải cổng ngẫu nhiên từ 49152 đến 65535. Beamer ấn định cổng DEFAULT_PORT = 24820 và PAIRING_PORT = 24821 nằm dưới mốc 49152, hoàn toàn tránh được tranh chấp cổng mạng trên Windows.

3. Giới hạn bảo mật Wayland trên Linux

Trên Linux sử dụng Wayland (giao thức hiển thị đồ họa hiện đại thay thế X11), cơ chế bảo mật ngăn ứng dụng thông thường nghe lén bàn phím hoặc vẽ đè lên ứng dụng khác. Do đó, Beamer trên Wayland không thể hiển thị viền sáng mép màn hình, phụ thuộc vào portal InputCapture của xdg-desktop-portal và không thể kéo thả chuột qua mép khi đang giữ nút bấm.

Thảo luận thực tế từ cộng đồng kỹ sư trên X

Trên mạng xã hội X, cộng đồng lập trình viên đánh giá cao sự gọn gàng của Beamer:

Tôi tạo ra Beamer vì các công cụ KVM cũ quá rườm rà. Không cần tài khoản đám mây, không cần sinh chứng chỉ TLS, không lo xung đột cổng với WinNAT. Chỉ cần mã 6 số, mã hóa ChaCha20-Poly1305 từng frame và cử chỉ chuột mượt mà.

Một kỹ sư khác chỉ ra lưu ý về chất lượng mạng không dây:

Đã thử nghiệm Beamer giữa MacBook M3 Max và máy Windows 11. Chuột lướt cực nhanh trên Wi-Fi 5GHz, đồng bộ ảnh clipboard rất ổn định. Nhưng trên Wi-Fi 2.4GHz công cộng bị trễ mạng, chuột sẽ có hiện tượng rớt khung hình. Nên dùng mạng 5GHz hoặc cắm dây LAN.

Phần 4: Ma trận quyết định

Beamer tập trung làm tốt một việc duy nhất: truyền phím, chuột và dữ liệu clipboard nội bộ với độ trễ thấp và độ bảo mật cao nhất.

Môi trường làm việc Giải pháp tối ưu Đánh đổi kỹ thuật
Toàn bộ hệ sinh thái Mac Apple Universal Control Mượt mà tuyệt đối, tích hợp sẵn nhưng không hỗ trợ Windows hay Linux.
Mac + Windows dùng toàn bộ chuột phím Logitech Logitech Flow Tiện lợi nhưng lệ thuộc phần cứng Logitech và tốn RAM chạy daemon.
Mac + Windows + Linux dùng chuột phím bất kỳ Beamer Mã nguồn mở GPL-3.0, không tài khoản đám mây, mã hóa ChaCha20 nhưng cần Wi-Fi 5GHz hoặc mạng LAN.
Dàn màn hình chơi game tần số quét cao KVM phần cứng chuyên dụng Độc lập với mạng, nhưng chi phí đắt đỏ, dây cáp phức tạp và chuyển máy chậm.

Lời khuyên cuối

Bạn không cần tốn tiền triệu cho bộ chia phần cứng hay cài đặt các daemon nặng nề để dùng chung chuột phím. Hãy tải Beamer, nhập mã ghép đôi 6 số và để con trỏ chuột di chuyển tự do giữa các màn hình mà không lo lộ lọt dữ liệu ra ngoài Internet.


Câu hỏi thường gặp (FAQ)

Beamer có gửi dữ liệu gõ phím lên máy chủ ngoài không?

Không. Beamer vận hành hoàn toàn theo mô hình ngang hàng (P2P) trong mạng cục bộ. Toàn bộ gói tin đều được mã hóa đầu cuối bằng ChaCha20-Poly1305 với khóa tạm thời X25519, không có tài khoản và không có máy chủ trung gian.

Vì sao chuột rê qua máy khác được nhưng bàn phím không gõ được trên macOS?

Do cơ chế TCC của macOS chưa cập nhật quyền cho tiến trình đang mở. Sau khi cấp quyền Accessibility và Input Monitoring, bạn cần thoát hẳn Beamer rồi khởi động lại ứng dụng.

Beamer có hoạt động qua mạng VPN doanh nghiệp không?

Beamer tối ưu cho các thiết bị chung một dải mạng nội bộ. Mặc dù bạn có thể nhập IP thủ công, các mạng VPN công ty chặn luồng dữ liệu cục bộ sẽ ngăn cản tính năng tìm kiếm và ghép đôi tự động.

Beamer khắc phục lỗi chiếm cổng trên Windows như thế nào?

Ứng dụng cố định cổng chính 24820 và cổng ghép đôi 24821. Cả hai cổng này đều nằm dưới mốc 49152, tránh hoàn toàn dải cổng động mà WinNAT và WSL2 trên Windows tự động chiếm dụng khi khởi động máy. EOF

Bài viết liên quan