侧边栏壁纸

使用orangePi-zero制作PiKVM服务器

  • vegehunter 2025年09月08日 8阅读 0评论
  • 0. 本文参考链接

    https://www.bilibili.com/opus/750451200508297219

    https://www.bilibili.com/video/BV1h84y1o7Zp/?spm_id_from=333.1007.top_right_bar_window_custom_collection.content.click

    https://docs.pikvm.org/wol/

    https://docs.pikvm.org/faq/

    https://github.com/pikvm/pikvm/blob/master/docs/wol.md

    https://toolshu.com/docker-mirror


    1. 制作PiKVM

    1.1 物料和硬件

    物品名称作用
    orangePi-zeroPiKVM服务器本体。
    Micro SD卡作为PiKVM服务器的硬盘。(>=8G)
    采集卡被控机的HDMI输出作为输入数据(HDMI输入),同时转发给显示器(HDMI输出)和PiKVM服务器(Micro-USB输出)。
    网线将PiKVM服务器接入网络。
    USB-typeA to Micro-USB数据线PiKVM模拟键鼠信号,通过USB发送给被控机。
    • orangePi-zero只有一个USB-typeA和一个Micro-USB接口(它同时也是电源输入接口)。
    • 采集卡的Micro-USB连接至orangePi-zero的USB接口传输数据,同时它也给采集卡供电。
    • orangePi-zero需要使用一个USB接口连接至被控机,发送模拟键鼠信号。

    考虑到接口数量限制,系统的供电方案分为以下三种:

    被控机是否支持关机USB供电有无USB-HUB供电方案
    -采集卡的Micro-USB连接至orangePi-zero的USB-typeA,orangePi-zero的Micro-USB连接至被控机的USB-typeA
    ×orangePi-zero的Micro-USB连接至5V电源,orangePi-zero的USB-typeA连接至USB-HUB,USB-HUB连接至采集卡的Micro-USB和被控机的USB-typeA
    ××采集卡的Micro-USB连接至orangePi-zero的USB-typeA,使用特制的线缆将orangePi-zero的Micro-USB连接至被控机的USB-typeA,同时连接至5V电源

    方案三和它使用的特质线缆制作方法参考这篇B站文章

    1.2 下载和烧录镜像

    这里下载名称为"v2-hdmiusb-generic-arm-orangepi-zero.img.bz2"的镜像文件,将镜像文件烧录到Micro SD卡中,然后插入到orangePi-zero中,上电开机,等几秒钟后主板上的绿灯亮起,就可以了。


    2. 配置用户

    在路由器后台找到orangePi-zero的IP地址,直接在浏览器中访问,使用默认用户名admin和默认密码admin登录。

    PiKVM_web.png

    登陆后,显示了这个页面,选择中间的"Terminal"进入终端。

             _____ _        _  ____      ____  __
            |  __ (_)      | |/ /\ \    / /  \/  |
            | |__) |   __  | ' /  \ \  / /| \  / |
            |  ___/ | (__) |  <    \ \/ / | |\/| |
            | |   | |      | . \    \  /  | |  | |
            |_|   |_|      |_|\_\    \/   |_|  |_|
    
        Welcome to Pi-KVM - Open Source IP-KVM based on Raspberry Pi
        ____________________________________________________________________________
    
        The root filesystem of Pi-KVM is mounted in read-only mode by default.
        Use command "rw" to remount it in the RW-mode and "ro" to switch it back.
    
        To prevent kernel messages from printing to the terminal use "dmesg -n 1".
    
        To change KVM password use command "kvmd-htpasswd set admin".
    
        Useful links:
          * https://pikvm.org
          * https://wiki.archlinux.org/index.php/Network_configuration

    首先修改root用户密码,默认密码是root。执行下面的命令。

    # login root
    su
    # enter read-write mode
    rw
    # edit root password
    passwd

    然后删除掉web管理界面的默认用户admin,创建你自己的用户,并设置密码。

    # delete user "admin"
    kvmd-htpasswd del admin
    # create your user for web-control
    kvmd-htpasswd set YourUserName
    # restart service
    systemctl restart kvmd kvmd-nginx

    3. 配置WOL (Wake On Line)

    3.1 被控机

    以Windows被控机为例,在设备管理器中找到网络适配器,找到网卡设备,右键选择属性。

    设备管理器.png

    在“高级”选项中,将“关机 网络唤醒”和“魔术封包唤醒”的值修改为“开启”。

    高级.png

    在“电源管理”选项中,勾选“允许此设备唤醒计算机”。

    电源管理.png

    3.2 PiKVM

    打开文件/etc/kvmd/override.yaml,使用以下内容覆盖该文件。

    kvmd:
        wol:
            mac: 38:60:77:cc:ed:b7

    其中mac填写你的被控机对应网卡的MAC地址,注意,这里使用的是官方文档给出的单被控机用法,只支持一台被控机WOL(由于系统镜像的原因,ugpio库缺少wol插件,所以目前无法通过官方给出的gpio的方式WOL多台被控机,或许可以使用exec脚本而非gpio的方式实现,有兴趣可以自行研究)。

    修改完成后,重启kvmdkvmd-nginx服务。

    systemctl restart kvmd kvmd-nginx

    在浏览器输入IP重新进入PiKVM控制页面,选择KVM,把右上角的“System”标签展开后可以看到新增了一项“Wake on Line Server”。

    WOL.png

    点击后,PiKVM就会广播发送魔术包,默认端口号是9,但只有MAC地址与配置文件中一致的设备(被控机)才会执行WOL,其他设备会把包丢弃。

    WOL2.png

    现在可以看到被控机完成了WOL,并且视频输出正常。

    开机.png

    开机2.png


    4. 在docker部署zerotier(可选)

    4.1 安装docker

    直接使用可执行文件二进制包,在docker官网找到armhf版本(我们使用的PiKVM镜像OS运行在armv7l架构,32位arm),下载下来。将解压后的可执行文件复制到/usr/local/bin目录中即可使用。

    4.2 更换国内可访问的docker镜像源

    在配置文件/etc/docker/daemon.json写入以下内容

    {
            "registry-mirrors": [
                    "https://docker.1ms.run",
                    "https://docker.m.ixdev.cn",
                    "http://docker.m.daocloud.io",
                    "https://dockerproxy.net",
                    "https://xdark.top"
            ]
    }

    重启docker,因为我们是直接使用docker二进制文件,所以只需要将守护进程dockerd杀死,重新执行。

    # kill
    ps | grep dockerd | awk '{print $1;}' | xargs kill -9
    # restart
    dockerd &

    4.3 部署

    为了方便维护,建议在宿主机创建一个配置文件目录(例如/path/to/config),映射到容器中。执行下面的命令创建并运行zerotier容器。

    docker run -d \
      --name 容器名称 \
      --restart=always \
      --device=/dev/net/tun \
      --cap-add=NET_ADMIN \
      --network=host \
      -v /path/to/config:/var/lib/zerotier-one \
      zerotier/zerotier:latest \
      你的网络hash

    其中,--cap-add=NET_ADMIN给容器控制网络的权限,--network=host让容器使用宿主机的网络命名空间,最后将容器的CMD设置为你的网络hash,这样容器一启动就自动加入网络。

    创建好容器后,进入容器的bash,使用下面的命令追踪你自己的私有moon节点。

    # enter container
    docker exec -it 容器名称或hash bash
    # orbit
    zerotier-cli orbit 你的moon节点hash 你的moon节点hash
    0

    —— 评论区 ——

    昵称
    邮箱
    网址
    取消
    博主栏壁纸
    12 文章数
    13 标签数
    8 评论量
    最新评论