疑难杂症

主机每次重启或者ssh服务重启ssh-ed25519都会改变

现象: 原因分析: (感觉当前现象还是很奇怪,不太对劲,不过暂时不想找问题了) client的ssh登录有缓存,之前成功登录的方式,本机缓存还在就还能继续登录。(eg:远程机faceunity当前设置passwordauthentication yes,fu10使用密码成功登录,faceunity再设置passwordauthentication no,并彻底重启sshd服务,fu10在未重启的情况下仍旧可以通过密码登录,而其他机器不行了,这个是当前现象)。然后我本机登陆不上的原因就是我刚才重启本机了,而且之前faceunity机器的sshd有更新过,配置文件发生了变换。所以我本机登录不了了。

解决办法: 没找到具体问题,初步看可能是ssh更新了,配置文件/etc/ssh/sshd_config被改掉了,重新开启PubkeyAuthentication并且关闭密码登录,然后重启即可,因为ssh配置生效似乎需要所有ssh断开之后。

最终问题找到了: 服务器的sshd配置出问题了

# 首先检查/etc/ssh下ssh主机密钥是否正确
ls -l /etc/ssh/ssh_host_*
# 如果权限不正确,需要修改
sudo chmod 600 /etc/ssh/ssh_host_*
# 权限配置完之后,查看ssh配置文件中密钥配置是否正确

# /etc/ssh/sshd_config 中下述的配置需要存在,且不能被注释掉。
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key

另外老是连不上的问题是 IP冲突了!!!!!

僵尸进程清理

下述方式还是杀不掉的话,直接重启吧。

# 列出所有僵尸进程的信息
ps aux | grep 'Z'

# 打印进程信息,其中就包含了父进程的pid
cat /proc/pid/status

# 列出所有僵尸进程的父进程ppid
ps -eo pid,ppid,stat,cmd | grep ' Z'

# EG: defunct表示父进程已经终止了,子进程编程孤儿进程了
1437732 2388881 Z    [python] <defunct>

# 杀掉进程
sudo kill -9 pid

在杀掉僵尸进程的父进程之后,其子进程会变成孤儿进程,孤儿进程的父进程会归于 1 (也就是init进程),而init进程会定期检查并清理僵尸进程。

手动触发init进程的僵尸进程清理:

# 向init进程发送SIGCHLD信号
sudo kill -SIGCHLD <init_pid>

遇到No display

  • 查看一下是不是hdmi/vga/dvi线没连好。
  • 虚拟显示器一直没有配置好,可能确实需要hdmi模拟器了。

NAS (fnOS) 环境下 Neovim 安装及 rsync 权限翻车

现象:

  • LazyVim 启动报错:attempt to call upvalue 'uri_encode' (a nil value)、module 'vim.tty' not found。
  • 系统目录权限异常:查看 /usr/local 时,发现目录本身以及 bin、lib、share 权限变成了 d---------(000 无任何权限),属主变成了普通用户 k:Users,普通用户甚至无法 cd 或读取该目录。

原因分析:

  1. Neovim 启动报错:版本与 runtime 不匹配。Neovim 0.12+ 依赖配套的 runtime 目录(如 vim.tty 模块),如果系统残留旧版 runtime,或只拷了二进制程序漏掉了 runtime,就会报模块找不到的错误。

  2. 权限被彻底锁死(核心事故链):

    • Btrfs 存储池的 ACL 特性:在飞牛 fnOS(NAS 系统)的 Btrfs 数据盘上解压 tar 包时,由于 NAS 开启了网络共享 ACL 访问控制,新解压出来的文件夹在底层传统的 POSIX 权限位呈现为 000(d---------),访问权限完全由底层的扩展 ACL 维护。
    • rsync -a 跨文件系统缺陷:执行 sudo rsync -avH ./ /usr/local/ 时:
      1. -a 默认同步 POSIX 基础权限(把 000 拷了过去),但没有带 -A(丢弃了 ACL 规则)。系统盘 ext4 只认 POSIX 权限,直接对所有人锁死。
      2. 源路径写 ./ 会将当前目录 . 自身的属性直接覆盖到目标根目录 /usr/local/,导致上层目录的属主和权限一并被改乱。
快速修复:一键还原系统级标准权限
# 1. 恢复 /usr/local 的系统属主为 root
sudo chown -R root:root /usr/local

# 2. 赋予标准访问权限(目录 755,文件合理读写执行)
sudo chmod 755 /usr/local
sudo chmod -R a+rX /usr/local

# 3. 清理 Neovim 历史缓存与状态
rm -rf ~/.cache/nvim ~/.local/state/nvim

最佳实践与推荐用法:

  1. NAS / 个人服务器上安装开发工具,首选装在用户家目录,不使用 sudo,完全避免污染系统目录与 ACL 冲突:
# 解压到家目录并重命名
tar -xzf nvim-linux-x86_64.tar.gz
mv nvim-linux-x86_64 ~/nvim

# 加入个人 PATH
echo 'export PATH="$HOME/nvim/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
  1. 必须写入全局系统目录(/usr 或 /usr/local)时的正确姿势:
    • 推荐使用普通 cp(不带 -p 时,会自动使用 root 身份创建文件,并重置为系统默认的标准 755/644 权限,避免带入怪异权限):
      sudo cp -r nvim-linux-x86_64/* /usr/local/
    • 使用独立目录 + 软链接(清晰易维护,不污染 runtime):
      # 将整套完整包放入 /opt
      sudo mv nvim-linux-x86_64 /opt/nvim
      # 仅软链接可执行程序,Neovim 会自动沿相对路径寻找自身的 runtime
      sudo ln -sf /opt/nvim/bin/nvim /usr/local/bin/nvim
    • 如果一定要用 rsync 合并到系统目录,去除 -p(perms)、-o(owner)、-g(group),避免覆盖系统目录属性:
      sudo rsync -rltvH --progress ./ /usr/local/

Ubuntu 服务器 RustDesk 连不上(GNOME 锁屏阻塞导致)

现象:

  • Ubuntu 服务器开机正常,SSH 可以秒连。
  • 使用 RustDesk 远程连接时失败(无法建立画面连接/卡住)。
  • 初步怀疑:GDM 桌面服务或 RustDesk 服务未成功拉起。

排查过程:

排查步骤检查命令实际现象 / 结论
① 检查桌面管理服务systemctl status gdmGDM 服务正常;虽然日志有远程显示断言警告(可忽略),但主进程健康。
② 检查桌面图形会话loginctl list-sessions
ps aux | grep -E "gnome-shell|Xorg"
Xorg 和 gnome-shell 都在正常运行,使用的是 X11 模式(tty2),属于用户 k(UID 1000)。桌面环境无故障。
③ 检查 RustDesk 服务systemctl status rustdesk服务完全正常,守护进程与托盘均在运行;Cannot load libcuda.so.1 仅代表无英伟达硬编加速,自动回退到 CPU 软编,属正常行为。
④ 发现致命细节loginctl list-sessions发现用户会话状态显示 IDLE: yes,且后台有 org.gnome.ScreenSaver 进程,说明屏幕已进入空闲锁屏/休眠状态。

根本原因: GNOME 锁屏阻塞——Ubuntu 桌面因超时无操作触发了息屏锁屏(ScreenSaver),导致 RustDesk 无法正常捕获显示画面并建立连接。

解决办法(临时,立即恢复连接):

# 直接在登录用户终端执行(无需加 sudo)
loginctl unlock-sessions
避坑技术细节:为什么不能加 sudo?
  • 桌面会话归属于普通用户 k(UID 1000)。
  • 直接执行时,终端带着用户环境变量(如 XDG_RUNTIME_DIR=/run/user/1000 和 D-Bus 通道),可直接向 GNOME 锁屏组件发信号。
  • 加了 sudo 会切换为 root(UID 0),环境变量被剥离,且 root 名下无桌面会话,会导致信号投递失败。