DIY IP KVM bằng Raspberry Pi với Pi-KVM
IP KVM (KVM over IP) là thiết bị điều khiển chuột, bàn phím, màn hình của máy chủ từ xa qua mạng IP như thể đang ngồi trước thiết bị. Các đặc điểm chính bao gồm: điều khiển từ xa, quản lý đa nền tảng, và hỗ trợ truy cập BIOS từ xa.
Khi chơi self-host và home-lab, chắc hẳn sẽ có những thiết bị mà các bạn muốn truy cập từ xa để điều khiển ở mức độ phần cứng để khắc phục sự cố, ví dụ như cần restart, hoặc thay đổi thông số BIOS, hay đổi nền tảng OS để boot với thiết bị đang cài nhiều OS… Đây là những thứ mà những phần mềm điều khiển từ xa ở cấp độ phần mềm không làm được, và chúng ta cần dùng đến IP-KVM.
Tuy nhiên, hiện nay một thiết bị IP-KVM có thể có mức giá khá cao, khoảng trên dưới 2 triệu đồng và chỉ có duy nhất một chức năng là làm IP-KVM.
Trong bài này, mình sẽ giới thiệu một giải pháp khác, với mức chi phí thấp hơn, vẫn có đầy đủ tính năng cơ bản của IP-KVM, ngoài ra cũng vẫn có thể làm nhiều nhiệm vụ khác trong hệ thống self-host, hoặc sau này khi không còn nhu cầu sử dụng IP-KVM thì vẫn có thể tận dụng phần cứng để làm việc khác.
Đó là sử dụng một thiết bị Raspberry Pi, cài đặt hệ điều hành Pi-KVM, dựa trên nền tảng Arch Linux, cùng với một vài phần cứng bổ sung với mức chi phí rất rẻ, là các bạn đã có một thiết bị IP-KVM thực thụ. Bản thân mình đang sử dụng thiết bị này để kết nối và điều khiển từ xa máy chủ Proxmox của mình.
Lưu ý: vì đây là thiết bị DIY, nên sẽ có rất nhiều yếu tố ảnh hưởng đến kết quả cuối cùng, những gì mình chia sẻ trong bài này có thể không áp dụng được cho mọi tình huống, và không đảm bảo chắc chắn khi các bạn làm theo thì mọi thứ cũng sẽ hoạt động bình thường. Vì vậy, bạn hãy coi đây là một tài liệu tham khảo và chia sẻ kinh nghiệm của cá nhân mình, trong quá trình các bạn thực hiện, nếu có gặp vấn đề hoặc có thểm kinh nghiệm có thể cùng thảo luận ở phần bình luận.
Nội dung chính
Video
Chuẩn bị phần cứng
Phần cứng có thể sử dụng là Raspberry Pi 2, 3, 4 (Pi 5 thì không còn phù hợp về phần cứng). Tuy nhiên, để tối ưu về mặt chi phí, mình nghĩ Pi 3 là phù hợp nhất.
Còn mức giá dành cho Pi 4 cùng các module bổ sung có thể cao tương đương giải pháp IP-KVM thương mại rồi, nền trừ khi các bạn thật sự muốn DIY và sau này có thể làm thêm nhiều thứ với phần cứng thì mới nên chọn Pi 4. Ngoài ra, Pi 4 nếu dùng làm Pi-KVM sẽ có thêm tính năng ổ CD/USB ảo để có thể boot từ KVM là hơn Pi 2, 3. Nên nếu các bạn cần tính năng này thì có thể cân nhắc chọn Pi 4. Còn nếu chỉ cần điều khiển chuột phím và xem màn hình, Pi 3 là phù hợp nhất.
Vì mình sử dụng phần mềm Pi-KVM, họ cũng có hướng dẫn để các bạn DIY nên các bạn có thể tham khảo, tuy nhiên trong hướng dẫn của Pi-KVM sẽ dùng khá nhiều phần cứng đắt tiền hơn và có vẻ khó kiếm ở Việt Nam. Vì vậy mình sẽ chia sẻ cả giải pháp phần cứng của mình.
Bo mạch:
- Raspberry Pi 2 – Giá khoảng 300-400k trên thị trường đồ cũ
- Raspberry Pi 3 – Giá khoảng 500-600k trên thị trường đồ cũ
- Raspberry Pi 4 – Giá khoảng 1.2 triệu bản 2GB ram trên thị trường đồ cũ
Thẻ nhớ:
- Khuyến nghị tối thiểu 32GB Class10. Các bạn có thể tham khảo một số mẫu sau đáp ứng thoải mái:
- Lexar U1 A1: s.shopee.vn/3g2N0DqZQy
- KIOXIA U1: s.shopee.vn/9pd0LgMHvW
- Sandisk Ultra: s.shopee.vn/2qTG0tFqNd
Tính năng ghi màn hình:
- Lựa chọn 1: Module HDMI-CSI bridge chip TC358743 – Sẽ hỗ trợ H264 trên Pi 3, Pi 4, có thể nhận diện độ phân giải và thường cho độ trễ thấp nhất. Tuy nhiên, mình thấy module này khá khó kiếm ở VN nên mình dùng lựa chọn thứ 2.
- Lựa chọn 2: HDMI USB Capture – Chỉ hỗ trợ định dạng MJPEG video, không tự động nhận diện độ phân giải, độ trễ sẽ cao hơn lựa chọn 1 và đôi khi có thể gặp vấn đề tương thích.
- Tuy nhiên, lựa chọn 2 này có thể dễ dàng mua và mức giá rẻ hơn module HDMI-CSI. Bản thân mình dùng cho server để boot vào BIOS thấy vẫn ổn, các thao tác với giao diện dòng lệnh cũng khá tốt. Tuy không quá mượt mà nhưng vẫn đủ để cấu hình và thiết lập PC từ xa. Còn với nhu cầu như chơi game cần độ trễ thấp, lựa chọn này sẽ không khả thi, các bạn nên dùng lựa chọn 1. Link tham khảo HDMI Capture mà mình sử dụng: s.shopee.vn/4LI60xFl2R
- Bổ sung: Nếu thiết bị của các bạn không có cổng xuất hình HDMI mà dùng Display Port, có thể tham khảo thêm đầu chuyển từ Display Port sang HDMI, mình dùng loại này: s.shopee.vn/111bnSIddZ
Tính năng điều khiển phím và chuột
- Lựa chọn 1: thêm 1 bo mạch Raspberry Pi Pico – Phương án này ‘chính thống’ hơn theo hướng dẫn của Pi-KVM, tuy nhiên mình thấy chi phí cao hơn và nối dây cũng phức tạp hơn. Vì vậy mình cũng dùng lựa chọn 2.
- Lựa chọn 2: thêm 1 bo mạch CH9329 – chuyển đổi tín hiệu UART sang USB. Các dòng Pi đều có chân GPIO UART, vì vậy khi dùng mạch này sẽ rất tiện, và nối dây cũng đơn giản hơn. Link tham khảo mạch CH9329: s.shopee.vn/2BDZCX7xG9
- Bổ sung: Mua kèm dây nhảy cái – cái 30cm để nối mạch CH9329 vào Pi: s.shopee.vn/2VqPbETYGp
- Đối với Pi 4: Vì Pi 4 có cổng USB-C vừa có thể là cổng nguồn, vừa có thể là cổng USB-OTG để truyền dữ liệu, vì vậy các bạn có thể dùng bộ chia POWER/USB: s.shopee.vn/5q6rZaKtr2

Chuẩn bị phần mềm
Các bạn tải OS Pi-KVM tại đây, kéo xuống dưới sẽ có mục DIY PiKVM V2 Platform dành cho Pi 4 và DIY PiKVM V1 Platform cho Pi 2 và Pi 3. Các bạn tải đúng phiên bản phần cứng mà các bạn sẽ dùng, ví dụ như trường hợp của mình là HDMI – USB dongle dành cho Raspberry Pi 3

Sau đó các bạn dùng Raspberry Pi Imager để nạp Pi-KVM vào thẻ nhớ.
Sau khi hoàn thành, các bạn cắm thẻ nhớ vào Pi và tiến hành lắp đặt phần cứng,
Lắp đặt phần cứng
Chỉ có 2 lưu ý nếu các bạn sử dụng phần cứng giống mình:
- HDMI USB Capture sẽ gắn ở chân USB xa cổng LAN nhất và là chân bên dưới sát bo mạch nhất.
- CH9239 sẽ nối dây vào chân UART của Pi như sau:
- Chân số 6 [GND] của Pi – nối vào chân GND của CH9239
- Chân số 8 [TXD] của Pi – nối vào chân RX của CH9329
- Chân số 10 [GXD] của Pi – nối vào chân TX của CH9329



Quan trọng:
- KHÔNG nối chân 5V của CH9329 vào Pi, CH9329 sẽ dùng nguồn 5V từ cổng USB của PC/server sẽ điều khiển.
- Trường hợp cần nối chân 5V cho CH9329: Đó là nếu như khi khởi động mà PC/Server không có chế độ cấp điện cho cổng USB để các bạn có thể ấn phím truy cập BIOS. Lúc này các bạn mới cần nối thêm dây nguồn từ Pi chân số 4 [VCC] sang CH9329 chân 5V với 1 diot 1N5819 ở giữa, diot này này ngăn hiện tượng xung nguồn giữa Pi và máy tính đang điều khiển.
Cơ bản như vậy là xong, giờ đây các bạn chỉ cần:
- Nối dây HDMI từ USB Capture vào PC/Server sẽ điều khiển
- Cắm CH9329 vào cổng USB của PC/Server sẽ điều khiển
- Cắm dây mạng LAN cho Pi
- Cắm nguồn và chờ Pi khởi động.

Cấu hình phần mềm
Nếu như các bạn chưa đặt DHCP tĩnh cho Pi từ trước, các bạn sẽ cần công cụ quét IP như Angry IP scanner để quét mạng nội bộ xem có IP nào đang mở host ở cả 3 cổng 22,80,443 – thì đây khả năng cao chính là Pi-KVM.

Các bạn thử truy cập, nếu ra đúng Web UI của Pi-KVM thì đó chính là IP của Pi.
Các bạn đăng nhập bằng username và password mặc định là admin – admin

Sau đó các bạn có thể vào thử mục KVM để xem thiết bị đã nhận diện được những gì rồi. Nếu cài đặt phần cứng đúng, thì khả năng là sẽ có nhận được màn hình rồi. Nhưng kể cả chưa nhận được gì cả cũng không sao, vì chúng ta sẽ cấu hình ngay sau đây.
Các bạn thoát mục KVM ra để vào mục Terminal.
Các bạn gõ lệnh dưới để truy cập root, tài khoản root cho Arch Linux của Pi-KVM là root – root. Các bạn điền mật khẩu mặc định là root sau khi gõ lệnh d
su -
Các bạn điền mật khẩu mặc định là root sau khi gõ lệnh su –
Kế tiếp, các bạn dùng lệnh rw để cho phép hệ điều hành vào chế độ read-write
ro
Các bạn chạy lệnh sau để update phần mềm cho Pi-KVM trước:
pikvm-update
Nếu bị lỗi pikvm-update: command not found, các bạn chạy lại những lệnh sau:
pacman -Syy
pacman -S pikvm-os-updater
pikvm-update
Quá trình update phần mềm có vẻ khá lâu, có lẽ vì server của Arch Linux không ở gần VN như các biến thể Linux khác. Sau khi phần mềm update xong. Các bạn dùng lệnh sau để kiểm tra Pi đã nhận USB Capture chưa:
ls -l /dev/video*
Nếu màn hình trả về: /dev/video0 (và có thêm video1, video2)… tức là pi 3 đã nhận ra cục HDMI Capture.

Nếu báo no directory, tức là hệ điều hành Pi chưa nhận diện được cục HDMI Capture, các bạn có thể rút ra cắm lại (sang cổng khác), hoặc kiểm tra nguồn của Pi đã đủ công suất để cấp nguồn ổn định cho cổng USB.
Nếu như Pi đã nhận USB Capture mà các bạn kiểm tra KVM không thấy hiển thị màn hình, có thể thử config như sau:
nano /etc/kvmd/override.yaml
Thêm vào file đoạn này (chỉ áp dụng nếu như HDMI Capture của các bạn không hiển thị màn hình, hoặc bị đen màn hình sau khi máy tính thay đổi độ phân giải (ví dụ như lúc boot lên, trước và sau khi máy load driver card màn hình):
kvmd:
streamer:
forever: true
cmd_append: [--slowdown]
Ấn ctrl + O, Enter và ctrl + X để lưu lại
Sau đó dùng lệnh này để load lại driver:
systemctl restart kvmd
Bây giờ quay lại KVM để kiểm tra là màn hình đã có thể hiển thị. Nếu vẫn chưa hiển thị, các bạn thử rút hẳn HDMI Capture ra khỏi cổng USB của Pi, ngắt kết nối HDMI và cắm lại mọi thứ là được nhé.
Đôi khi HDMI Capture bị treo đơ, có thể gây hiện tượng đen màn hình, chúng ta ngắt mọi kết nối (USB, HDMI) ra khỏi HDMI Capture tầm một vài giây để buộc thiết bị này restart và cắm lại thường là sẽ được.
Kế tiếp chúng ta cấu hình bàn phím và chuột cho Pi-KVM dùng driver CH9329
Các bạn quay lại file config:
nano /etc/kvmd/override.yaml
Và thêm cấu hình hid như sau (ví dụ nếu trước đó đã cấu hình streamer):
kvmd:
streamer:
forever: true
cmd_append: [--slowdown]
hid:
type: ch9329
device: /dev/ttyAMA0
Ấn ctrl + O, Enter và ctrl + X để lưu lại.

Với hệ thống của mình, mình không cần dòng lệnh về streamer thì file cấu hình sẽ chỉ như thế này:
kvmd:
hid:
type: ch9329
device: /dev/ttyAMA0
Sau đó, chúng ta sẽ sửa thêm file này:
nano /boot/cmdline.txt
Tìm và xóa đoạn chữ console=serial0,115200 hoặc console=ttyAMA0,115200 (chỉ xóa đúng cụm từ đó, giữ nguyên các thông số còn lại trên cùng một dòng đó). Lưu lại file bằng ctrl + O, Enter và ctrl + X.
Nếu không sửa file này, mỗi khi Pi khởi động, Linux có thể sẽ đổ hàng loạt dòng chữ log vào cổng Serial. Mạch CH9329 sẽ hiểu nhầm đó là lệnh bàn phím và “gõ” lung tung vào PC/server.
Sau đó dùng lệnh này để load lại driver, hoặc reboot luôn Pi-KVM:
#lệnh load lại driver
systemctl restart kvmd
#lệnh trả os về chế độ read-only
ro
#lệnh reboot hệ thống
reboot
Sau khi load lại driver hoặc reboot, bây giờ quay lại KVM để kiểm tra là chúng ta đã có thể xem màn hình và điều khiển chuột phím. Như vậy là đã thành công rồi.


Lưu ý: Nếu như chỉ nhìn thấy một màn hình Desktop trống trơn, có thể PC/Laptop của các bạn đang ở chế độ Extend Display, các bạn cần chỉnh lại về chế độ Duplicate hay Mirroring là được nhé.
Cấu hình BIOS PC / Server
Vì chúng ta dùng mạch điều khiển chuột phím cấp nguồn bởi chính PC / Server, vì vậy các bạn nên vào BIOS để bật tính năng luôn cấp nguồn cho cổng USB.

Ngoài ra, cũng có thể cấu hình thêm cả tính năng luôn xuất hình ra cổng HDMI / Display Port (mà các bạn sẽ cắm vào HDMI capture) để cổng này luôn có tín hiệu hình ảnh, bất kể có cắm cáp hay đang tắt Pi-KVM, không bị PC / Server đưa vào chế độ “ngủ”, đôi khi sẽ khiến việc “đánh thức” cổng này dậy khó khăn hơn khi dùng HDMI Capture.
Đối với Server chạy 24/7, các bạn cũng nên bật luôn tính năng tự động khởi động sau khi được cấp nguồn, vì hiện tại với setup này, Pi-KVM chưa có khả năng bật tắt nguồn thông qua cổng vật lý. Hoặc các bạn cấu hình tính năng WoL, cũng là một phương án dự phòng.
Truy cập từ xa
Có rất nhiều cách để các bạn truy cập từ xa vào Pi-KVM, nhưng cách mình thấy dễ dàng và an toàn nhất là sử dụng Tailscale.
Các bạn có thể cài đặt bằng lệnh:
rw
pacman -S tailscale-pikvm
systemctl enable --now tailscaled
tailscale up
Sau đó màn hình sẽ hiển thị một đường link để các bạn đăng nhập vào Tailscale của các bạn. Các bạn đăng nhập để đăng kí thiết bị vào Tailnet. Các bạn có thể tắt chế độ hết hạn mã hóa (Disable key expiry) để không cần đăng nhập lại sau mỗi 3 tháng.
Sau đó có thể dùng lệnh serve để gán tên miền của Tailscale vào cho Pi-KVM và có thể truy cập từ bất cứ đâu thông qua VPN (hoặc lệnh funnel nếu bạn muốn truy cập từ internet công cộng)
tailscale serve --https=8443 --bg https+insecure://localhost:443
Lưu ý: nên dùng cổng –https=8443 để tránh xung đột với cổng 443 mặc định của nginx trên Pi-KVM. Khi truy cập, các bạn sẽ dùng đường link: https://tên_thiết_bị.tailnet.ts.net:8443
Các bạn có thể xem kĩ hơn về Tailscale Server, và Funnel, mình đã có một bài chia sẻ rất chi tiết tại đây.
Như vậy cơ bản là xong, chúng ta đã có một thiết bị IP-KVM. Các bạn có thể tham khảo thêm nhiều tính năng hoặc cấu hình khác nếu cần thiết tại trang tài liệu của Pi-KVM. Ví dụ như nên đổi mật khẩu mặc định của Pi-KVM cũng như Arch Linux là điều các bạn nên làm sau khi cài đặt xong xuôi.
Nếu thấy nội dung bài viết hữu ích, hãy chia sẻ cho bạn bè và người thân. Đừng quên theo dõi Ngon Bổ Xẻ qua Facebook và Youtube để luôn cập nhật các nội dung mới nhất. Ngoài ra, mình cũng có lập Group FB chuyên chia sẻ các deal hời cho anh em về công nghệ, điện từ, gia dụng… các bạn cũng có thể tham gia nha. Một lần nữa, chân thành cám ơn các bạn và hẹn gặp lại trong những nội dung kế tiếp ❤️
Chia sẻ bài viết:
