mirror of
https://github.com/mofeng-git/One-KVM.git
synced 2026-03-15 15:36:44 +08:00
Compare commits
8 Commits
build-2509
...
build-2510
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5e3d0e3f90 | ||
|
|
9c35c68eda | ||
|
|
651f9a4f4e | ||
|
|
7777f5e490 | ||
|
|
3ab5e2b431 | ||
|
|
65874c6b43 | ||
|
|
67b943c151 | ||
|
|
593de19df5 |
55
README.md
55
README.md
@@ -11,8 +11,8 @@
|
|||||||
[](https://github.com/mofeng-git/One-KVM/blob/master/LICENSE)
|
[](https://github.com/mofeng-git/One-KVM/blob/master/LICENSE)
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
<a href="https://one-kvm.mofeng.run">📖 详细文档</a> •
|
<a href="https://docs.one-kvm.cn">📖 详细文档</a> •
|
||||||
<a href="https://kvmd-demo.mofeng.run">🚀 在线演示</a> •
|
<a href="https://demo.one-kvm.cn/">🚀 在线演示</a> •
|
||||||
<a href="#快速开始">⚡ 快速开始</a> •
|
<a href="#快速开始">⚡ 快速开始</a> •
|
||||||
<a href="#功能介绍">📊 功能介绍</a>
|
<a href="#功能介绍">📊 功能介绍</a>
|
||||||
</p>
|
</p>
|
||||||
@@ -68,7 +68,7 @@
|
|||||||
|:--------:|:-------:|:-----:|:------:|:------:|
|
|:--------:|:-------:|:-----:|:------:|:------:|
|
||||||
| 简体中文 WebUI | ✅ | ❌ | ✅ | ✅ |
|
| 简体中文 WebUI | ✅ | ❌ | ✅ | ✅ |
|
||||||
| 远程视频流 | MJPEG/H.264 | MJPEG/H.264 | MJPEG/H.264 | MJPEG/H.264 |
|
| 远程视频流 | MJPEG/H.264 | MJPEG/H.264 | MJPEG/H.264 | MJPEG/H.264 |
|
||||||
| H.264 视频编码 | CPU | GPU | 未知 | GPU |
|
| H.264 视频编码 | CPU/GPU | GPU | 未知 | GPU |
|
||||||
| 远程音频流 | ✅ | ✅ | ✅ | ✅ |
|
| 远程音频流 | ✅ | ✅ | ✅ | ✅ |
|
||||||
| 远程鼠键控制 | OTG/CH9329 | OTG/CH9329/Pico/Bluetooth | OTG | OTG |
|
| 远程鼠键控制 | OTG/CH9329 | OTG/CH9329/Pico/Bluetooth | OTG | OTG |
|
||||||
| VNC 控制 | ✅ | ✅ | ✅ | ✅ |
|
| VNC 控制 | ✅ | ✅ | ✅ | ✅ |
|
||||||
@@ -87,7 +87,7 @@ Docker 版本支持 OTG 或 CH9329 作为虚拟 HID,兼容 amd64、arm64、arm
|
|||||||
#### 一键脚本部署
|
#### 一键脚本部署
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
curl -sSL https://one-kvm.mofeng.run/quick_start.sh -o quick_start.sh && bash quick_start.sh
|
curl -sSL https://docs.one-kvm.cn/quick_start.sh -o quick_start.sh && bash quick_start.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
#### 手动部署
|
#### 手动部署
|
||||||
@@ -157,6 +157,7 @@ sudo docker run --name kvmd -itd \
|
|||||||
- **GitHub Releases:** [https://github.com/mofeng-git/One-KVM/releases](https://github.com/mofeng-git/One-KVM/releases)
|
- **GitHub Releases:** [https://github.com/mofeng-git/One-KVM/releases](https://github.com/mofeng-git/One-KVM/releases)
|
||||||
|
|
||||||
**其他下载方式:**
|
**其他下载方式:**
|
||||||
|
- **免登录高速下载:** [http://sd1.files.one-kvm.cn/](http://sd1.files.one-kvm.cn/)(由群友赞助,支持直链,接入 EdgeOne CDN,建议使用多线程下载工具下载获取最高速度)
|
||||||
- **免登录下载:** [https://pan.huang1111.cn/s/mxkx3T1](https://pan.huang1111.cn/s/mxkx3T1) (由 Huang1111公益计划 提供)
|
- **免登录下载:** [https://pan.huang1111.cn/s/mxkx3T1](https://pan.huang1111.cn/s/mxkx3T1) (由 Huang1111公益计划 提供)
|
||||||
- **百度网盘:** [https://pan.baidu.com/s/166-2Y8PBF4SbHXFkGmFJYg?pwd=o9aj](https://pan.baidu.com/s/166-2Y8PBF4SbHXFkGmFJYg?pwd=o9aj) (提取码:o9aj)
|
- **百度网盘:** [https://pan.baidu.com/s/166-2Y8PBF4SbHXFkGmFJYg?pwd=o9aj](https://pan.baidu.com/s/166-2Y8PBF4SbHXFkGmFJYg?pwd=o9aj) (提取码:o9aj)
|
||||||
|
|
||||||
@@ -170,19 +171,7 @@ sudo docker run --name kvmd -itd \
|
|||||||
| Virtualbox | Virtualbox-uefi | USB 采集卡、CH9329 | 241004 | ✅ |
|
| Virtualbox | Virtualbox-uefi | USB 采集卡、CH9329 | 241004 | ✅ |
|
||||||
| s905l3a 通用包 | E900v22c | USB 采集卡、OTG | 241004 | ✅ |
|
| s905l3a 通用包 | E900v22c | USB 采集卡、OTG | 241004 | ✅ |
|
||||||
| 我家云 | Chainedbox | USB 采集卡、OTG | 241004 | ✅ |
|
| 我家云 | Chainedbox | USB 采集卡、OTG | 241004 | ✅ |
|
||||||
| 龙芯久久派 | 2k0300 | USB 采集卡、CH9329 | 241025 | ✅ |
|
| 龙芯久久派 | 2k0300 | USB 采集卡、CH9329 | 241025 | ❌ |
|
||||||
|
|
||||||
## 🤝 贡献指南
|
|
||||||
|
|
||||||
欢迎各种形式的贡献!
|
|
||||||
|
|
||||||
### 如何贡献
|
|
||||||
|
|
||||||
1. **Fork 本仓库**
|
|
||||||
2. **创建功能分支:** `git checkout -b feature/AmazingFeature`
|
|
||||||
3. **提交更改:** `git commit -m 'Add some AmazingFeature'`
|
|
||||||
4. **推送到分支:** `git push origin feature/AmazingFeature`
|
|
||||||
5. **提交 Pull Request**
|
|
||||||
|
|
||||||
### 报告问题
|
### 报告问题
|
||||||
|
|
||||||
@@ -280,6 +269,30 @@ sudo docker run --name kvmd -itd \
|
|||||||
|
|
||||||
- 爱发电用户_e3202
|
- 爱发电用户_e3202
|
||||||
|
|
||||||
|
- 一语念白
|
||||||
|
|
||||||
|
- 云边
|
||||||
|
|
||||||
|
- 爱发电用户_5a711
|
||||||
|
|
||||||
|
- 爱发电用户_9a706
|
||||||
|
|
||||||
|
- T0m9ir1SUKI
|
||||||
|
|
||||||
|
- 爱发电用户_56d52
|
||||||
|
|
||||||
|
- 爱发电用户_3N6F
|
||||||
|
|
||||||
|
- DUSK
|
||||||
|
|
||||||
|
- 飘零
|
||||||
|
|
||||||
|
- .
|
||||||
|
|
||||||
|
- 饭太稀
|
||||||
|
|
||||||
|
- 葱
|
||||||
|
|
||||||
- ......
|
- ......
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
@@ -296,6 +309,14 @@ sudo docker run --name kvmd -itd \
|
|||||||
**文件存储服务:**
|
**文件存储服务:**
|
||||||
- **[Huang1111公益计划](https://pan.huang1111.cn/s/mxkx3T1)** - 提供免登录下载服务
|
- **[Huang1111公益计划](https://pan.huang1111.cn/s/mxkx3T1)** - 提供免登录下载服务
|
||||||
|
|
||||||
|
**云服务商**
|
||||||
|
|
||||||
|
- **[林枫云](https://www.dkdun.cn)** - 赞助了本项目宁波大带宽服务器
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
林枫云主营国内外地域的精品线路业务服务器、高主频游戏服务器和大带宽服务器。
|
||||||
|
|
||||||
## 📚 其他
|
## 📚 其他
|
||||||
|
|
||||||
### 使用的开源项目
|
### 使用的开源项目
|
||||||
|
|||||||
@@ -110,6 +110,8 @@ RUN sed -i 's/deb.debian.org/mirrors.tuna.tsinghua.edu.cn/' /etc/apt/sources.lis
|
|||||||
/run/kvmd \
|
/run/kvmd \
|
||||||
/tmp/kvmd-nginx \
|
/tmp/kvmd-nginx \
|
||||||
&& touch /run/kvmd/ustreamer.sock \
|
&& touch /run/kvmd/ustreamer.sock \
|
||||||
|
&& groupadd kvmd-selfauth \
|
||||||
|
&& usermod -a -G kvmd-selfauth root \
|
||||||
&& apt clean \
|
&& apt clean \
|
||||||
&& rm -rf /var/lib/apt/lists/* \
|
&& rm -rf /var/lib/apt/lists/* \
|
||||||
&& rm -rf /tmp/lib /tmp/wheel \
|
&& rm -rf /tmp/lib /tmp/wheel \
|
||||||
|
|||||||
@@ -344,7 +344,9 @@ config_orangepi_zero_files() {
|
|||||||
|
|
||||||
config_onecloud_pro_files() {
|
config_onecloud_pro_files() {
|
||||||
echo "信息:配置 Onecloud Pro 特定文件..."
|
echo "信息:配置 Onecloud Pro 特定文件..."
|
||||||
echo "信息:Onecloud Pro 特定配置完成。"
|
# 在 ustreamer 命令中添加 DRM 设备配置
|
||||||
|
echo "信息:为 Onecloud-pro 添加 DRM 设备支持..."
|
||||||
|
run_in_chroot "sed -i \"/--device=\\/dev\\/video1/a\\ - \\\"--drm-device=/dev/dri/card0\\\"\" /etc/kvmd/override.yaml"
|
||||||
}
|
}
|
||||||
|
|
||||||
config_onecloud_files() {
|
config_onecloud_files() {
|
||||||
@@ -384,18 +386,25 @@ config_oec_turbo_files() {
|
|||||||
echo "信息:配置 VPU 硬件编码支持..."
|
echo "信息:配置 VPU 硬件编码支持..."
|
||||||
run_in_chroot "sed -i 's/--h264-hwenc=disabled/--h264-hwenc=rkmpp/g' /etc/kvmd/override.yaml"
|
run_in_chroot "sed -i 's/--h264-hwenc=disabled/--h264-hwenc=rkmpp/g' /etc/kvmd/override.yaml"
|
||||||
|
|
||||||
# 配置 rc.local 自启脚本,添加设备权限设置
|
echo "信息:配置 udev 规则以授权 kvmd 组访问硬件设备..."
|
||||||
echo "信息:配置 rc.local 自启脚本..."
|
run_in_chroot "cat > /etc/udev/rules.d/99-kvmd-hw-access.rules <<'EOF'
|
||||||
run_in_chroot "cat > /etc/rc.local << 'EOF'
|
# Generic hardware access for kvmd
|
||||||
#!/bin/bash
|
# Safe on all platforms — rules only apply if device exists
|
||||||
chmod 777 /dev/mpp_service /dev/rga
|
|
||||||
exit 0
|
|
||||||
EOF"
|
|
||||||
run_in_chroot "chmod +x /etc/rc.local"
|
|
||||||
|
|
||||||
# 确保 rc-local.service 被启用,以便 kvmd 服务可以依赖它
|
# Rockchip MPP (rkmpp)
|
||||||
echo "信息:启用 rc-local.service 服务..."
|
KERNEL==\"mpp_service\", GROUP=\"kvmd\", MODE=\"0660\"
|
||||||
run_in_chroot "systemctl enable rc-local.service"
|
|
||||||
|
# DMA-Heap (used by modern MPP)
|
||||||
|
SUBSYSTEM==\"dma_heap\", KERNEL==\"system\", GROUP=\"kvmd\", MODE=\"0660\"
|
||||||
|
SUBSYSTEM==\"dma_heap\", KERNEL==\"system-uncached\", GROUP=\"kvmd\", MODE=\"0660\"
|
||||||
|
SUBSYSTEM==\"dma_heap\", KERNEL==\"reserved\", GROUP=\"kvmd\", MODE=\"0660\"
|
||||||
|
|
||||||
|
# Optional legacy Rockchip devices
|
||||||
|
KERNEL==\"rkvdec\", GROUP=\"kvmd\", MODE=\"0660\"
|
||||||
|
KERNEL==\"rkvenc\", GROUP=\"kvmd\", MODE=\"0660\"
|
||||||
|
KERNEL==\"rga\", GROUP=\"kvmd\", MODE=\"0660\"
|
||||||
|
|
||||||
|
EOF"
|
||||||
|
|
||||||
# 替换 DTB 文件
|
# 替换 DTB 文件
|
||||||
replace_oec_turbo_dtb
|
replace_oec_turbo_dtb
|
||||||
|
|||||||
@@ -194,6 +194,8 @@ configure_system() {
|
|||||||
sed -i 's/8080/80/g' /etc/kvmd/override.yaml && \\
|
sed -i 's/8080/80/g' /etc/kvmd/override.yaml && \\
|
||||||
sed -i 's/4430/443/g' /etc/kvmd/override.yaml && \\
|
sed -i 's/4430/443/g' /etc/kvmd/override.yaml && \\
|
||||||
chown kvmd -R /var/lib/kvmd/msd/ && \\
|
chown kvmd -R /var/lib/kvmd/msd/ && \\
|
||||||
|
rm /etc/resolv.conf && \\
|
||||||
|
printf '%s\\n' 'nameserver 1.1.1.1' 'nameserver 1.0.0.1' > /etc/resolv.conf && \
|
||||||
systemctl enable dnsmasq kvmd kvmd-otg kvmd-nginx kvmd-vnc kvmd-ipmi kvmd-webterm kvmd-janus kvmd-media kvmd-gostc && \\
|
systemctl enable dnsmasq kvmd kvmd-otg kvmd-nginx kvmd-vnc kvmd-ipmi kvmd-webterm kvmd-janus kvmd-media kvmd-gostc && \\
|
||||||
systemctl disable nginx systemd-resolved && \\
|
systemctl disable nginx systemd-resolved && \\
|
||||||
rm -rf /One-KVM
|
rm -rf /One-KVM
|
||||||
@@ -331,6 +333,8 @@ apply_kvmd_tweaks() {
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
echo "信息:KVMD 配置调整完成。"
|
echo "信息:KVMD 配置调整完成。"
|
||||||
|
|
||||||
|
run_in_chroot "apt remove -y --purge systemd-resolved"
|
||||||
}
|
}
|
||||||
|
|
||||||
# --- 整体安装流程 ---
|
# --- 整体安装流程 ---
|
||||||
|
|||||||
@@ -6,4 +6,4 @@
|
|||||||
#
|
#
|
||||||
# NEVER use the same passwords for KVMD, IPMI and VNCAuth users.
|
# NEVER use the same passwords for KVMD, IPMI and VNCAuth users.
|
||||||
|
|
||||||
admin
|
admin -> admin:admin
|
||||||
|
|||||||
@@ -657,7 +657,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
<td> </td>
|
<td> </td>
|
||||||
<td>Writable:
|
<td i18n="msd-rw-switch">Writable:
|
||||||
</td>
|
</td>
|
||||||
<td align="right">
|
<td align="right">
|
||||||
<div class="switch-box">
|
<div class="switch-box">
|
||||||
|
|||||||
@@ -103,10 +103,10 @@ function __showKvmdInfo(info) {
|
|||||||
|
|
||||||
if (info.meta !== null && info.meta.server && info.meta.server.host) {
|
if (info.meta !== null && info.meta.server && info.meta.server.host) {
|
||||||
$("kvmd-meta-server-host").innerText = info.meta.server.host;
|
$("kvmd-meta-server-host").innerText = info.meta.server.host;
|
||||||
document.title = `${info.meta.server.host} | PiKVM Index`;
|
document.title = `${info.meta.server.host} | One-KVM Index`;
|
||||||
} else {
|
} else {
|
||||||
$("kvmd-meta-server-host").innerHTML = "<i>Invalid meta</i>";
|
$("kvmd-meta-server-host").innerHTML = "<i>Invalid meta</i>";
|
||||||
document.title = "PiKVM Index";
|
document.title = "One-KVM Index";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -118,7 +118,7 @@ export function Keyboard(__recordWsEvent) {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (is_captured) {
|
if (is_captured) {
|
||||||
title = "Keyboard captured, PiKVM offline";
|
title = "Keyboard captured, One-KVM offline";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$("hid-keyboard-led").className = led;
|
$("hid-keyboard-led").className = led;
|
||||||
|
|||||||
@@ -169,7 +169,7 @@ export function Mouse(__getGeometry, __recordWsEvent) {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (is_captured) {
|
if (is_captured) {
|
||||||
title = "Mouse captured, PiKVM offline";
|
title = "Mouse captured, One-KVM offline";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$("hid-mouse-led").className = led;
|
$("hid-mouse-led").className = led;
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ export function Streamer() {
|
|||||||
var __init__ = function() {
|
var __init__ = function() {
|
||||||
__streamer = new MjpegStreamer(__setActive, __setInactive, __setInfo, __organizeHook);
|
__streamer = new MjpegStreamer(__setActive, __setInactive, __setInfo, __organizeHook);
|
||||||
|
|
||||||
$("stream-led").title = "No stream from PiKVM";
|
$("stream-led").title = "No stream from One-KVM";
|
||||||
|
|
||||||
tools.slider.setParams($("stream-quality-slider"), 5, 100, 5, 80, function(value) {
|
tools.slider.setParams($("stream-quality-slider"), 5, 100, 5, 80, function(value) {
|
||||||
$("stream-quality-value").innerText = `${value}%`;
|
$("stream-quality-value").innerText = `${value}%`;
|
||||||
@@ -289,7 +289,7 @@ export function Streamer() {
|
|||||||
|
|
||||||
var __setInactive = function() {
|
var __setInactive = function() {
|
||||||
$("stream-led").className = "led-gray";
|
$("stream-led").className = "led-gray";
|
||||||
$("stream-led").title = "No stream from PiKVM";
|
$("stream-led").title = "No stream from One-KVM";
|
||||||
};
|
};
|
||||||
|
|
||||||
var __setControlsEnabled = function(enabled) {
|
var __setControlsEnabled = function(enabled) {
|
||||||
@@ -317,7 +317,7 @@ export function Streamer() {
|
|||||||
if (text.length > 0) {
|
if (text.length > 0) {
|
||||||
title += text;
|
title += text;
|
||||||
} else {
|
} else {
|
||||||
title += "No stream from PiKVM";
|
title += "No stream from One-KVM";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
el_grab.innerText = el_info.innerText = title;
|
el_grab.innerText = el_info.innerText = title;
|
||||||
|
|||||||
@@ -166,7 +166,7 @@ export function MediaStreamer(__setActive, __setInactive, __setInfo, __organizeH
|
|||||||
var __setupCodec = function(formats) {
|
var __setupCodec = function(formats) {
|
||||||
__closeDecoder();
|
__closeDecoder();
|
||||||
if (formats.h264 === undefined) {
|
if (formats.h264 === undefined) {
|
||||||
let msg = "No H.264 stream available on PiKVM";
|
let msg = "No H.264 stream available on One-KVM";
|
||||||
__setInfo(false, false, msg);
|
__setInfo(false, false, msg);
|
||||||
__logInfo(msg);
|
__logInfo(msg);
|
||||||
return;
|
return;
|
||||||
|
|||||||
Reference in New Issue
Block a user