NanoKVM-Lite

一、简介

Lichee NanoKVM 是基于 LicheeRV Nano 的 IP-KVM 产品,继承了 LicheeRV Nano 的极致体积 和 强大功能。

NanoKVM 包含一个 HDMI 输入接口,可以被电脑识别为显示器,捕捉电脑画面;一个 USB2.0 接口连接电脑主机,可被识别为键盘鼠标触摸板等HID设备,同时使用TF卡多余存储空间,挂载为一个U盘设备;全系标配一个百兆网口,用于视频和控制信号等的网络传输。另外Full版还带有ATX电源控制接口(USB-C形态)方便远程控制和查看主机开关机状态;Full 版外壳下还带一个 OLED 显示屏,用于显示本机 IP 和 KVM 相关状态。

为满足用户不同需求,NanoKVM 提供两个版本:
NanoKVM Lite 为基础版配置,适合 具有一定DIY能力的个人用户 和 有批量需求的企业用户。
NanoKVM Full 为完整版配置,带精致外壳和完整配件,内置开机即用的系统镜像卡,推荐个人用户购买。

二、参数

产品NanoKVM (Lite)NanoKVM (Full)PiKVM V4
计算单元LicheeRV Nano(RISCV)LicheeRV Nano(RISCV)CM4 (ARM)
分辨率1080P @ 60fps1080P @ 60fps1080P @ 60fps
视频编码MJPEG, H264(WIP)MJPEG, H264(WIP)MJPEG, H264
视频延迟90~230ms90~230ms100~230ms
UEFI/BIOS
模拟USB键鼠
模拟USB存储
IPMI
Wake-on-LAN
Tailscale
WebSSH
自定义脚本-
ETH100M/10M100M/10M1000M/100M/10M
ATX电源控制无,用户可自行连接USB接口IO控制板RJ45接口IO控制板
OLED显示无,用户可自行扩展128x64 0.96" white128x32 0.91" white
串口终端2路2路-
Micro SD卡无,用户自备有,开机即用
扩展配件PoEWiFi/LTE
功耗0.2A@5V0.2A@5VPeak 2.6A@5V
电源输入PC USB即可供电PC USB即可供电
也支持额外辅助供电
需要DC 5V 3A供电
散热静音无风扇静音无风扇需要风扇主动散热
尺寸23x37x15mm
~1/30 PiKVM V4 体积
40x36x36mm
~1/7 PiKVM V4 体积
120x68x44mm

三、NanoKVM 软硬件资料

NanoKVM 基于 Sipeed LicheeRV Nano 核心板搭建,这部分硬件的规格书、原理图、尺寸图等均可在这里找到:点击这里

NanoKVM Lite 由 LicheeRV Nano E 和 HDMItoCSI 小板构成,NanoKVM FULL 在 NanoKVM Lite 基础上增加 NanoKVM-A/B 板和外壳。HDMItoCSI板用于转换HDMI信号;NanoKVM-A 包含 OLED、ATX控制输出(TypeC接口形式)、辅助供电(TypeC接口)以及ATX开关机、复位按键;NanoKVM-B 一端连接A板,一端连接电脑ATX针脚,用于电脑的远程开关机。

NanoKVM 镜像在LicheeRV Nano SDK 和 MaixCDK 基础上构建,可以兼容使用 LicheeRV Nano 的资料,反之LicheeRV Nano 或其他 SG2002 产品无法使用KVM软件。如果您想在 NanoKVM 上构建 HDMI 输入相关应用,请与我们联系,以获得技术支持。


四、开箱

Full版包含 NanoKVM(带外壳,带卡)、KVM-B板、USB A to C 线 *2、杜邦线。

Lite版包含 NanoKVM(不带外壳和TF卡) 、散热片。

五、接口介绍

  • Full 版本可看到三个 USB Type-C 接口,名称和功能如下

    • HID 接口(也称PC-USB),位于 HDMI 接口下方,用于连接主机,模拟键鼠、U盘、RNDIS设备
    • AUX 接口,位于 HDMI 接口上方,辅助供电
    • KVM-B 接口(也称ATX-Power),位于网口上方,连接 KVM-B 提供电源控制功能

六、供电

  • NanoKVM 支持普通 USB 的 5V 供电,功耗约1W,部分老型号主板可能存在供电电流过小的问题,需要通过 AUX 接口额外供电。

  • 部分主板 BIOS 可能默认设置为关机 USB 断电,为确保 NanoKVM 常供电,请在 AUX 接口上额外供一路5V电源。

  • NanoKVM USB CC 接口下拉5.1K电阻,可使用正规 PD 充电头供电。部分劣质电源未经协商直接输出12V电压,会将NanoKVM直接烧坏。

注:首批内测版 AUX 接口不带 CC 的下拉电阻,无法使用 C-C 的 PD 充电头供电,请使用常规 5V USB 电源适配器。

七、接线

NanoKVM-Full版接口示意图如下,Lite版仅包含 USB-C、HDMI和网口,可以参考Full版接线。

  • 使用一条 USB C to A 数据线连接远程主机和 NanoKVM 的 PC USB 接口(位于 HDMI 接口下方)

  • 一条HDMI(标准尺寸)连接远程主机和 NanoKVM 的 HDMI 接口

  • 使用网线连接 路由器/交换机 与 NanoKVM

  • 再使用一条 USB C to A 数据线连接 KVM-B 板和 NanoKVM 的 ATX 接口(位于网口上方)

    正式版KVM-B板自带主板通用的9Pin排母接口,可以直接插在主板上,机箱的开机按键、Power LED 等接口可接到 KVM-B 的排针上,参考示意图(此处机箱仅连接开机线):

    注:版本号为30132的KVM-B板不能用机箱自带9-Pin排母直接连接板上的排针,需按照上图使用附赠的公对母排线连接

    内测版KVM-B板与主机9针接口连线如下图,双排排针上下联通,另一排可连接机箱的开机按键、Power LED 等接口

    注意:早期内测板NanoKVM重启时会短暂拉高RESET控制脚,导致连接的电脑重启,为避免这一问题,请不要连接RESET跳线,后期正式版已修复


八、更新

8.1. 更新镜像

Lite 版本需要准备 TF 卡并且烧录镜像后才能开始使用!

Full 版本出厂时已经烧录了镜像,可以跳过此步骤。

镜像会不定期更新。建议更新到最新版本镜像,以获取更好的使用体验。

具体操作方式请参考 烧录镜像

8.2. 更新应用

新的应用往往带来更多功能或修复某些重要漏洞,建议您将 NanoKVM 应用更新到最新版本,具体操作方式请参考 更新应用

九、基础操作

9.1. 如何获取IP地址

Full版NanoKVM自带OLED显示屏,联网之后会在显示屏第一行显示IP地址;

Lite版用户请参考获取IP

9.2. 查看远程桌面

浏览器直接输入获取的IP,进入登录页面,默认账号密码为admin、admin,登录后建议先检查更新(设置 -> 检查更新),详细步骤可参考 更新应用

Lite版用户,或Full用户重新烧卡登录后页面上无远程画面,请先升级应用后刷新网页,即可开始使用

9.3. 修改账号密码

为保障您的信息安全,请在测试功能正常后修改账号密码

9.4. ATX电源控制

Full 版套餐内包含了 NanoKVM-A/B 板,用于控制和查看主机开关机状态。

  • 顶板上的 5V LED(蓝色)指示 NanoKVM 的供电情况;
  • PWR LED(绿色)为主机的电源指示;
  • POWER按键作用同主机的电源按键,可以控制主机的开关机;
  • RESET按键用主机的重启按键,开机状态下按下RESET将强制重启主机
  • 网页端也可以查看并控制,参考以下

十、OLED界面

  • 显示网线、USB、HDMI 连接状态,连接后图标将反色显示;
  • IP:连接网线后 NanoKVM 默认自动获取IP,并显示在 OLED 上,若无法Ping通网关,将在IP前显示!;
  • RES: 显示当前传输的分辨率,默认720P
  • TYPE: 显示传输的方式,暂时只支持MJPG,H264开发中
  • STREAM: 显示实时传输帧率,系统默认开启了帧差检测(画面静止时停止发送),画面静止时FPS显示为 0
  • QUALITY: 显示压缩质量,50-100%,默认为80%

十一、管理页面功能

悬浮栏从左到右依次为:图像设置、屏幕键盘、鼠标样式、镜像挂载、自定义脚本、KVM网页终端、WOL、ATX控制/指示、设置、全屏、隐藏悬浮栏。

11.1. 分辨率、帧率、图像质量设置

  • NanoKVM 支持 1080P、720P、600P、480P 的图像传输,在图像设置->分辨率中可以选择不同的分辨率。越大的分辨率所占用带宽越大、实时帧率越小。

    • 注:此处仅修改图像的传输大小,不会改变 HDMI 输入的图像尺寸,如需修改,请前往主机系统的设置菜单进行设置。
  • 帧率设置选项用于修改传输的最大帧率,可以限制网络带宽的占用,但帧率越低,画面越卡,请根据网络情况合理配置。Full版用户在OLED上可看到视频的实时帧率。

  • 图像质量选项可以修改画面的压缩比例,当您认为画面较卡,延迟较高时,可以适当调低图像质量。

  • 帧差检测

    • NanoKVM 默认打开帧差检测功能,即画面静止时停止传输图像,用于节省流量。
    • 此功能产生约占用2.5%的CPU占用,从静止到画面变化存在 0.2s 的延迟,点击显示->帧差检测即可关闭或开启此功能。

11.2. 虚拟键鼠使用

  • NanoKVM 的 USB 接口模拟出了键鼠设备。打开浏览器页面后,系统将自动捕获键鼠输入,并将操作实时同步到 NanoKVM 连接的主机。用户可以选择隐藏鼠标或改变在画面上显示的样式。
  • 对于不方便使用键盘的用户,我们提供了屏幕键盘,点击悬浮栏的键盘图标即可唤出屏幕键盘。

11.3. ISO镜像挂载以及远程装机

  • Nano KVM的 USB-C 端口除模拟键鼠设备外,还模拟了一个U盘设备,挂载了TF卡内的一部分存储空间,用于装机等需求,该U盘默认格式化为exFAT格式,Full版NanoKVM内置TF卡,模拟出的U盘大小约21G。

  • 与普通U盘不同,NanoKVM的虚拟U盘内可同时存放多个镜像,开机之前可以通过 web 页面的选项选择要安装的系统镜像进行挂载。

用户需提前下载待安装的镜像(通常以.iso结尾),将 NanoKVM USB-C 插入电脑,将下载好的镜像直接复制到U盘内(可复制多个系统),即可拔出。

按上述步骤连接远程主机与Nano KVM,在浏览器登录系统后,点击光盘图标,选中待安装的系统,即可实现ISO挂载

接下来开始装机操作,点击开机(短按),迅速按键盘上的F11键(不同主机按键可能不同,请参照主机说明),选择对应的镜像启动并完成装机流程。

注:

  • 虚拟U盘功能默认打开,如果不需要可通过点击设置->虚拟U盘关闭。
  • 请先在主机上安全弹出原有的21G虚拟U盘后再挂载镜像,以免数据丢失
  • 虚拟U盘也可以当作普通U盘使用,web界面未选中任何镜像时,默认挂载整个21G的虚拟U盘。
  • 用户也可使用常规的烧卡方式烧录镜像,不推荐
  • 镜像拷入 NanoKVM 的速度受到 USB2.0 传输速度和 SG2002 写卡速度的限制,可能会比较慢,用户可将TF卡取出,插入电脑,解除隐藏TF卡的第三个分区,直接将镜像拷入其中。
  • 虚拟U盘同时挂载到NanoKVM的 /data 目录,用户可在 NanoKVM 终端内直接读写该分区
  • 设置中的取消虚拟U盘操作将强制弹出U盘,请先安全弹出U盘后再设置,以免数据丢失

11.4. 网页终端

  • 用户点击悬浮栏的终端->NanoKVM 终端图标,即可打开网页终端,无需ssh直接访问 NanoKVM 系统
  • 当 NanoKVM 断网重连或系统重启后,网页终端界面会提示重新登录,账号root,密码root

11.5. 串口终端

NanoKVM 基于 LicheeRV Nano 构建,RVNano 核心板共有3个串口,UART0默认用于输出系统log,在 NanoKVM Full 版中,引出了 UART1/2,用户可自行拓展功能(第一批内测版仅在外壳处开孔)

点击管理页面的终端,选择串口终端,选择使用的串口,填写波特率,点击开始后即可使用


注:串口终端功能使用 WebSSH + picocom 搭建,用法同 picocom

11.6. RNDIS

NanoKVM 的 USB 会默认虚拟出 RNDIS USB网卡(从设备),当 NanoKVM 服务异常时可用于系统维护,请参照这里连接电脑,更多用法请自行探索。

若不使用 RNDIS 功能,可点击设置->RNDIS关闭。

11.7. ATX电源控制

  • 在悬浮栏右侧,有电源和硬盘图标,正常情况下是灰色状态,开机后电源图标变绿。
  • 点击电源图标可看到重启键、电源键(长/短按)
  • Full版的ATX控制板受延长线芯数限制,只引出电源、重启按键和电源灯。Lite用户可根据原理图自行扩展。

注:

  • 正式版 NanoKVM-A 硬件保留 WiFi 模块引脚,修改了OLED和部分的ATX引脚,固件会自动检测硬件版本并自适应。
  • Lite 版 NanoKVM 不包含 NanoKVM-A/B ,固件会直接识别为正式版

11.8. 设置

  • 切换中英文
  • 关于NanoKVM:点击打开Wiki
  • 检查更新:当有可用更新时,用户可点击更新,约15s左右,网页自动刷新重新登录即可更新完成。

十二、网络延迟测算

主机连接KVM和一个普通屏幕,播放秒表计时视频,拍照捕捉远程桌面和显示屏,计算差值即可估算网络延迟。

十三、硬件与结构

13.1. 拆解

Full 版 NanoKVM 在重新烧卡时需要对外壳拆解,请按下图提示拆开外壳

  1. 拆下底部4颗螺丝
  2. 借助HDMI和网口将 NanoKVM 推出外壳
  3. 取下散热器即可拔出TF卡

13.2. 内测版和正式版的硬件差别

正式版硬件预留 WiFi 模块相关引脚,修改了 OLED 和 ATX 的引脚分配,如下所示

为兼容前后两种硬件,软件上做了自适应设计,内测用户和正式版用户可以放心更新。

13.3. 重启问题

早期内测版 Full NanoKVM 在 reboot 系统时会短暂拉高 RST_SW 引脚,导致连接的主机复位,正式版硬件已修复这个问题。

如果您使用早期内测版 Full NanoKVM 并受次问题的困扰,可以拆机后按上图内测版引脚定义,在 RST_KEY 和 PWR_KEY 上添加1K下拉电阻

十四、获取推流相关数据

推流和图像参数位于/kvmapp/kvm文件夹下

  • HDMI 获取的图像原始分辨率

    • 图像宽度: /kvmapp/kvm/width
    • 图像高度: /kvmapp/kvm/height

    示例: 终端查看当前分辨率echo "$(cat /kvmapp/kvm/width) * $(cat /kvmapp/kvm/height)"

    • 注: width/height 仅读取,不可写入,kvm_stream 根据该数据实时修改vi参数,自行修改将导致vi子系统无法解析正确图像
    • 当两参数中有一个或两个全为0时,表明HDMI线缆拔出 或 HDMI 分辨率正在切换
    • width/height 两参数仅在HDMI插入,拔出,或改变分辨率时才能捕获,当 NanoKVM 在开机前插入HDMI线缆,并且HDMI输出非默认1080P分辨率时,vi子系统将无法获取正确的尺寸参数,导致无视频流输出,因此建议用户在第一次开机上电后再插入HDMI,后续每次开机会读取上次关机前保留的HDMI分辨率,故不会受到影响.
  • Stream 传输分辨率

    • Stream 传输分辨率不同与 HDMI 获取的分辨率,有时为了减小传输数据量,可以设置一个较小的传输分辨率,NanoKVM会相应的对图像缩放后再传输
    • 传输分辨率: /kvmapp/kvm/res
      • 0 : 自动,将跟随 HDMI 原始分辨率
      • 480 : 以640*480传输
      • 600 : 以800*600传输
      • 720 : 以1280*720传输
      • 1080: 以1920*1080传输
    • 注: 该参数可读可写

    示例: 终端设置 kvm_stream 以 1280*720 分辨率传输: echo 720 > /kvmapp/kvm/res

  • Stream 最大传输帧率

    • 最大传输帧率: /kvmapp/kvm/fps
    • 范围: 0-60
    • 注: 参数可读可写

    示例: 终端限制 kvm_stream 最大以 45 fps 传输: echo 45 > /kvmapp/kvm/fps

  • Stream 当前传输帧率

    • 当前传输帧率: /kvmapp/kvm/now_fps
    • 范围: 0-60
    • 注: 参数只读

    示例: 查看当前stream分辨率: cat /kvmapp/kvm/now_fps

  • Stream 传输流格式

    • 传输流格式: /kvmapp/kvm/type
      • mjpeg
      • h264
    • 注: 参数可读可写
    • stream h264 格式开发中,预计10月上线

    示例: 终端修改传输格式为MJPEG: echo mjpeg > /kvmapp/kvm/type

  • Stream 传输流质量

    • 传输流格式: /kvmapp/kvm/qlty
    • 范围: 50-100
    • 注: 参数可读可写,仅针对MJPEG格式调整质量,设置95以上质量时,受限于SG2002 CPU和编码器,传输帧率会变慢,延迟变大.

    示例: 终端修改MJPEG质量为60%: echo 60 > /kvmapp/kvm/qlty

  • Stream 帧差检测设置

    • KVM 捕获的电脑画面并非时刻改变,当画面静止时,可以暂停流的传输来降低流量消耗
    • 帧差检测设置: /etc/kvm/frame_detact
      • 创建文件: 启动帧差检测
      • 删除文件: 关闭帧差检测
    • 帧差计算需要消耗大量CPU资源,所以stream使用 320*240 的图像计算帧差,并且每100帧检测一次,此时帧差检测带来的CPU消耗约为2%, 当检测到画面静止时, kvm_stream 停止流传输, now_fps降低为0, CPU 开始连续检测图像变化, 当图像改变时可以以最快速度恢复流的传输.
    • 注: 帧差计算尺寸和跳帧数暂不可调

    示例: 打开 kvm_stream 帧差检测功能: touch /etc/kvm/frame_detact

  • 查看硬件版本

    • NanoKVM有不同的版本,版本之间硬件有所差异,详情请自行翻阅原理图,开机脚本将检测硬件差异,并保存在/etc/kvm/hw
      • alpha : 早期内测版 NanoKVM Full
      • beta : 正式版 NanoKVM Full 和 Lite
      • pcie : NanoKVM PCIe
  • network相关配置

    • /etc/kvm/server.yaml
    • 详情参考WiKi->KVM->NanoKVM Cube->网络

十五、USB HID模拟设备

  • 初始化: NanoKVM借助USB Gedget 模拟 USB HID 设备, 在设备开机脚本 /etc/init.d/S03usbdev 中完成了键盘,鼠标,触屏的初始化
  • 模拟键盘
    • 设备: /dev/hidg0
    • 报文:8byte:
      • 格式: |0x00|0x00|0xXX|0x00|0x00|0x00|0x00|0x00|
      • 第四位代表普通按键键值,如 F11: 0x44
      • 发送键值后需要及时释放
      • 示例: 按下F11按键
        echo -ne \\x00\\x00\\x44\\x00\\x00\\x00\\x00\\x00 > /dev/hidg0   # 按下F11键
        echo -ne \\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00 > /dev/hidg0   # 释放
        
  • 模拟鼠标
    • 设备: /dev/hidg1
    • 报文:4byte:
      • 格式: |b8 按键|s8 x轴相对位移|s8 y轴相对位移|s8 滚轮|
      • 按键
        • 左键按下:0x01
        • 右键按下:0x12 # 兼容多系统
        • 释放:0x00
        • 示例: 点按左键
          echo -ne \\x01\\x00\\x00\\x00 > /dev/hidg1  # 按下左键
          echo -ne \\x00\\x00\\x00\\x00 > /dev/hidg1  # 释放
          
      • 位移 (相对位移)
        • x/y轴相对位移为带符号数,x正值向右移动,y正值向下移动
        • 示例: 右移5格,上移1格
          echo -ne \\x00\\x05\\xff\\x00 > /dev/hidg1
          
      • 滚轮
        • 滚轮为带符号数,正值向下移动
        • 示例: 下移1格
          echo -ne \\x00\\x00\\x00\\x01 > /dev/hidg1
          
  • 模拟触屏
    • 设备: /dev/hidg2
    • 报文:6byte:
      • 格式: |按键|x轴绝对位置低8位|x轴绝对位置高8位|y轴绝对位置低8位|y轴绝对位置高8位|滚轮|
      • 按键
        • 左键按下:0x01
        • 右键按下:0x10
        • 释放:0x00
        • 示例: 点按左键
          echo -ne \\x01\\x00\\x00\\x00\\x00\\x00 > /dev/hidg2  # 按下左键
          echo -ne \\x00\\x00\\x00\\x00\\x00\\x00 > /dev/hidg2  # 释放
          
      • 位移 (绝对位置)
        • x/y均为无符号数,(0x0001,0x0001) 代表左上角, (0x7fff,0x7fff) 代表右下角
        • 示例: 鼠标移动至屏幕正中间
          echo -ne \\x00\\xff\\x3f\\xff\\x3f\\x00 > /dev/hidg2
          
      • 滚轮
        • 滚轮为带符号数,正值向下移动
        • 示例: 下移1格
          echo -ne \\x00\\x00\\x00\\x00\\x00\\x01 > /dev/hidg2
          

十六、注意事项

  • 用户自己构建的程序请不要放在/kvmapp下,每次更新将会重置文件夹内所有内容
  • 模拟键鼠操作可能与前端页面操作冲突

十七、异常修复

  • 无法获取IP地址
    1. Lite用户首先检查有无插卡, Lite 版本默认不带卡出货,需用户自备TF卡,按照此处的说明烧卡后重试;
    2. 检查网络交换机是否支持100M, 部分新交换机不支持100M的连接, 请更换交换机后重试
    3. 尝试更换电源, 部分电源可能导致 NanoKVM 获取不到IP, 或影响网速
  • 登录浏览器界面后,无画面
    1. 确保HDMI有输出信号, 重新拔插HDMI线缆
    2. 进入网页终端,执行 /etc/init.d/S95nanokvm restart 重启服务。
    3. 如果上述方式无法恢复正常,点击界面上的检查更新,更新应用
    4. 早期内测版 Full NanoKVM 使用普通排线连接 HDMI 采集板,可能因接触不良导致检测不到 HDMI 信号,可按下图所示拆解,并重新连接排线
  • OLED上正常显示信息,但无法打开网页
    1. 参考这里连接开发板
    2. 输入指令rm /etc/kvm/server.yaml
    3. 执行 reboot 重启系统
  • 早期内测版 Full NanoKVM ATX小板连接主机RESET引脚, 重启NanoKVM时主机可能被重启, 请断开RESET跳线
  • 早期内测版 Full NanoKVM 存在电流倒灌问题: 主机关机且USB无电源输出, 当连接辅助供电电源时电流会倒灌入主机
    1. 首先建议设置主机关机后USB保持供电
    2. Full版用户: 按下图位置使用电烙铁断开5V电阻或排针短接处, 仅使用辅助供电口供电
  • 尝试断电重启解决未知问题
  • 更新过程中如果出现断网等异常情况,可能导致更新失败,若旧应用也无法启动时,请参照以下解决方法:
    1. 参考这里连接开发板
    2. 执行 rm -r /kvmapp && cp -r /root/old/ / && mv /old/kvmapp
    3. 执行 reboot 重启系统
    4. 重新烧录系统
    5. 手动更新: 可以下载后执行 python 更新脚本, 来手动完成更新过程
      1. 下载update-nanokvm.py.zip并解压
      2. 执行: python update-nanokvm.py
      3. 等待更新完成
  • 若上述方法不能解决异常,请在论坛,GitHub或QQ群提出您的问题,我们会耐心解答