Harmony-Remmina:基于 GTK 的远程桌面客户端项目

Remmina 向 HarmonyOS(OHOS arm64)的移植源码仓库:收录上游 Remmina 源码树(基线 1.4.41)与本平台适配改动,依 GPL-2.0-or-later 释出

分支1Tags0
文件最后提交记录最后更新时间
11 天前
11 天前
11 天前
11 天前
1 个月前
11 天前

Harmony-Remmina

Remmina 向 HarmonyOS(OHOS arm64)的移植源码仓库:收录上游 Remmina 1.4.41 源码树(已就地应用本平台适配改动)与交叉构建脚本,依 GPL-2.0-or-later 释出。

注意:与"pristine 树 + 补丁序列"式仓库不同,本仓 sources/remmina 是移植态源码树——改动直接落在树内并以 PATCH-<n>(AirRemmina) / __OHOS__ 注释标记(见《改动指示》)。树内改动可由 scripts/patch_remmina.py 对上游 v1.4.41 基线幂等重放复现。

来源与许可

项 内容
上游项目 Remmina — The GTK+ Remote Desktop Client(GTK3 远程桌面客户端,RDP/VNC/SSH/SFTP)
上游源码地址 https://gitlab.com/Remmina/Remmina
上游版本 / 基线 1.4.41(树内 CMakeLists.txt 第 39 行 project(Remmina VERSION 1.4.41);CHANGELOG.md 首条 ## v1.4.41,与上游 v1.4.40→v1.4.41 对比链接一致)
上游许可证 GPL-2.0-or-later(树内 LICENSE 为 GPLv2 全文,COPYING 为上游声明件;各源文件版权头标注 "either version 2 of the License, or (at your option) any later version")
本仓库许可 上游源码树(含本平台改动)+ 移植脚本,整体依 GPL-2.0-or-later 释出;改动作为上游衍生作品同许可
上游源码获取渠道 git clone https://gitlab.com/Remmina/Remmina 后检出 tag v1.4.41,或 https://gitlab.com/Remmina/Remmina/-/releases/v1.4.41
上游版权头 树内各源文件的上游版权头/license 头保持原样,未作修改
无担保 依 GPL 条款,本移植以"按原样"发布,不含任何担保(树内 COPYING 亦含上游无担保声明)

移植方式

  • 交叉编译目标:OHOS aarch64(aarch64-linux-ohos,clang 15 / LLVM),工具链文件 cross/ohos-toolchain.cmake(CMake)与 cross/ohos-aarch64.cross(meson)。
  • 构建形态:主程序由上游可执行改造为共享库 libremmina.so(scripts/patch_remmina.py P1),插件(vnc/rdp/exec)保持上游 g_module_open 动态加载模型;产物经 scripts/deploy_stack.sh / scripts/deploy_remmina.sh 做 ELF 归一(NEEDED 去版本号、去除 libc.so 依赖、段对齐修复)。
  • 依赖栈(均为独立上游项目,按各自渠道获取后由 scripts/build_m1_deps.sh 交叉编译):
  • 特性裁剪:configure 期关闭 WWW / Python 插件 / GVNC / X2GO / KF5Wallet / SPICE / Avahi / VTE / NEWS / STATS / TIP / 翻译 / manpages / GCrypt / libsecret(全参数见《交叉构建》)。

仓库结构

Harmony-Remmina/
  README.md LICENSE .gitignore
  sources/remmina/        # 上游 Remmina 1.4.41 移植态源码树(改动就地应用,带 PATCH 标记)
  scripts/                # 交叉构建、依赖构建、部署与 ELF 工具
    env.sh                # 交叉编译环境(工具链/前缀/平台宏)
    patch_remmina.py      # 树内改动的幂等重放器(P1–P7,对 pristine v1.4.41 可重放)
    build_m1_deps.sh      # 新编依赖(libsodium/libssh/libvncserver/curl)
    build_remmina.sh      # Remmina 本体 CMake 交叉构建
    deploy_stack.sh deploy_remmina.sh   # 产物部署与 ELF 归一
    elf_edit.py unpatchelf.py           # ELF 原位编辑工具
  cross/
    ohos-toolchain.cmake  # CMake 交叉工具链文件
    ohos-aarch64.cross    # meson 交叉配置文件

改动指示

依 GPL-2.0 §2 标注改动义务。本树为已应用改动的发布态;可复现统计(在仓库根目录执行):

grep -rl '__OHOS__' sources/remmina | wc -l                       # → 4 个文件含 __OHOS__ 条件编译
grep -rln 'PATCH-[0-9a-z]*(AirRemmina)' sources/remmina | wc -l   # → 7 个文件含 PATCH 标记(共 10 处)

新增文件 1 个:sources/remmina/src/ohos_pthread_shim.c。其余改动全部为既有文件的条件编译/构建目标修改,逐条如下(编号与树内 PATCH-<n>(AirRemmina) 注释、scripts/patch_remmina.py 一致):

# 触及文件 改动内容
P1 src/CMakeLists.txt 主程序目标 add_executable(remmina …) → add_library(remmina SHARED …);移除 -rdynamic(共享库默认导出符号,插件 g_module_open 回查服务函数表需要);install(TARGETS remmina …) 由 ${CMAKE_INSTALL_BINDIR} 改 LIBRARY DESTINATION lib(3 处标记)
P2 src/remmina.c #ifdef __OHOS__ 下入口 main 改名并导出为 remmina_ohos_main(visibility("default"),供宿主集成层 dlsym 调用)
P3 src/remmina.c #ifdef __OHOS__ 下 GDK 后端白名单置为 "ohos"
P4 src/rcw.c #ifndef __OHOS__ 守护 Wayland 多显示器分支宏引用(OHOS 单屏等效直接 return)
P4b src/remmina_pref_dialog.c #ifndef __OHOS__ 守护上游漏守护的 Wayland 宏引用
P5 src/ohos_pthread_shim.c(新增) pthread_cancel / pthread_setcancelstate / pthread_setcanceltype / pthread_testcancel 的 no-op 兜底实现(OHOS musl 运行库不导出该符号族)
P6 src/remmina_exec.c #ifdef __OHOS__ 下快速连接补 sftp:///SFTP:// scheme 分支(上游缺失,落到按文件打开路径报错),user:pass@ 解析条件同步扩展
P7 plugins/rdp/rdp_plugin.c pre_connect 设 FreeRDP_TlsSecLevel = 0:FreeRDP 3.30 默认 112-bit 安全等级在 OpenSSL 3 下剔除 SHA1 族签名,导致 Windows Server 2012 R2 等旧版 SChannel 的 RDP 自签证书 TLS 握手必败;0 = 不限制,恢复旧服务器兼容

补丁正文与树内注释保持移植时原样(含历史工程代号注释),未改写,以保证 scripts/patch_remmina.py 标记串匹配、可继续幂等重放。

功能状态 / 已知限制

  • 本树可构建出:libremmina.so 主体 + remmina-plugin-vnc.so / remmina-plugin-rdp.so(FreeRDP3 模式)/ remmina-plugin-exec.so(M2–M6 里程碑实证:VNC 端到端、RDP 端到端、SFTP 传输)。
  • exec 插件的 g_spawn/外部工具通道在沙箱内受限(编译保留、运行可能失败)。
  • WWW、Python、GVNC、X2GO、SPICE 等插件依裁剪开关不构建;翻译在构建期关闭(中文化由部署侧提供)。
  • 依赖栈(GTK3 OHOS 后端等)不在本仓内,需按《移植方式》所列上游渠道自行交叉编译后配置路径。

交叉构建

以下实参均摘自仓内脚本,未增补外部参数:

source scripts/env.sh
python3 scripts/patch_remmina.py            # 对 pristine v1.4.41 重放 P1–P7(幂等)
bash scripts/build_m1_deps.sh               # libsodium/libssh/libvncserver/curl(cmake/meson + cross 文件)
cmake -S sources/remmina -B <构建树> -G Ninja \
  -DCMAKE_TOOLCHAIN_FILE=cross/ohos-toolchain.cmake \
  -DCMAKE_BUILD_TYPE=Release \
  -DREMMINA_RUNTIME_PLUGINDIR=<设备侧插件目录> \
  -DWITH_FREERDP3=ON -DWITH_CUPS=OFF \
  -DWITH_WWW=OFF -DWITH_PYTHONLIBS=OFF -DWITH_GVNC=OFF -DWITH_X2GO=OFF \
  -DWITH_KF5WALLET=OFF -DWITH_SPICE=OFF -DWITH_AVAHI=OFF \
  -DHAVE_LIBAPPINDICATOR=OFF -DWITH_VTE=OFF -DWITH_GCRYPT=OFF \
  -DWITH_NEWS=OFF -DWITH_STATS=OFF -DWITH_TIP=OFF \
  -DWITH_TRANSLATIONS=OFF -DWITH_MANPAGES=OFF \
  -DWITH_ICON_CACHE=OFF -DWITH_UPDATE_DESKTOP_DB=OFF -DWITH_LIBSECRET=OFF
cmake --build <构建树> && cmake --install <构建树>

(完整流程与设备路径变量见 scripts/build_remmina.sh;工具链文件内 find 根、sysroot 与编译器路径为本移植环境实值,复用前需按自身环境调整。)

相关资源

许可证

组件 许可
sources/remmina(上游源码树,含本平台改动) GPL-2.0-or-later(Remmina 上游全体贡献者著作权)
scripts/ cross/(本平台移植脚本与交叉配置) GPL-2.0-or-later(与上游同许可释出)

各组件著作权归其上游项目/作者所有;本仓改动仅授予 GPL 所要求的同等自由许可,不含任何担保。

项目介绍

Remmina 向 HarmonyOS(OHOS arm64)的移植源码仓库:收录上游 Remmina 源码树(基线 1.4.41)与本平台适配改动,依 GPL-2.0-or-later 释出

定制我的领域