GitHub 提交日报 · 2026-09-28

自动汇总 2026-09-28 当天 hummingg 在 GitHub 上的提交。

hummingg/hummingg-com

Ubuntu 上用 Docker + rclone 部署 alist:夸克网盘 WebDAV 挂载菜鸟教程

这篇教程解决什么问题

想在 Ubuntu 上下载夸克网盘(Quark)的资源,但夸克官方没有 Linux 客户端,网页端下载大文件又慢又容易被限速。这篇教程带你用 alist + rclone(WebDAV) 的方案,把夸克网盘像本地磁盘一样挂载到 /mnt/quark,cp 一条命令就能下载。

适合人群:第一次在 Linux 上折腾网盘挂载、被网络环境卡住下载源的同学。

教程里的部署流程全部在一台 Ubuntu 24.04 实机上验证通过,包括中间踩过的坑。

背景:为什么选 alist

alist 是一个开源的「网盘中转站」:把夸克、阿里云盘、百度网盘等几十种云存储统一挂进来,对外提供 Web 界面 + WebDAV 接口。它的好处:

  • 夸克的下载链接会过期,alist 会自动刷新,你不用管
  • 多个网盘统一成一个界面管理
  • 提供 WebDAV,可以被 rclone / davfs2 等工具挂载成本地目录

踩坑记录(这部分比教程本身更值钱)

坑 1:npm 上的 alist 是「假的」

最开始的思路是从 npm 装(因为当时 GitHub 被墙,只有 npmmirror 能访问):

1
npm install -g alist --registry=https://registry.npmmirror.com

装完发现 which alist 找不到命令。查看包信息才发现,npm 上的 alist@1.0.0 是一个完全无关的旧占位包(依赖里是 core-js 和 opencollective-postinstall,跟 alist 服务端没有半点关系)。结论:npm 这条路走不通,真 alist 只在 Docker Hub / GitHub Releases。

坑 2:GitHub 全家桶被墙

逐一探测后发现这个网络环境下以下地址全部不通:

被墙 ❌ 说明
github.com alist 二进制和源码都在这
所有 ghproxy 代理 ghproxy.net、mirror.ghproxy.com 等全 000
gitee.com 想从 Gitee 镜像拉源码,也不通
goproxy.cn 想本地编译,Go 模块代理也不通

坑 3:Docker Hub 镜像源的「证书错配」

Docker 镜像不来自 GitHub,理论上能绕过。但探测各镜像源时发现更隐蔽的问题:

  • docker.m.daocloud.io(DaoCloud):镜像元数据能取到,但拉 blob 时报错
    x509: certificate is not valid for any names —— 它的 blob 存储主机证书 SAN 里只有 IP,不含主机名
  • hub.uuuadc.top:直接返回空描述符(空字符串的 SHA256),根本没在真正代理 Docker Hub,是死源
  • registry-1.docker.io(Docker Hub 直连):被墙

用 openssl s_client 看证书确认了根因:网络层 TLS 拦截导致返回的证书和主机名对不上,Docker 严格校验必然失败。把镜像主机加进 insecure-registries 也绕不过去——因为 blob 是 S3 地址,不走这个豁免。

破局点:本机有代理(Clash),给 Docker 守护进程也配上代理,直连 Docker Hub。

坑 4:davfs2 列目录报 Invalid argument

WebDAV 挂载最初用 davfs2,能挂上、cat 文件正常,但 ls 一直报:

1
ls: reading directory '/mnt/quark': Invalid argument

用 curl -X PROPFIND 直接请求 alist 发现服务端正确返回了目录列表(207 Multi-Status,子项都在),问题出在 davfs2 端解析。这是 alist WebDAV 和 davfs2 的已知兼容问题。换 rclone 后彻底解决,rclone lsd / rclone mount 列目录完全正常。

正确的部署流程

第 1 步:安装 Docker(走 Ubuntu 官方源,不碰 GitHub)

1
2
3
sudo apt-get update
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y docker.io
docker --version # 验证,输出类似 Docker version 29.1.3

注意装的是 docker.io(Ubuntu 仓库里的包),不是 docker-ce(要走 Docker 官方 apt 源)。前者完全不需要访问 download.docker.com,在被墙环境更稳。

第 2 步:给 Docker 守护进程配代理(关键一步)

Docker 拉镜像的是守护进程,不是你终端里的命令。终端里 export HTTPS_PROXY 对 docker pull 无效,必须给 systemd 服务配:

1
2
3
4
5
6
7
8
9
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo tee /etc/systemd/system/docker.service.d/http-proxy.conf > /dev/null <<'EOF'
[Service]
Environment="HTTP_PROXY=http://127.0.0.1:7892"
Environment="HTTPS_PROXY=http://127.0.0.1:7892"
Environment="NO_PROXY=localhost,127.0.0.1"
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

7892 是本机 Clash 的 HTTP 代理端口,按你自己的代理端口改。NO_PROXY 务必包含 localhost,否则 alist 容器间的本地通信也会被送进代理。

验证代理是否生效:

1
2
3
4
docker info --format 'HTTPProxy={{.HTTPProxy}} HTTPSProxy={{.HTTPSProxy}}'
# 应输出你配置的代理地址

docker pull hello-world # 能拉下来说明 Docker Hub 通了

第 3 步:拉取并启动 alist

1
2
3
4
5
6
7
8
sudo docker pull xhofe/alist:latest

sudo docker run -d \
--name alist \
--restart=always \
-p 5244:5244 \
-v /opt/alist:/opt/alist/data \
xhofe/alist

参数说明:

  • --restart=always:开机 / 崩溃自动重启
  • -p 5244:5244:Web 界面和 WebDAV 都走这个端口
  • -v /opt/alist:/opt/alist/data:数据持久化到宿主机

第 4 步:获取管理员密码

密码只在首次启动的日志里打印一次,之后只存哈希:

1
2
sudo docker logs alist 2>&1 | grep -i password
# Successfully created the admin user and the initial password is: xxxxxxxx

忘了也没关系,可以随时重置:

1
sudo docker exec alist ./alist admin set 你的新密码

浏览器打开 http://localhost:5244,用 admin + 上面拿到的密码登录。

第 5 步:添加存储(API 方式,不用点网页)

在网页「管理 → 存储 → 添加」里操作当然可以,但用 API 更适合脚本化。有个大坑要注意:addition 字段必须是字符串化的 JSON,传对象会报 400:

1
model.Storage.Addition: ReadString: expects " or n, but found {

正确姿势(以添加一个本地目录做测试为例):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 1) 登录拿 token
TOKEN=$(curl -s -X POST http://localhost:5244/api/auth/login \
-H 'Content-Type: application/json' \
-d '{"username":"admin","password":"你的密码"}' \
| python3 -c "import sys,json;print(json.load(sys.stdin)['data']['token'])")

# 2) 添加 Local 存储,挂载路径 /test
# 注意 addition 的值是一个"字符串",里面才是 JSON
BODY=$(python3 -c "
import json
add = {'root_folder_path': '/opt/alist/data/webdav_test', 'show_hidden': True}
print(json.dumps({'mount_path': '/test', 'driver': 'Local',
'addition': json.dumps(add), 'disabled': False}))")

curl -s -X POST http://localhost:5244/api/admin/storage/create \
-H "Authorization: $TOKEN" -H 'Content-Type: application/json' \
-d "$BODY"
# {"code":200,"message":"success","data":{"id":1}}

验证 WebDAV 是否通了:

1
2
3
curl -u admin:你的密码 -X PROPFIND -o /dev/null -w "%{http_code}\n" \
http://localhost:5244/dav/test
# 输出 207 就说明 WebDAV 正常

小知识:/dav 根路径在没有添加任何存储时 PROPFIND 会返回 404,这是正常的;要访问具体存储的路径,如 /dav/test。

第 6 步:用 rclone 挂载(别用 davfs2)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
sudo apt-get install -y rclone fuse3

# 允许 FUSE 挂载对其他用户可见
sudo sed -i 's/^#user_allow_other/user_allow_other/' /etc/fuse.conf

# 生成 rclone 配置(pass 字段必须用 rclone obscure 加密,不能明文)
RP=$(rclone obscure 你的密码)
mkdir -p ~/.config/rclone
cat > ~/.config/rclone/rclone.conf <<EOF
[alist]
type = webdav
url = http://localhost:5244/dav
vendor = other
user = admin
pass = $RP
EOF

先验证列表是否正常(这一步能过,说明之前 davfs2 的问题彻底绕开了):

1
2
rclone lsd alist:      # 列出所有存储,应看到 test
rclone ls alist:test # 列出 test 里的文件

挂载到本地目录:

1
2
3
4
5
6
7
8
9
sudo mkdir -p /mnt/quark
sudo rclone mount alist: /mnt/quark \
--config ~/.config/rclone/rclone.conf \
--allow-other \
--vfs-cache-mode writes \
--daemon

df -h /mnt/quark # 应看到 alist: 文件系统
ls /mnt/quark/test # 能看到 hello.txt,列表正常!

第 7 步:注册 systemd,开机自动挂载

--daemon 方式重启后会丢,做成系统服务:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
sudo tee /etc/systemd/system/rclone-alist.service > /dev/null <<'EOF'
[Unit]
Description=rclone mount alist WebDAV at /mnt/quark
After=network-online.target docker.service
Wants=network-online.target

[Service]
Type=notify
ExecStart=/usr/bin/rclone mount alist: /mnt/quark \
--config /home/你的用户名/.config/rclone/rclone.conf \
--allow-other --vfs-cache-mode writes --poll-interval 30s
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload
sudo systemctl enable --now rclone-alist
systemctl is-active rclone-alist # 输出 active 即成功

注意 --config 要写绝对路径,因为服务以 root 运行,不会去读你家目录下的默认配置。

接入夸克网盘

上面的 Local 存储只是用来验证链路。真正接入夸克:

  1. 浏览器登录 https://pan.quark.cn
  2. F12 → 网络(Network) → 随便点一个请求 → 复制请求头里 Cookie: 的完整字符串
  3. alist 网页 → 管理 → 存储 → 添加 → 驱动选 夸克网盘
  4. 挂载路径填 /quark,粘贴 Cookie,保存

之后文件就出现在 /mnt/quark/quark:

1
2
3
4
ls /mnt/quark/quark                      # 浏览
cp /mnt/quark/quark/某文件 ~/Downloads # 下载
# 或纯命令行:
rclone copy alist:quark/远程路径 ~/Downloads

Cookie 是登录凭证,不要发到公开场合;失效了去网页里重新粘贴即可。

总结

步骤 关键点
装 Docker 用 Ubuntu 源的 docker.io,别用 docker-ce
拉镜像 Docker Hub 被墙时,给守护进程配代理(systemd drop-in)
添加存储 API 的 addition 必须是字符串化 JSON
挂载 选 rclone 不选 davfs2,后者列目录有兼容问题
持久化 rclone mount 写成 systemd 服务,--config 用绝对路径

整个过程最花时间的不是部署本身,而是确认哪个下载源可达。遇到类似问题,建议先用 curl -sI 逐个探测候选源,再用 openssl s_client 看证书是否正常——很多「神秘失败」其实都是网络层的证书错配。

Claude Code 安装菜鸟教程(Ubuntu 24.04 + nvm + 国内镜像源)

Claude Code 安装菜鸟教程(Ubuntu 24.04 + nvm + 国内镜像源)

本文记录在一台 Ubuntu 24.04 LTS 机器上安装 Claude Code(Anthropic 官方的终端 AI 编程工具)的全过程,版本 2.1.280。

写这篇的原因是:安装本身只有一条命令,但这条命令在国内网络环境下几乎必卡,而且装完之后大概率会遇到「明明提示安装成功,claude 命令却找不到」的情况。下面把每一步的命令、原因、预期输出和排查方法都写清楚。

适用环境:Ubuntu 24.04.5 LTS / Node v24.21.0(nvm 安装)/ npm 11.19.0 / Claude Code 2.1.280
适合人群:第一次在 Linux 上装 Claude Code,想知道每条命令在干什么


一、Claude Code 是什么

一句话:跑在终端里的 AI 编程助手。它不像 IDE 插件那样需要打开编辑器,而是直接在命令行里读你的项目、改代码、跑命令、提交 Git。

它的分发方式是一个 npm 包:@anthropic-ai/claude-code。核心是一个 200 多 MB 的原生二进制(不是纯 JS),所以装的时候会按平台拉取对应的二进制包。

前置条件:Node.js 18 及以上。就这么一个要求,没有别的依赖。


二、安装前:检查环境

先确认 Node 和 npm 在位、版本达标:

1
2
node -v    # 预期:v24.21.0(>= 18 即可)
npm -v # 预期:11.19.0

顺便确认系统版本(后面排查会用到):

1
cat /etc/os-release | head -3   # PRETTY_NAME="Ubuntu 24.04.5 LTS"

如果 node -v 报 command not found,说明还没装 Node,先装。推荐用 nvm(可以在多个 Node 版本间切换,且不需要 root 权限):

1
2
3
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
source ~/.bashrc
nvm install --lts

三、关键决策:要不要换镜像源

这是整篇文章最实用的一段。

Claude Code 的官方安装命令是:

1
npm install -g @anthropic-ai/claude-code

在国内网络下直接跑这条,大概率表现为「卡住不动」——终端没有报错,也没有进度,就那么停着,直到超时。

为什么会这样?可以自己测一下两个源的实际响应速度:

1
2
3
4
5
6
7
# 测试官方源
timeout 12 curl -s -o /dev/null -w "耗时:%{time_total}s 状态:%{http_code}\n" \
https://registry.npmjs.org/@anthropic-ai%2fclaude-code

# 测试国内镜像(淘宝 npmmirror)
timeout 12 curl -s -o /dev/null -w "耗时:%{time_total}s 状态:%{http_code}\n" \
https://registry.npmmirror.com/@anthropic-ai%2fclaude-code

本机实测结果:

源 结果
官方源 registry.npmjs.org 超时,12 秒无响应
国内镜像 registry.npmmirror.com 7.1 秒返回 200

所以安装命令要带上镜像参数。推荐用一次性参数(只影响这一条命令,不改动全局配置):

1
2
3
npm install -g @anthropic-ai/claude-code \
--registry=https://registry.npmmirror.com \
--no-audit --no-fund

参数解释:

  • --registry=...:本次安装从指定源下载。
  • --no-audit:跳过安全审计,能省几十秒。
  • --no-fund:不打印赞助信息。

如果你想一劳永逸地换源(之后所有 npm 命令都走镜像):

1
2
3
npm config set registry https://registry.npmmirror.com
# 恢复官方源:
# npm config set registry https://registry.npmjs.org

安装过程约 2 分钟(主要是下载那个 200MB+ 的二进制)。看到 changed 2 packages 就说明成功了。


四、安装后:验证

1
claude --version

预期输出:

1
2.1.280 (Claude Code)

如果这里报 claude: command not found,不要慌,也不要重装,直接跳到第六节的坑 3,那是 PATH 问题,不是安装失败。


五、三个坑(按踩到的概率排序)

坑 1:命令看起来卡死(最常见)

现象:执行安装命令后终端长时间无输出。

原因:npm 在从官方源下载,网络不通就会一直挂着(npm 默认超时较长,期间不打进度)。

解决:按第三节换成国内镜像源。也可以加 --loglevel=http,让它把每次 HTTP 请求打出来,至少有东西在动,方便判断是真的在下载还是已经卡死:

1
2
3
npm install -g @anthropic-ai/claude-code \
--registry=https://registry.npmmirror.com \
--no-audit --no-fund --loglevel=http

坑 2:不要加 sudo

现象:网上有些教程写 sudo npm install -g ...。

为什么不该加:如果你用 nvm 装的 Node,那么 npm 的全局目录在你自己的家目录里,本来就可写,加 sudo 纯属多余,而且会让包文件的属主变成 root,以后更新、卸载都会遇到权限麻烦。

怎么判断自己的全局目录在哪、需不需要 sudo:

1
npm config get prefix
  • 输出形如 /home/你的用户名/.nvm/versions/node/vXX/bin → 用户目录,不要 sudo。
  • 输出形如 /usr/local 或 /usr → 系统目录,才需要考虑 sudo(更推荐改成用 nvm 或配置 npm 的用户级目录)。

想确认目录是否可写,实测一次最准:

1
touch /usr/local/lib/node_modules/.wtest && echo "可写" || echo "不可写"

坑 3:安装成功但 claude 命令找不到(最容易误判)

现象:安装输出显示成功,但执行下面这条没有任何返回:

1
2
which claude       # 空输出
claude --version # bash: claude: command not found

原因:Claude Code 被装到了 nvm 的 Node 版本目录下:

1
~/.nvm/versions/node/v24.21.0/bin/claude

而这个目录是由 nvm 在每次启动交互式 shell 时动态加入 PATH 的。nvm 的加载代码写在 ~/.bashrc 里,而 .bashrc 只在交互式终端中执行。所以在某些非交互场景(脚本、IDE 内置终端、远程执行)里,PATH 里就没有这个目录。

排查三步:

1
2
3
4
5
6
7
8
# 1. 先看 PATH 里有没有 nvm 的目录
echo $PATH

# 2. 用绝对路径直接测试二进制本身(能跑就说明装好了)
~/.nvm/versions/node/v24.21.0/bin/claude --version

# 3. 确认 .bashrc 里有 nvm 的加载代码
grep -n "nvm" ~/.bashrc

第 2 步能输出版本号,就证明程序是好的,只是 PATH 没配。

解决方法(选一个):

最简单——打开一个新的终端窗口再试。新终端会完整加载 .bashrc,nvm 会把 PATH 配好。

如果新终端还是不行,就把路径写死进 .bashrc:

1
2
echo 'export PATH="$HOME/.nvm/versions/node/v24.21.0/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc

注意上面那行里的版本号 v24.21.0 要换成你自己的实际版本(node -v 查)。以后用 nvm 切换 Node 版本,记得同步改这一行。


六、关于安装时的一个警告(可忽略)

npm 11 安装结束时可能会看到:

1
2
npm warn install-scripts 1 package has install scripts not yet covered by allowScripts:
npm warn install-scripts @anthropic-ai/claude-code@2.1.280 (postinstall: node install.cjs)

这是 npm 新版本的安全策略:默认不自动执行包的 postinstall 脚本,需要显式授权。

实际检查下来,二进制和命令链接都已经正确就位了(bin/claude.exe 存在,bin/claude 软链已建),功能不受影响,可以不管。

如果你确实想让它跑一遍那个脚本:

1
npm install -g @anthropic-ai/claude-code --allow-scripts=@anthropic-ai/claude-code

七、首次启动与登录

1
claude

首次运行会引导登录,两种方式二选一:

  1. Anthropic 账号登录(订阅用户):浏览器授权后回终端。
  2. API Key:设置环境变量 ANTHROPIC_API_KEY。

重要:Claude Code 是交互式 TUI 程序,需要真正的终端(TTY)才能运行。在 CI 脚本、或被 timeout/管道包裹的非交互环境里跑会失败或异常退出。


八、常用命令速查

1
2
3
4
5
6
7
8
claude --version                 # 查看版本
claude # 在当前目录启动交互会话
claude -p "解释这个项目结构" # 非交互模式,直接问一个问题并输出结果
claude update # 升级到最新版
npm update -g @anthropic-ai/claude-code # 或用 npm 升级

# 卸载
npm uninstall -g @anthropic-ai/claude-code

九、一句话总结

1
2
3
4
5
6
7
8
# 检查
node -v

# 安装(国内镜像,不加 sudo)
npm install -g @anthropic-ai/claude-code --registry=https://registry.npmmirror.com --no-audit --no-fund

# 验证(新开终端)
claude --version

三个要记住的点:国内必须换源;nvm 用户不要加 sudo;命令找不到先查 PATH,别急着重装。

CodeBuddy CN 在 Ubuntu 24.04 安装实录(deb 包全解析 + 反查安装方式)

CodeBuddy CN 在 Ubuntu 24.04 安装实录(deb 包全解析 + 反查安装方式)

本文记录 CodeBuddy CN(腾讯 AI IDE)在 Ubuntu 24.04 LTS 上的 deb 安装过程。除了安装步骤本身,重点讲两件事:

  1. 这个 deb 包到底往系统里放了什么——从 dpkg -s 元数据一路拆到 Electron 应用的目录布局。
  2. 如何反查一个已装软件当初是怎么装上的——一套通用排查方法,三级递进,最后能精确到当初敲的那条命令。

适用版本:CodeBuddy CN 4.12.0(构建串 4.12.0.37847260-b4c35ed0)/ Ubuntu 24.04 LTS (x86_64)


一、环境说明

  • 系统:Ubuntu 24.04 LTS (Noble Numbat),架构 x86_64 / amd64
  • 目标:CodeBuddy CN —— 腾讯出品的 AI IDE,基于 VS Code 内核的独立桌面版
  • 包名:codebuddy-cn,版本 4.12.0

先确认本机环境:

1
2
3
lsb_release -a                # Ubuntu 24.04 LTS / Release: 24.04 / Codename: noble
uname -m # x86_64
dpkg --print-architecture # amd64

二、先分清:CodeBuddy 和 WorkBuddy 是两个东西

腾讯系名字里带 Buddy 的产品有两个,容易搞混,平台支持完全不同:

产品 定位 Linux 支持
CodeBuddy AI 编程 IDE(写代码、改项目) 有 Linux deb 包,支持 x64 / arm64 / armhf
WorkBuddy 通用职场 AI 智能体工作台 官方安装文档仅列 Windows 10+ / macOS 12+

腾讯云的 WorkBuddy 安装文档(产品文档 1831/134387)通篇只讲 macOS 和 Windows 两个平台的安装方法,没有 Linux 章节。所以在 Ubuntu 上选 CodeBuddy 不是偏好问题,是能不能装的问题。

提醒网上冲浪的同学:搜索 WorkBuddy 是否支持 Linux,会蹦出一批 CSDN / 百度文库文章信誓旦旦说“全面支持 Linux、提供 tar.gz 和 AppImage、兼容麒麟统信”。这些多半是 AI 生成的内容农场稿,不构成安装依据。判断一件事能不能装,请以官方文档为准。

反过来说,CodeBuddy 的 deb 包元数据里明确写着支持三种架构(见第四节 Description 字段),比华为云 CodeArts 的 Linux 桌面版(只有 ARM64,amd64 机器只能绕道 CLI)友好得多。


三、安装步骤

1. 下载 deb 包

从 CodeBuddy 官网(https://www.codebuddy.ai)下载 Linux x64 版本,得到类似这样的文件:

1
CodeBuddy-linux-x64-4.12.0.37847260-b4c35ed0-cn.deb

文件名里的 37847260-b4c35ed0 是构建流水线的提交信息,装完后可以用来核对版本。

2. 安装(推荐用 apt 而不是 dpkg)

1
2
cd ~/Downloads
sudo apt install ./CodeBuddy-linux-x64-4.12.0.37847260-b4c35ed0-cn.deb

为什么用 apt install ./xxx.deb 而不是 dpkg -i xxx.deb?

这是本文最实用的一条建议。dpkg -i 只负责解包,不解决依赖,装完大概率报一堆依赖关系问题,还得再补一句 sudo apt-get install -f -y 收拾残局。而 apt install ./xxx.deb 会:

  • 自动识别这是个本地 deb
  • 自动从软件源补装缺失依赖
  • 一步到位,不留半成品状态

从 Ubuntu 16.04 起 apt 就支持接本地 deb 路径了,别再执着于 dpkg -i。

3. 验证

1
2
dpkg -l | grep codebuddy
# ii codebuddy-cn 4.12.0 amd64 CodeBuddy CN - AI-powered IDE for Linux.

出现 ii 开头即可放行(两个 i 的含义见第七节)。


四、deb 元数据全解析:dpkg -s 输出逐行读

装完别急着开 IDE,先看这个包在 dpkg 数据库里的完整档案:

1
dpkg -s codebuddy-cn

实际输出(本机真实数据,长依赖已折叠):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Package: codebuddy-cn
Status: install ok installed
Priority: optional
Section: devel
Installed-Size: 628152
Maintainer: CodeBuddy Team <codebuddy@tencent.com>
Architecture: amd64
Version: 4.12.0
Depends: ca-certificates, libc6 (>= 2.17), libstdc++6 (>= 5), libasound2 (>= 1.0.17) | libasound2t64,
libatk-bridge2.0-0 (>= 2.5.3) | ..., libgtk-3-0 (>= 3.9.10) | libgtk-4-1, libnss3 (>= 3.26),
libgbm1 (>= 17.1.0~rc2), libdrm2 (>= 2.4.60), libxkbcommon0 (>= 0.5.0), xdg-utils (>= 1.0.2), ...
Pre-Depends: dpkg (>= 1.16.1)
Recommends: libvulkan1
Description: CodeBuddy CN - AI-powered IDE for Linux.
CodeBuddy CN is an AI-powered integrated development environment.
Supports x64, arm64, and armhf architectures.
Homepage: https://www.codebuddy.ai

几个值得看一眼的点:

  • Installed-Size: 628152 —— 单位是 KB,约 613 MB 磁盘占用。IDE 类应用的正常体量。
  • Section: devel —— 归类为开发工具。
  • Maintainer: CodeBuddy Team <codebuddy@tencent.com> —— 腾讯官方打包,不是第三方改包。
  • Depends 里那一长串 libxxx | libxxxt64 —— 这是 Ubuntu 24.04 t64 过渡库的典型写法(libatk1.0-0 与 libatk1.0-0t64 二选一)。看到这种写法说明这个包专门为 24.04+ 适配过,老版本 Ubuntu(22.04 及以前)装它可能在依赖上翻车。
  • 依赖清单里有 libgtk-3-0、libnss3、libgbm1、libasound2 —— Electron / Chromium 应用的标准依赖组合,直接暴露了技术栈。

再看它一共往系统里塞了多少文件:

1
dpkg -L codebuddy-cn | wc -l     # 6392

近 6400 个文件,典型的 Electron 应用体积。


五、文件布局:一个 VS Code 分支版长什么样

看看它往哪儿放了东西:

1
dpkg -L codebuddy-cn | grep -E "\.desktop$|/usr/bin/"

输出:

1
2
3
/usr/bin/buddycn
/usr/share/applications/buddycn.desktop
/usr/share/applications/buddycn-url-handler.desktop

主程序目录在 /usr/share/buddycn(VS Code 系应用的经典布局)。

/usr/bin/buddycn 其实是个软链接:

1
2
file /usr/bin/buddycn
# /usr/bin/buddycn: symbolic link to /usr/share/buddycn/bin/buddycn

这是 Electron 应用的标准做法——真实二进制藏在 /usr/share/buddycn/bin/,对外只用 /usr/bin 里的软链接暴露命令。

再看桌面入口文件,能进一步确认它的血统:

1
cat /usr/share/applications/buddycn.desktop
1
2
3
4
5
6
7
8
9
10
[Desktop Entry]
Name=CodeBuddy CN
Comment=Code Editing. Redefined.
GenericName=Text Editor
Exec=/usr/share/buddycn/bin/buddycn %F
Icon=buddycn
Type=Application
StartupWMClass=CodeBuddy CN
Categories=TextEditor;Development;IDE;
Keywords=vscode;

Keywords=vscode —— 官方自己承认了这是 VS Code 系的分支版(Cursor、Windsurf 都是同一套路数)。

另一个 buddycn-url-handler.desktop 注册了 URL 协议:

1
2
MimeType=x-scheme-handler/codebuddycn;
Exec=/usr/share/buddycn/bin/buddycn --open-url %U

意味着 codebuddycn:// 可以被浏览器或网页唤起(比如网页上一键打开本地项目、OAuth 登录回调)。

另外注意:它的用户配置目录叫 ~/.config/CodeBuddy CN/,而不是 ~/.config/Code/。这条本身就是个判据——配置目录以产品自身命名,说明它是独立 IDE 而不是 VS Code 里的一个插件;若装的是插件,配置会统一落在宿主的 ~/.config/Code/User/ 下面。


六、日常使用与卸载

启动

1
2
3
buddycn                   # 命令行启动
buddycn . # 在当前目录打开项目
buddycn --new-window # 新窗口

或在「应用程序」菜单里搜索 CodeBuddy CN。

卸载

1
2
sudo apt remove codebuddy-cn     # 卸载程序,保留配置
sudo apt purge codebuddy-cn # 连配置一起清

注意 purge 清理的是 /usr/share/buddycn 这类系统级文件;用户配置需要单独删:

1
rm -rf ~/.config/"CodeBuddy CN"     # 目录名有空格,必须加引号

这里有个容易踩的坑:因为配置目录名叫 CodeBuddy CN(带空格),所有 shell 命令里操作它都得加引号或转义,否则会被当成两个参数。


七、进阶:反查任意软件当初是怎么装的

这一节是本文的方法论核心。给你一台别人装好的机器,怎么在不看 history 的情况下还原某个软件的安装方式?三级递进:

第 1 级:dpkg -l —— 是不是包管理器装的

1
2
dpkg -l | grep codebuddy
# ii codebuddy-cn 4.12.0 amd64 CodeBuddy CN - AI-powered IDE for Linux.

只要 dpkg 数据库里有它,就一定是 deb 安装的,可以直接排除以下几种方式:

安装方式 会不会出现在 dpkg -l
deb 包(dpkg / apt) 会
AppImage 绿色版 不会
tar.gz 解压即用 不会
snap / flatpak 不会(各自用 snap list / flatpak list 查)

开头的 ii 两个字母也别放过:第一个是期望状态(i = 期望已安装),第二个是当前状态(i = 已安装且配置完成)。看到 iU、rc 之类的组合,说明装了一半或只残留了配置文件。

第 2 级:apt-cache policy —— 从哪个源来的

1
apt-cache policy codebuddy-cn

输出:

1
2
3
4
5
6
codebuddy-cn:
Installed: 4.12.0
Candidate: 4.12.0
Version table:
*** 4.12.0 100
100 /var/lib/dpkg/status

重点看版本来源:只有 /var/lib/dpkg/status,没有任何仓库地址。

  • 如果你用 sudo add-apt-repository 加了第三方源再 apt install,这里会显示类似 500 https://xxx/ubuntu noble/main amd64 Packages 的条目。
  • 这里只有 status 文件 + 优先级 100,说明它来自一个本地 deb 文件,而不是任何软件源。

补充:/var/lib/dpkg/status 的优先级固定为 100,所有本地 deb 装出来的包都是这个样子,不代表来源是官方仓库。

第 3 级:/var/log/apt/history.log —— 精确到最后那条命令

前两级只能推断“本地 deb 装的”,但**无法区分 dpkg -i 和 apt install ./xxx.deb**——这两者对包管理器而言最终结果几乎一样。

决定性证据在 apt 的操作日志里:

1
grep -i codebuddy /var/log/apt/history.log

真实输出:

1
2
Commandline: apt install ./CodeBuddy-linux-x64-4.12.0.37847260-b4c35ed0-cn.deb
Install: codebuddy-cn:amd64 (4.12.0)

Commandline: 字段一字不差地记下了当初敲的命令,连完整的 deb 文件名、构建串都保留着。

原理:dpkg 作为底层工具,只在 /var/log/dpkg.log 里留下拆包状态流水;而 apt 作为上层管理器,会把每次事务的完整命令行写进 history.log。

1
2
3
4
grep -i codebuddy /var/log/dpkg.log
# 2026-09-22 16:33:38 status unpacked codebuddy-cn:amd64 4.12.0
# 2026-09-22 16:33:38 configure codebuddy-cn:amd64 4.12.0 <none>
# 2026-09-22 16:33:40 status installed codebuddy-cn:amd64 4.12.0

两份日志交叉验证:安装时间 2026-09-22 16:33:38,从解包到 installed 耗时 2 秒,且没有任何依赖修复记录——这也侧面印证了第三节的建议:直接 apt install ./xxx.deb,依赖在装之前就备齐了,干干净净一次过。

一个辅助判据:

1
apt-mark showmanual codebuddy-cn     # codebuddy-cn

有输出说明它是手动安装的,而非被别的包作为依赖带进来的。若这里没输出,则多半是被动装上的。

方法总结

想知道什么 用什么命令 看什么
是否 deb 安装 dpkg -l | grep 名字 有 ii 记录即为 deb
来自仓库还是本地文件 apt-cache policy 名字 只有 status 说明是本地 deb
当初的确切命令 grep 名字 /var/log/apt/history.log Commandline 字段原样记录
安装时间 grep 名字 /var/log/dpkg.log status installed 的时间戳
手动装还是被依赖 apt-mark showmanual 名字 有输出即手动装
文件都装在哪 dpkg -L 名字 目录布局
某个文件属于哪个包 dpkg -S /路径/文件 反查归属包

一个易混淆点:绿色软件(AppImage / tar.gz)在这一套里查不到任何记录。这时改用 which 命令 配合 ls -la 看它落在 /opt、/usr/local 还是 ~/.local/bin,再用 file 判断是 ELF 二进制还是脚本。


八、排错速查表

现象 可能原因 处理方式
dpkg -i 后报依赖关系错误 dpkg 不自动解决依赖 改 sudo apt install ./xxx.deb,或补 sudo apt-get install -f -y
dpkg -l 查不到软件,但明明在用 是 AppImage / tar.gz / snap 装的 换 snap list、flatpak list、which 反查
buddycn: command not found /usr/bin 软链接缺失 重装包,或确认 PATH 含 /usr/bin
依赖里的 libxxxt64 提示不满足 系统版本过老(低于 24.04) 先升级系统,或换旧版 deb
桌面菜单搜不到图标 desktop 文件未被索引 注销重登,或确认该 desktop 文件存在
配置文件路径带空格导致命令报错 目录名为 CodeBuddy CN 加引号:~/.config/"CodeBuddy CN"
卸载后重装,旧配置还在 remove 不清家目录 用 purge + 手动删配置目录
想确认桌面应用还是插件形态 看配置目录名 ~/.config/CodeBuddy CN/ 是独立 IDE;落在 ~/.config/Code/ 才是 VS Code 插件

九、重点回顾

  1. Ubuntu 上选 CodeBuddy(有 Linux deb,支持 x64 / arm64 / armhf),WorkBuddy 官方安装文档只覆盖 Windows / macOS。网上说 WorkBuddy 支持 Linux 的博客基本是 AI 生成稿,别信。
  2. **装本地 deb 用 sudo apt install ./xxx.deb**,不要用 dpkg -i——前者会自动补齐依赖,一步到位。
  3. CodeBuddy CN 是 VS Code 分支版(desktop 文件里 Keywords=vscode 已自证),程序主体在 /usr/share/buddycn,/usr/bin/buddycn 只是软链接,并注册了 codebuddycn:// URL 协议。
  4. 依赖清单里大量的 libxxx | libxxxt64 写法,说明该包针对 Ubuntu 24.04 的 t64 库过渡做过适配,老系统可能不兼容。
  5. 反查安装方式三板斧:dpkg -l(是不是 deb)→ apt-cache policy(仓库还是本地文件)→ /var/log/apt/history.log(精确到当初那条命令,Commandline 字段原样留痕)。
  6. 配置目录是 ~/.config/CodeBuddy CN/,目录名带空格,写脚本时别忘了加引号。

中文输入法菜鸟教程(Ubuntu + fcitx5 + Rime)

适合人群:第一次在 Linux 上用中文输入法、看到一堆英文术语就头大的纯新手。
目标:装好之后能打字、不踩坑、知道出问题去哪查。


零、安装过程(一步步照做)

下面每一步都给具体命令和配置,复制粘贴即可。环境示例:Ubuntu 24.04 + 已带 fcitx5 框架(x86_64)。

第 0 步:确认 / 安装 fcitx5 框架

1
2
3
4
5
# 确认是否已有 fcitx5(有输出即已装)
command -v fcitx5
# 若没有,先装框架和图形设置面板
sudo apt update
sudo apt install -y fcitx5 fcitx5-configtool

第 1 步:安装 Rime 引擎 + fcitx5 前端

1
2
sudo apt update
sudo apt install -y fcitx5-rime

装完自动带上朙月拼音(简体)、地球拼音、仓颉等词库。

第 2 步:把 Rime 加进输入法列表

编辑(没有就新建)~/.config/fcitx5/profile,内容如下。关键是 DefaultIM=rime 和末尾的 Items/1 那一项:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[Groups/0]
Name=Default
Default Layout=us
DefaultIM=rime

[Groups/0/Items/0]
Name=keyboard-us
Layout=

[Groups/0/Items/1]
Name=rime
Layout=

[GroupOrder]
0=Default

第 3 步:设 fcitx5 为系统默认输入法框架

1
im-config -n fcitx5

(也可在「系统设置 → 区域与语言 → 管理已安装的语言 → 键盘输入法系统」里选 fcitx5。)

第 4 步:设置输入法环境变量(让 GUI 应用连上 fcitx5)

写入 ~/.xprofile:

1
2
3
4
5
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS=@im=fcitx5
export SDL_IM_MODULE=fcitx
export GLFW_IM_MODULE=ibus

同样内容建议再写一份进 /etc/environment 做全局兜底(注意该文件里变量不加 export)。

第 5 步:开机自启 fcitx5

创建 ~/.config/autostart/fcitx5.desktop:

1
2
3
4
5
6
[Desktop Entry]
Type=Application
Name=Fcitx 5
Comment=Start fcitx5 on login
Exec=fcitx5 -d
X-GNOME-Autostart-Enabled=true

多数桌面装好 fcitx5 已自带系统级自启项,这步是双保险。

第 6 步:重新登录(最关键的一步!)

保存工作,注销(Log Out)并重新登录。原因:已打开的窗口持有旧的 ibus 变量改不了,只有重登才能让所有应用带上新的 fcitx 变量连上输入法。

若暂时不想注销:可手动启动并触发 Rime 首次部署——终端跑 fcitx5 -d 后再 fcitx5-remote -r。但注意,已打开的窗口仍要关掉重开才能用上中文,最省事还是重登一次。

第 7 步:默认简体(可选但推荐)

新建 ~/.local/share/fcitx5/rime/luna_pinyin.custom.yaml:

1
2
3
4
5
patch:
switches:
- name: simplification
states: ["漢字", "汉字"]
reset: 1

然后重新部署:状态栏右键 →「重新部署」,或终端跑 fcitx5-remote -r。

第 8 步:验证

1
fcitx5-remote -n   # 应显示 rime

登录后按 Ctrl + 空格 切到 Rime,输入 nihao 能出「你好」即大功告成。


一、先认识三个名字(别被吓到)

你这套环境里有三个角色,记住它们的关系就够了:

名字 是什么 打个比方
fcitx5 输入法”框架”,管切换、状态栏 像一个”插座”
Rime(中州韵) 输入法”引擎”,真正把拼音变汉字 插在插座上的”电器”
朙月拼音 Rime 里的一个”方案”(词库+规则) 电器的一个”档位”

一句话:fcitx5 是管家,Rime 是干活的老实人,朙月拼音是它默认用的那本字典。

为什么没装搜狗?搜狗 Linux 版依赖老框架 fcitx4,在 Ubuntu 24.04(默认 fcitx5)上硬装容易出候选框不跟随等毛病。Rime 开源、稳定、隐私好,长期用更省心。


二、最常用:怎么打出中文

记住两个快捷键,够你用一辈子:

  • **Ctrl + 空格**:在「英文」和「中文(Rime)」之间切换。
    • 看屏幕右上角状态栏:显示「中」就是中文模式,显示「EN」或「A」就是英文。
  • Shift(在中文模式下):临时切中/英文。比如中文打着突然要输个英文单词,按一下 Shift 切过去,再按一下切回来,不用退出中文状态。

打字方式就是普通拼音:输入 nihao → 候选里选「你好」。

翻页选词:空格 选第一个候选,数字键 1~9 选对应候选,- / 或 , . 翻页(不同版本略有差别)。


三、为什么我打出来是繁体?(新手最常踩的坑)

Rime 默认方案「朙月拼音」同时带了简体和繁体,某些情况下会默认出繁体。

一键切回简体:

  1. 在中文输入状态下,按 **F4**(有的版本是 ` 反引号),弹出方案菜单。
  2. 选 「汉字字符集 → 简化字」。

或者让 Rime 永久默认简体(推荐):

  • 编辑文件 ~/.local/share/fcitx5/rime/luna_pinyin.custom.yaml(没有就新建),写入:
1
2
3
4
5
patch:
switches:
- name: simplification
states: ["漢字", "汉字"]
reset: 1
  • 保存后,在输入法状态栏右键 → 「重新部署」(或终端跑 fcitx5-remote -r)。

四、F4 菜单还能干啥

在中文状态下按 **F4**,可以切换:

  • 方案(如果装了多个,比如双拼、五笔)
  • 简体 / 繁体
  • 全角 / 半角符号
  • 中文 / 英文标点(打逗号句号是中文的还是英文的)

常用就好,不用全记。


五、两个常被问的概念

1. 双拼是什么

普通全拼「中国」要敲 zhongguo(8 键)。双拼把每个字压成 2 键:第 1 键声母、第 2 键韵母。
比如小鹤双拼:中→vs,国→go。每个字最多两键,打字更省事,代价是要背一张”韵母→按键”的小表(声母跟全拼一样)。

Rime 装双拼(可选):

1
sudo apt install rime-data-double-pinyin

装完 F4 里就能切到双拼方案,全拼双拼可随时切换。

2. 云词库是什么

本地词库离线、隐私好,但新词/长句打不出。云词库把拼音发到云端补全新词。

  • Rime 默认纯本地、不上传任何内容,隐私强,但新词得靠自己慢慢”造”(它会记住你打过的词)。
  • 想用云词库,可额外装 fcitx5 自带拼音 + 云拼音插件,F4 切换使用。

六、日常维护三板斧

现象 怎么办
状态栏不见了 / 打不了中文 终端跑 fcitx5 -r 重启输入法
新词打不出 多打几次让它记住;或导入词库文件
换电脑想同步词库 Rime 用户目录 ~/.local/share/fcitx5/rime/ 可打包带走,配合同步配置跨平台
调整快捷键 / 增删输入法 跑 fcitx5-configtool 打开图形设置面板

七、第一次设置 checklist

照着做一遍,基本不会再出问题:

  • 系统设置 → 区域与语言 → 键盘输入法系统 选 fcitx5
  • 注销并重新登录一次(让环境变量生效)
  • 登录后 Ctrl + 空格 切到 Rime,能打出简体中文
  • 按 F4 确认选了「简化字」
  • 记住:Ctrl+空格 切中英文,Shift 临时切,打不出就 fcitx5 -r

八、一句话总结

fcitx5 是管家,Rime 是引擎,朙月拼音是默认字典。Ctrl+空格 开中文,F4 换方案/切简繁,fcitx5 -r 治百病。

CodeArts 代码智能体在 Ubuntu (x86_64) 安装与避坑教程(CLI 版)

CodeArts 代码智能体在 Ubuntu (x86_64) 安装与避坑教程(CLI 版)

本教程记录在 x86_64 / amd64 的 Ubuntu 上安装华为云「码道 CodeArts 代码智能体」的过程,重点是绕开官网只提供 ARM64 桌面版的坑,改用官方 CLI 安装脚本(自带 x64 构建),并解释运行后那条「请使用现代终端」提示到底是怎么回事。

适用版本:CodeArts CLI 26.9.3(安装脚本自动拉取最新 x64 构建)/ Ubuntu 24.04 LTS (x86_64)


一、环境说明

  • 系统:Ubuntu 24.04 LTS,架构 x86_64 / amd64
  • 目标:华为云 CodeArts 代码智能体(AI 编码助手)
  • 结论先行:官网下载页的 IDE 桌面版只有 ARM64,在 amd64 机器上装不了;但 CLI / TUI 版有 x64 构建,用官方安装脚本即可正常安装使用。

二、背景坑:官网 deb 为什么装不上

从华为云下载页(codearts.huaweicloud.com/download.html)拿到的 Linux 安装包是:

1
codearts-agent-linux-arm64-26.9.102-b8b3886.deb

它是 ARM64 架构的 IDE 图形客户端。在 amd64 机器上:

1
2
3
4
uname -m                       # x86_64
dpkg --print-architecture # amd64
dpkg-deb -I codearts-agent-linux-arm64-*.deb | grep Architecture
# Architecture: arm64

架构不匹配,强行 dpkg --force-architecture 装进去,二进制也无法在 amd64 上运行。实测华为云 OBS 上也没有对应的 x64 IDE 包(arm64 链接返回 200,x64 链接返回 403)。

所以:amd64 用户不要死磕那个 .deb,直接走下面的 CLI 方案。


三、正确方案:官方 CLI 安装脚本(自动识别 x64)

CodeArts 提供了一套独立的 CLI/TUI 安装脚本,它会自动探测本机架构并下载对应构建。在 amd64 上它会拉到 x64 包。

1
2
sh -c "$(curl -L https://cnnorth4-cloudide-marketplace.obs.cn-north-4.myhuaweicloud.com/codearts/cli_tui/install_script/install.sh)" \
&& export PATH=~/.codeartsdoer/installers:$PATH

安装过程中的关键日志(amd64 机器上):

1
2
3
4
5
6
7
[INFO] Detected platform: x64
[INFO] Matched Download URL: .../codearts-install-26.9.3-linux-x64.tar.gz
[INFO] Downloading codearts (x64)...
[SUCCESS] Executable 'agentkernel' installed to /home/你/.codeartsdoer/installers/bin/codearts
[SUCCESS] Startup script 'codearts' installed to /home/你/.codeartsdoer/installers/codearts
[INFO] Adding /home/你/.codeartsdoer/installers to PATH in /home/你/.bashrc
[SUCCESS] codearts is now available! Version: 26.9.3

注意它检测到的是 **x64**,下载的是 **linux-x64.tar.gz**,所以能正常在 amd64 上跑。


四、验证安装

1
2
3
4
5
6
7
8
9
10
11
12
export PATH=~/.codeartsdoer/installers:$PATH

which codearts
# /home/你/.codeartsdoer/installers/codearts

codearts --version
# 26.9.3

file ~/.codeartsdoer/installers/bin/codearts
# ELF 64-bit LSB executable, x86-64, ...(确认是真正的 amd64 二进制)

codearts --help # 列出全部子命令(见第七节)

安装位置:~/.codeartsdoer/installers/(启动脚本 codearts + 可执行文件 bin/codearts)。PATH 已自动写入 ~/.bashrc,新开终端即可直接用 codearts。


五、关于「请使用现代终端」提示(重点坑)

首次启动 TUI 时,你大概率会看到这样一段提示,并且界面会停顿约 1 秒:

1
2
3
▲  [兼容性提示] TUI 界面需要 True Color 颜色支持。
▲ 若您的终端不兼容,可能会出现颜色失真、乱码或布局错位。
▲ 建议换用现代终端以获得完整体验:GNOME, WezTerm, Alacritty, Ghostty, Kitty

常见误解

  • 「Ubuntu 自带的不是现代终端?」 —— Ubuntu 默认的 GNOME Terminal 支持 true color(24 位真彩),本身就是现代终端。这条提示和「用的是哪个 App」无关。
  • 「设 export COLORTERM=truecolor 能去掉它吗?」 —— 不能。我反编译安装后的二进制确认过:这段提示是 TUI 模式下无条件打印的固定横幅(代码逻辑:非鸿蒙系统、且未带位置参数进 TUI 时,直接 kn.warn(...) 并 setTimeout(1000)),并不做真实的终端能力探测。无论你用多现代的终端、怎么设 COLORTERM,纯 codearts 启动都会看到它。
  • 它只影响配色提示,不影响任何功能;TUI 照常工作。

怎么避开这条提示

提示只在「纯 codearts 进入 TUI」时出现。以下调用方式走的是「非 TUI 模式」分支,不会打印它:

1
2
3
4
codearts models              # 列出可用模型(不带参数也行)
codearts run "帮我看下这段代码" # 带消息直接运行
codearts serve # 启动无界面(headless)服务,再用 attach 连
codearts <项目路径> # 带位置参数也会跳过该提示

如果你想用完整交互式 TUI,那就接受它每次出现 1 秒——这是设计如此,无害。

小建议:仍可在 ~/.bashrc 保留 export COLORTERM=truecolor,它能让 TUI 实际用 24-bit 真彩渲染,颜色更准(只是不会消除上面那条横幅)。


六、首次使用

  1. 在终端运行 codearts(或带子命令,见第五节避开提示)。
  2. 按提示完成登录授权(浏览器 OAuth 或设备码流程)。
  3. 登录后即可在 TUI 里选模型、开项目、对话编码。

七、常用命令速查

1
2
3
4
5
6
7
8
9
10
11
12
13
14
codearts                       # 启动交互式 TUI(会显示兼容性横幅)
codearts [project] # 在指定项目路径启动 TUI
codearts run [message..] # 带一条消息直接运行
codearts models [provider] # 列出可用模型
codearts serve # 启动无界面服务(可 attach 连接)
codearts acp # 启动 ACP (Agent Client Protocol) 服务
codearts mcp # 管理 MCP 服务器
codearts session # 管理会话
codearts agent # 管理 agents
codearts attach <url> # 连接到运行中的 codearts 服务
codearts stats # 查看 token 用量与花费
codearts upgrade # 升级到最新版
codearts uninstall # 卸载并清理相关文件
codearts debug # 调试与排错工具

八、排错速查表

现象 可能原因 处理方式
dpkg -i 装 .deb 后程序无法启动 拿到的是 ARM64 IDE 包,机器是 amd64 改用第三节的 CLI 安装脚本(x64)
下载 x64 deb 返回 403 华为云未发布 x64 IDE 包 同上,走 CLI 方案
启动 TUI 显示「请使用现代终端」 TUI 固定横幅,非能力检测失败 无视即可;或改用 codearts models 等子命令避开
运行 codearts 提示 command not found PATH 未生效 source ~/.bashrc 或重开终端
TUI 颜色发暗/错位 终端未声明 true color ~/.bashrc 加 export COLORTERM=truecolor 后用现代终端
想完全无界面运行 默认进 TUI codearts serve 起 headless 服务再 attach

九、重点回顾

  1. 华为云 CodeArts IDE 桌面版目前只有 ARM64,amd64 机器装不了,别在 .deb 上耗时间。
  2. CLI/TUI 版有 x64 构建,用官方安装脚本 sh -c "$(curl -L .../install.sh)" 会自动识别 x64 并安装,装完即 codearts --version 可用。
  3. 启动 TUI 的「请使用现代终端」是固定横幅、无法关闭、无害;想避开就用子命令(codearts models / codearts run "..." / codearts serve)。
  4. Ubuntu 自带 GNOME Terminal 就是现代终端,支持 true color,不必换终端。

ToDesk 在 Ubuntu 24.04 安装与配置教程(含无人值守访问)

ToDesk 在 Ubuntu 24.04 安装与配置教程(含无人值守访问)

本教程记录在 Ubuntu 24.04 LTS (x86_64) 上安装 ToDesk 远程控制软件,并解决「卡住 / 没有桌面环境 / 需要安装 X11」等常见问题,最后配置开机自动登录的无人值守访问。

适用版本:ToDesk Linux v4.8.6.2 / Ubuntu 24.04 LTS


一、环境说明

  • 系统:Ubuntu 24.04 LTS (Noble Numbat),x86_64
  • 桌面:默认 GNOME(官网下载页只提供 uos / kylin / nfschina 版 deb,标准 Ubuntu 包需从直链下载)
  • 目标:ToDesk Linux v4.8.6.2

二、下载与安装

官网下载页只列出 Windows / macOS / iOS / Android;Linux 页(todesk.com/linux.html)给出的 deb 是 uos / kylin / nfschina 版。Ubuntu 用的标准包名是 todesk-v4.8.6.2-amd64.deb,但官网直链会被反爬验证页拦截,需带浏览器标识(User-Agent + Referer)下载:

1
2
3
4
5
6
7
8
cd /tmp
UA="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0 Safari/537.36"
curl -fSL -A "$UA" -e "https://www.todesk.com/linux.html" -o todesk.deb \
https://dl.todesk.com/linux/todesk-v4.8.6.2-amd64.deb
file todesk.deb # 确认是 "Debian binary package"(约 106M)
sudo dpkg -i todesk.deb
sudo apt-get install -f -y # 自动修复依赖
rm -f todesk.deb

验证安装:

1
2
dpkg -l | grep todesk                       # 应看到  ii  todesk  4.8.6.2
systemctl status todeskd.service --no-pager | head -n 3 # active (running), enabled

启动客户端(图形界面):

1
todesk

或在「应用程序」菜单搜索 ToDesk。启动后界面会显示本机设备代码与临时密码。


三、关键问题:Wayland / Unity 会话导致无法远程

症状

  • 连上后画面卡住 / 黑屏,对方收不到画面
  • 提示「没有桌面环境或显示器,无法远程」
  • 提示「需要自行安装 X11 桌面环境」

根因

Ubuntu 24.04 默认是 Wayland 会话;若登录的是 Unity(或其它 ToDesk 不支持的桌面),ToDesk 无法在该环境下捕获并推流屏幕,日志会出现:

1
2
[zrtc] Publish error. stream label:desktop-stream
session send 0 frame

重要:出现上述提示不代表真的缺少 X11。xserver-xorg 通常早已装好(/usr/bin/Xorg 存在),问题是「当前会话类型」不是 ToDesk 支持的 X11 桌面,而非系统没装 X。

解法:切到标准 GNOME on Xorg 会话

1) 关闭 GDM 的 Wayland(改为默认 X11):

1
sudo sed -i 's/^#\?WaylandEnable=false/WaylandEnable=false/' /etc/gdm3/custom.conf

2) 将用户默认会话锁定为 ubuntu-xorg(纯 X11 GNOME):

1
2
3
sudo sed -i 's/^Session=.*/Session=ubuntu-xorg/' /var/lib/AccountsService/users/$USER
# 确认:
grep Session /var/lib/AccountsService/users/$USER # 应显示 Session=ubuntu-xorg

3) 注销并重新登录(或登录界面齿轮选「Ubuntu on Xorg」)。

重登后确认会话类型:

1
2
echo $XDG_SESSION_TYPE     # 应为 x11
echo $XDG_CURRENT_DESKTOP # 应为 ubuntu:GNOME

四、配置无人值守访问(对方免确认直连)

1. 设置本机安全密码(必须在 GUI 操作)

ToDesk 的本机密码是加密存储的,无法用命令行写入。请在客户端操作:

  1. 打开 ToDesk
  2. 右上角菜单 / 「设置」齿轮 → 安全设置
  3. 勾选「设置本机密码」(即无人值守访问),输入一组固定密码并保存

设置后,对方用这组固定密码即可随时连入,不需你每次发临时码或手动确认。

可选:连接后自动锁屏(controlledautolock=1)默认已开启,较安全。

2. 开机自动登录(重启后也能被控)

编辑 GDM 配置,让机器重启后自动进入桌面:

1
sudo grep -q '^AutomaticLogin=' /etc/gdm3/custom.conf || sudo sed -i '/^\[daemon\]/a AutomaticLoginEnable=true\nAutomaticLogin='$USER /etc/gdm3/custom.conf

确认 [daemon] 段含有:

1
2
AutomaticLoginEnable=true
AutomaticLogin=你的用户名

配置需重启生效:

1
sudo reboot

重启后机器自动登录 X11 桌面,ToDesk 随系统自启,对方即可无人值守连入。

安全提示:开启自动登录后,任何能物理接触这台机器的人可免密码进桌面;但远程连接仍须你的本机安全密码,整体仍安全。


五、验证

  1. 重启后确认会话:
    1
    echo $XDG_SESSION_TYPE     # x11
  2. 对方用你的设备代码 + 你设的本机安全密码连入,应能正常看到并操作桌面。
  3. 服务状态:
    1
    systemctl is-enabled todeskd.service   # enabled

六、常用运维指令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
todesk                                    # 启动客户端
sudo systemctl status todeskd.service # 查看服务状态
sudo systemctl restart todeskd.service # 重启服务

# 重新初始化(覆盖安装后密码变更 / 异常时)
sudo systemctl stop todeskd.service
sudo mv /opt/todesk/config/config.ini /opt/todesk/config/config.ini.bak
sudo systemctl start todeskd.service

# 查看日志(日志文件名带随机串,用通配匹配当天日期)
tail -f /var/log/todesk/service*_$(date +%Y_%m_%d).log
tail -f ~/.local/share/todesk/Logs/client*_$(date +%Y_%m_%d).log
# 或只跟最新的一个:
tail -f "$(ls -t /var/log/todesk/service*_$(date +%Y_%m_%d).log 2>/dev/null | head -1)"

# 卸载
sudo dpkg -r todesk

七、排错速查表

现象 可能原因 处理方式
连上黑屏 / 卡住 Wayland 下推流失败 切 X11 会话(第三节)
提示「没有桌面环境」 当前为 Unity / Wayland 会话 改默认 ubuntu-xorg 并重登
提示「需要安装 X11」 同上,非真缺 X11 切标准 GNOME on Xorg 会话
需每次发临时码 未设本机密码 安全设置里设本机密码
重启后连不上 停在登录界面 开启自动登录(第四节)
连上但无操作响应 被控端处于锁屏 确认自动登录已生效或解锁

八、重点回顾

  1. Ubuntu 24.04 直链下载 ToDesk deb 需带浏览器标识,否则拿到反爬验证页。
  2. ToDesk 在 Wayland / Unity 会话下无法推流,必须用 **GNOME on Xorg (X11)**。
  3. 「需要安装 X11」通常是会话问题,不是真的缺 Xorg。
  4. 无人值守 = 设本机安全密码(GUI)+ 开机自动登录(GDM)。

GitHub 提交日报 · 2026-09-19

自动汇总 2026-09-19 当天 hummingg 在 GitHub 上的提交。

hummingg/hummingg-com

  • fix(seo): 总索引排除 dingtouji,修复 GSC sitemap 跨域报错
    • dingtouji.hummingg.com 线上 sitemap 由独立 CF Pages 项目生成,含跨主域 URL
    • https://dingtouji.com/ → Google 报 URL not allowed(2026-09-19 实测)
    • sites.mjs 给 dingtouji 加 pending:true(gen.mjs 已有机制:pending 不进总索引)
    • 总索引 14 → 13 个子 sitemap;runbook 标注不提交该站并说明如何撤销
    • 各站 sitemap lastmod 刷新至 2026-09-19

GitHub 提交日报 · 2026-09-16

自动汇总 2026-09-16 当天 hummingg 在 GitHub 上的提交。

hummingg/hummingg-com

  • chore(seo): Step 0 — 全站注入 home 回流 footer + 刷新 sitemap
    • 13 个子站(home 除外)全部 HTML 页底部加「更多作品 → home.hummingg.com」回流链接
    • node seo/gen.mjs 重生成全部 robots.txt + sitemap.xml(总 index 14 子 sitemap)
    • 新增 seo/STEP0-RUNBOOK.md,更新 seo/GROWTH.md Step 0 勾选
    • CF Web Analytics / 百度 / 必应站长提交需在后台按 runbook 操作

GitHub 提交日报 · 2026-09-15

自动汇总 2026-09-15 当天 hummingg 在 GitHub 上的提交。

hummingg-agent/hummingg-agent.github.io

hummingg/hummingg-com

  • index-books: 两本书稿全量入库(纳指100 14章 / 标普500 15章)+ 校对报告与复算脚本
    • 校对报告 2026-09-15:A 级确证错误 10 项、复算脚本固化(recount_indexes.py / recount_shiller.py)
    • data/ 含席勒 ie_data.xls、5 份日频 CSV、3 份统计附录(4.9M 纯文本/表格)
    • 不参与 CI 部署(paths-filter 无此条目)
  • chore: 删除 www/(hummingg-blog 的旧镜像),README 与实际部署源对齐
    • www/ 是 ~/Projects/hummingg-blog 的子集镜像:93 篇文章 blog 全部包含且多 8 篇,_config.yml 完全一致,无独有文件
    • 真正的部署源是 hummingg-blog 仓库(push → Actions: hexo generate → rsync 到阿里云 openresty),本仓库不参与部署
    • seo/sites.mjs: www 标记 external,gen.mjs 不再往本仓库写 www 文件(默认改为读 hummingg-blog 的 _posts)
    • www 的 robots/sitemap(103 条 URL)已在 hummingg-blog 上线,总 index 仍为 14 条不变
    • 需要恢复:git checkout <本 commit 之前> – www
  • chore(workspace): 对齐 compatibility_date 到 2025-11-11(与 awsl/models 一致),触发部署验证 hono 修复
  • seo: xiaozhi 补 robots.txt/sitemap.xml,home 总 index 并入 www
  • seo: www 并入总 index,gen.mjs 支持外部 Hexo 目录
    • www 的真正部署源是 ~/Projects/hummingg-blog(Actions: hexo generate → rsync 到阿里云 openresty),
    • 本仓库 www/ 只是镜像。robots/sitemap 已在那边上线(103 条 URL),故去掉 pending 并入总 index(现 14 条)
    • gen.mjs 新增 –hexo 模式:给任意 Hexo 仓库生成 source/robots.txt + source/sitemap.xml
  • fix(ci): xiaozhi 与 408/game 部署 job 补 npm ci,排掉 hono 同款雷
    • 两个 job 的 src/index.ts 都 import hono(dependencies),此前 CI 无
    • node_modules,触发即报 Could not resolve “hono”(同 awsl/models/workspace)
    • xiaozhi 该 job 从未真正跑过(9-14 那次被 paths-filter skip),属潜伏雷;
    • 本次 xiaozhi/public 新增 SEO 文件将首次触发,正好验证修复
    • 408/game 同结构照修(本次无该目录改动,不会触发,但下次改动即安全)
    • .gitignore 新增 .claude/:编辑器/agent 本地权限白名单不入库,
    • 顺带避免 zhuangqiupai/** 改动触发 web+api 两个 job 空跑
  • fix(ci): 给 awsl/models/workspace 部署前加 npm ci,修复 hono 解析失败
    • 三个纯 wrangler 部署 job 之前直接 npx wrangler deploy,未安装
    • 依赖,CI 环境缺 node_modules 导致 src/index.ts 里 import { Hono }
    • from ‘hono’ 解析失败。现在 deploy 前先 npm ci(带 npm 缓存)。
    • 同时提交 awsl/models 的最新内容改动。
  • seo: 为 13 个子域名补 robots.txt + sitemap.xml,修 home 软 404,建统一 sitemap index
    • 新增 seo/:sites.mjs(站点 SSOT)+ gen.mjs(生成器)+ deploy-all.sh + SUBMIT.md
    • home: 去掉 catch-all Worker(它把 404 兜底成 200 空 HTML,导致 /robots.txt 返回空),改 assets-only,404 正确返回
    • home.hummingg.com/sitemap.xml 作为总 index,聚合 13 个子站 sitemap(www 因在阿里云需人工上传,标记 pending 暂不纳入)
    • agents: Worker 内新增 /robots.txt /sitemap.xml 动态路由,随 content/agents/*.md 自动更新
    • 408/math/awsl/workspace/travel-guide/workday/snooker/zhuangqiupai/xiaozhi: 补 robots + sitemap(travel-guide 含 7 个城市攻略页,408 含 7 个讲义页)
    • 修 dingtouji:robots/sitemap 原指向他人域名 dingtouji.com,已通过 Pages 源仓库补回 hummingg 子域
    • 修 CI:snooker/zhuangqiupai 的 wrangler deploy 显式 –config,避免向上误用仓库根配置