ubuntu18-cursor-remote-ssh-tutorial

Ubuntu 18.04 远程连接 Cursor 教程(GLIBC 2.27 / ARM64)

适用于 Ubuntu 18.04JetPack 4.xJetson NanoGLIBC 2.27 环境,通过 Remote SSH 使用 Cursor。核心问题是 Cursor Server 自带的 Node 需要 GLIBC ≥ 2.28 ,而系统为 2.27


目录

  1. 背景与现象
  2. 方案概述
  3. 远程机操作步骤
  4. [Cursor 连接](#Cursor 连接)
  5. 常见问题
  6. 检查清单
  7. 更稳妥的长期方案

1. 背景与现象

项目 说明
典型系统 Ubuntu 18.04、L4T / JetPack 4.x
GLIBC 多为 2.27
Cursor 行为 ~/.cursor-server 安装服务,自带 linux-arm64Node
冲突 自带 Node 链接 GLIBC_2.28+,在 2.27 上无法运行

常见日志:

text 复制代码
.../node: /lib/aarch64-linux-gnu/libc.so.6: version `GLIBC_2.28' not found (required by .../node)
The bundled NodeJS failed to run, and no system NodeJS executable was found.
Please manually install NodeJS 20 or higher on your remote system

若已安装「系统 Node」但 Cursor 仍报找不到,多半是 SSH 非交互环境未加载 PATH(见第 3.5 节)。


2. 方案概述

不要 通过网上流传的「替换 /lib/.../libc.so.6」等方式升级系统 glibc,极易导致 SSH 不可用或系统损坏

推荐在 不改动系统默认 libc 的前提下:

  1. glibc 2.28 安装到独立前缀(如 /opt/glibc-2.28)。
  2. 安装 官方 Node 20 linux-arm64/usr/local/node20
  3. glibc 2.28 自带的动态加载器 + --library-path 启动 Node(脚本包装)。
  4. 将包装脚本暴露为 node ,并写入 ~/.profile 的 PATH ,保证 ssh user@host "node -v" 可用(与 Cursor 安装脚本一致)。

3. 远程机操作步骤

以下以用户 jetbot 为例,请按实际用户名替换路径。

3.1 并行安装 glibc 2.28

在单独文档或可靠来源指导下,将 glibc 安装到前缀目录 (示例:/opt/glibc-2.28),不要 替换系统默认的 libc.so.6

安装完成后应存在(路径以实际为准):

  • /opt/glibc-2.28/lib/libc-2.28.so
  • /opt/glibc-2.28/lib/ld-linux-aarch64.so.1

3.2 安装 Node 20(官方 linux-arm64)

bash 复制代码
cd /tmp
wget https://nodejs.org/dist/v20.18.0/node-v20.18.0-linux-arm64.tar.xz
tar xf node-v20.18.0-linux-arm64.tar.xz
sudo rm -rf /usr/local/node20
sudo mkdir -p /usr/local/node20
sudo cp -a node-v20.18.0-linux-arm64/* /usr/local/node20/

确认:

bash 复制代码
test -f /usr/local/node20/bin/node && echo OK

版本号可按需调整,须为 Node 20+

3.3 启动脚本(含 libgcc 搜索路径)

创建 ~/node20-glibc-run.sh

bash 复制代码
#!/bin/bash

GLIBC_PATH=/opt/glibc-2.28/lib
SYS_LIB=/usr/lib/aarch64-linux-gnu
NODE_BIN=/usr/local/node20/bin/node

"$GLIBC_PATH/ld-linux-aarch64.so.1" \
  --library-path "$GLIBC_PATH:$SYS_LIB:/lib/aarch64-linux-gnu" \
  "$NODE_BIN" "$@"

说明:

  • /lib/aarch64-linux-gnu :提供 libgcc_s.so.1 。若 --library-path 缺少该目录,可能出现:
    libgcc_s.so.1: cannot open shared object file
  • 若仍缺其它库,使用 find /lib /usr/lib -name 'lib*.so*' 查找后追加到 --library-path(冒号分隔)。
bash 复制代码
chmod +x ~/node20-glibc-run.sh
~/node20-glibc-run.sh -v

期望输出:v20.18.0(或与所装版本一致)。

3.4 用 fake-node 提供 node 命令

bash 复制代码
mkdir -p ~/fake-node
ln -sf ~/node20-glibc-run.sh ~/fake-node/node

确认软链完整:

bash 复制代码
ls -la ~/fake-node/node
readlink -f ~/fake-node/node

3.5 将 PATH 写入 ~/.profile(关键)

仅修改 ~/.bashrc 且文件开头有「非交互即 return」时ssh user@host "node -v" 不会 加载你在后面的 export PATH,Cursor 会报找不到 Node。

~/.profile 靠前位置 (建议在 source ~/.bashrc 相关块之前)增加:

bash 复制代码
export PATH="$HOME/fake-node:$PATH"

若存在 ~/.bash_profile 且不加载 .profile,需在 ~/.bash_profile 中同样加入上述一行,或先 source ~/.profile

登录 shell 自测:

bash 复制代码
hash -r
which node
node -v

期望:which node 指向 ~/fake-node/nodenode -v 为 v20.x。

3.6 从本机验证非交互 SSH(与 Cursor 一致)

Windows 或另一台机器上:

bash 复制代码
ssh jetbot@<板子IP> "which node; node -v"

期望:

text 复制代码
/home/jetbot/fake-node/node
v20.18.0

若此处失败,Cursor 仍可能失败;请先修好 .profile / .bash_profile 再连 Cursor。


4. Cursor 连接

  1. 在 Cursor 中安装并启用 Remote SSH(以当前 Cursor 版本为准)。
  2. 使用 jetbot@192.168.x.x 等形式连接目标主机。
  3. 连接过程中日志大致为:
    • 自带 ~/.cursor-server/.../node 因 GLIBC 失败;
    • 检测到 System node 版本 ≥ 20;
    • 可能将安装目录下的 node 符号链接 到你的 fake-node/node

只要 第 3.6 节 通过,系统 Node 检测通常可通过。


5. 常见问题

5.1 package.json: Unexpected end of JSON input

含义~/.cursor-server 下文件不完整 (下载中断、磁盘满、历史失败残留等)。此时 Node 已能运行,但服务端文件损坏。

处理

bash 复制代码
df -h $HOME
rm -rf ~/.cursor-server

然后在 Cursor 中 重新连接,触发完整重装。

5.2 libgcc_s.so.1: cannot open shared object file

在脚本的 --library-path 中加入 /lib/aarch64-linux-gnu(见第 3.3 节)。

5.3 NODE_BIN 指向的 node 不存在

确认 /usr/local/node20/bin/node 存在,或与 NODE_BIN= 路径一致。

5.4 which node 指向错误脚本或旧路径

检查 PATH 顺序、hash -r,以及 ~/fake-node/node 是否指向正确的 node20-glibc-run.sh


6. 检查清单

  • /opt/glibc-2.28/lib/ld-linux-aarch64.so.1libc-2.28.so 存在
  • /usr/local/node20/bin/node 存在
  • ~/node20-glibc-run.sh -v 输出 v20+
  • ~/fake-node/node~/node20-glibc-run.sh
  • ~/.profile(必要时 ~/.bash_profile)含 export PATH="$HOME/fake-node:$PATH"
  • ssh user@host "which node; node -v"本机测试通过
  • 出现 JSON 解析错误时:检查磁盘空间并 rm -rf ~/.cursor-server
  • 用危险方式替换系统 libc.so.6

7. 更稳妥的长期方案

方案 说明
升级系统 / JetPack 使用 Ubuntu 20.04+ 等自带 GLIBC ≥ 2.28 的镜像,Cursor 一般无需旁路 glibc。
源码编译 Node 20+ 在板子上编译,链接本机 2.27 ,可不依赖 /opt/glibc-2.28,但编译耗时、占资源。

旁路 glibc + 官方预编译 Node 属于 在旧系统上的折中方案,维护成本高于系统升级。


附录:参考命令速查

bash 复制代码
# 系统 glibc 版本
ldd --version | head -1
strings /lib/aarch64-linux-gnu/libc.so.6 | grep '^GLIBC_' | tail -8

# 查找 libgcc
find /lib /usr/lib -name 'libgcc_s.so.1' 2>/dev/null

# 检查 cursor-server 安装大小与 package.json
du -sh ~/.cursor-server 2>/dev/null
wc -c ~/.cursor-server/bin/linux-arm64/*/package.json 2>/dev/null

文档整理自 Ubuntu 18.04 / Jetson Nano + Cursor Remote SSH 实机排查流程。

相关推荐
IvorySQL2 小时前
PG 日报|社区讨论重构 pg_hba 配置文件格式
数据库·人工智能·postgresql·重构·ivorysql
逝水无殇2 小时前
C# 文件的输入与输出详解
开发语言·数据库·后端·c#
罗政4 小时前
PDF 批量合并工具:本地 AI 自动排序、识别正文日期与合同编号
数据库·pdf·php
SelectDB4 小时前
宽表元数据膨胀怎么解?Doris Segment V3 对比 Parquet、Lance
大数据·数据库·数据分析
曹牧4 小时前
Oracle:快速定位最新数据
数据库·oracle
Zhu7585 小时前
在Docker环境部署ApacheGuacamole,对接PG数据库
数据库·docker·容器
Leighteen5 小时前
Redis与MySQL双写一致性:从问题根源到工程落地
数据库·redis·mysql
AI-好学者6 小时前
阶段二-Cypher查询语言详解
数据库·rag·graphrag
龙仔7256 小时前
SQL Server 批量多库只读账号一键脚本(带逐行注释完整脚本 + 分段逐句详细解释)
服务器·数据库·sql·sqlserver·dba