ubuntu18-cursor-remote-ssh-tutorial

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

适用于 Ubuntu 18.04 、JetPack 4.x 、Jetson Nano 等 GLIBC 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-arm64 的 Node
冲突 自带 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/node,node -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.1 与 libc-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 实机排查流程。

相关推荐
CJi0NG5 小时前
【自用】MySQL - 语法:DDL、DML、DQL、DCL
数据库·mysql
姜鱼问生5 小时前
数据库备份 + 灾难恢复演练:从 dump 恢复全库
运维·数据库
ao-weilai6 小时前
MySQL数据库:表约束
数据库·mysql·adb
ly76896 小时前
Redis 分布式锁的边界条件:Redlock 争议、锁续期与客户端崩溃后的互斥失效
数据库·redis·分布式·分布式锁·watchdog·redlock
kaixin_learn_qt_ing6 小时前
qgeoview-samples-basic
数据库
Omics Pro7 小时前
微软:多模态生物世界模型
数据库·人工智能·算法·microsoft·机器学习·自然语言处理
字节渡客7 小时前
接口明明返回成功,数据库偶尔就是没写入
数据库
Ivanqhz7 小时前
KV Cache
服务器·数据库·人工智能·深度学习·算法
Omics Pro7 小时前
~30,000+引用!理论2005,R包2008,多组学集成AI增强
开发语言·数据库·人工智能·算法·机器学习·自然语言处理·r语言
呆萌很8 小时前
数据库逻辑结构设计
数据库