标签: Linux

  • 解决 Fedora 43 (GNOME 49) 远程 SSH 触发 “The system will suspend now!”

    我把家里的台式机升级到Fedora 43 ,GNOME49 用起来确实挺舒服,顺手将 Fedora 43 Workstation 作为远程开发机或服务器使用时,遇到一个特别烦的问题,SSH 连着连着突然断了,因系统自动进入休眠(Suspend)而中断。我在 GNOME 图形界面的电源设置中关闭了所有自动挂起选项,系统依然可能在远程操作期间弹出 The system will suspend now! 并强制断开连接。

    1. 常规配置(图形界面)

    我开始以为在 GNOME 桌面环境的电源管理中配置这样就可以正常解决这个问题但并没有解决,没用

    1. 打开 Settings (设置) -> Power (电源)
    2. Automatic Screen Blank (自动黑屏):设置为 Off (关闭)
    3. Automatic Suspend (自动挂起):确保设置为 Off (关闭)

    2. 禁用 systemd 休眠

    当 GUI 设置失效时,说明系统底层的 systemd 策略仍处于活跃状态。对于需要保持常开的远程机器,最稳妥的方法是屏蔽(Mask)相关的休眠单元。

    2.1 诊断休眠状态

    在操作前,你可以运行以下命令查看系统当前的休眠服务状态:

    sudo systemctl status sleep.target suspend.target hibernate.target hybrid-sleep.target

    2.2 执行屏蔽命令

    通过 mask 命令,我们将休眠相关的 Target 指向 /dev/null。这是一种比 disable 更强力的手段,能够防止任何物理按键、系统 API 或 GUI 插件触发休眠。

    # 一键禁用所有休眠模式
    sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target

    执行效果: 系统将完全忽略所有的休眠请求,彻底终结 SSH 远程连接时的中断风险。

    2.3 恢复休眠(可选)

    如果你在未来需要恢复笔记本的合盖休眠或台式机的节能模式,可以使用以下命令解除屏蔽:

    sudo systemctl unmask sleep.target suspend.target hibernate.target hybrid-sleep.target

    3. 技术解析:为什么 GUI 设置后依然会断连

    在 Fedora 43 (GNOME 49) 中,这种情况通常由以下原因引起:

    • 多 Session 竞争: GNOME 的电源设置有时仅对当前的本地会话有效。如果系统停留在 GDM 登录界面,或者系统认为本地处于“无活动”状态,底层 systemd-logind 可能会接管电源策略。
    • SSH 会话识别: 系统默认可能不将纯远程 SSH 流量识别为“用户活动”,从而触发了全局的空闲休眠逻辑。

    追求“Vibe Coding”或需要高可用远程环境的开发者来说,单纯依靠 GNOME 的开关是不够的。“UI 辅助设置 + systemd 强制 Mask” 才是确保 Fedora 43 系统稳如磐石、SSH 永不断线的标准做法。

  • Fedora 开启 Wake-on-LAN(WOL)远程唤醒配置教程

    Wake-on-LAN(WOL,网络唤醒)是一种通过网络远程启动计算机的技术。设备即使处于关机或休眠状态,也可以通过接收特定的 Magic Packet(魔术包)被远程唤醒。

    该功能常用于:

    • 家庭服务器
    • NAS
    • 远程办公主机
    • 低功耗 Linux 设备

    1. 查看网卡名称

    ip link

    示例输出:

    2: enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP>

    这里的enp3s0为当前网卡名称。

    enp3s0

    2. 检查网卡是否支持 Wake-on-LAN

    查看网卡 WOL 状态:

    sudo ethtool <网卡名称> | grep Wake-on

    例如:

    sudo ethtool enp3s0 | grep Wake-on

    输出示例:

    Supports Wake-on: pumbg
    Wake-on: d

    Wake-on 参数说明

    参数含义
    d禁用 Wake-on-LAN
    pPHY 活动唤醒
    u单播数据包唤醒
    m多播数据包唤醒
    b广播数据包唤醒
    aARP 数据包唤醒
    gMagic Packet 唤醒
    s安全 Magic Packet
    f特定过滤器唤醒

    其中最常用的是g表示支持 Magic Packet 唤醒。

    3. 查看 NetworkManager 网络连接名称

    Fedora 默认使用 NetworkManager 管理网络。

    查看当前连接:

    sudo nmcli connection show

    示例:

    NAME                UUID                                  TYPE      DEVICE
    Wired connection 1  xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx  ethernet  enp3s0

    记住连接名称:

    Wired connection 1

    4. 开启 Wake-on-LAN

    使用 nmcli 配置永久 WOL:

    sudo nmcli connection modify "Wired connection 1" 802-3-ethernet.wake-on-lan magic

    该配置在系统重启后依然有效。

    5. 重新应用网络配置

    立即生效:

    sudo nmcli device reapply <网卡名称>

    例如:

    sudo nmcli device reapply enp3s0

    6. 验证是否开启成功

    再次检查:

    sudo ethtool <网卡名称> | grep Wake-on

    如果输出Wake-on: g说明 Wake-on-LAN 已成功开启。

  • Docker 磁盘爆满实录:我以为镜像删干净了,结果系统还是报 No Space

    执行了 docker rmi,为什么磁盘空间还是 100% 占用?记录了一次服务器磁盘爆满的排查过程,深度解析 Docker 分层存储与构建缓存,并分享真正有效的深度清理命令。

    在日常开发和运维中,我习惯于用一个简单的命令来清理 Docker 镜像:

    docker rmi <IMAGE_ID>

    删除不再使用的镜像,释放磁盘空间,逻辑看似完美。直到有一天,我的服务器直接弹出令人绝望的红字:

    No space left on device

    我删光了所有能删的镜像,为什么磁盘还是满的?

    1. 现象:镜像删了,空间没回?

    当我意识到磁盘报警时,第一反应是检查 Docker 的占用情况:

    docker images  # 查看镜像列表
    df -h          # 查看系统磁盘状况

    诡异的现象出现了:

    • docker images 列表里只剩下几个业务镜像,加起来不到 2GB
    • /var/lib/docker 目录依然占用了 40GB+

    这时候我才意识到:看到的“镜像”,并不代表 Docker 占用的全部空间。

    2. 分析原因:为什么 docker rmi 会失效?

    理解这个问题,必须看清 Docker 的底层存储机制。Docker 镜像并非一个独立的文件,而是像乐高积木一样层层堆叠的(Layer-based Filesystem)。

    2.1 镜像层(Layers)的“幽灵”

    当你用 docker rmi 删除一个镜像时,Docker 只会尝试删除该镜像特有的层。如果某些层被其他镜像引用,或者是构建过程中的中间层,它们就会留在磁盘上,变成无法通过 rmi 直接删除的“幽灵空间”。

    2.2 虚悬镜像(Dangling Images)

    在多次执行 docker build 后,旧的镜像会失去标签(Tag),变成 <none>:<none>。这些镜像往往不会出现在你常规的清理视线里,但依然实打实地占据空间。

    2.3 构建缓存(Build Cache)

    这是最隐形的“空间杀手”。特别是开启了 BuildKit 后,Docker 会产生大量的构建缓存。这些缓存完全不会显示在 docker images 列表中,却是磁盘爆满的元凶之一。

    3. 真正救命的命令:docker image prune

    当我发现手动删除(rmi)无能为力后,我使用了 Docker 官方提供的“深度清理”命令:

    docker image prune -a

    这条命令到底做了什么?

    1. 所有未被容器使用的镜像(即使它有 Tag)。
    2. 所有虚悬镜像(Dangling Images)。
    3. 所有孤立的镜像层。

    ⚠️ 安全提示: 只要你的业务容器正在运行,它所依赖的镜像就是安全的,不会被 prune 误删。但对于已经停止(Exited)的容器,其对应的镜像可能会被判定为“未使用”而被清理。

    执行后,我的服务器磁盘占用瞬间从 100% 降到了 15%

    4. 进阶技巧:如何精准定位与排查?

    在盲目清理之前,我建议先用以下命令定位 Docker 的真实磁盘占用:

    docker system df

    输出会清晰地展示四类数据的占用分布:

    • Images: 镜像
    • Containers: 容器(包括日志和可写层)
    • Local Volumes: 本地卷
    • Build Cache: 构建缓存

    如果 image prune 仍不足以释放空间,可以使用终极命令:

    # 清理一切:停止的容器、未使用的网络、未使用的镜像和卷
    docker system prune -a --volumes
  • Fedora Workstation 43 初始化设置卡住,Next 按钮无响应的通用修复方案

    问题描述

    在完成 Fedora Workstation 43 的安装后,系统会进入首次开机初始化设置(Initial Setup)流程。在 Privacy(隐私设置) 页面点击 Next(下一步) 时发现按钮毫无反应,系统处于假死状态,导致无法正常进入桌面。

    这通常是由于内核在初始化阶段与特定的显示硬件(尤其是部分 NVIDIA 显卡或集成显卡)存在兼容性问题,导致图形界面渲染挂起。

    解决方案:使用 VESA 模式强制初始化

    通过在引导时临时禁用显卡硬件加速,使用 VESA 模式(纯软件渲染)可以顺利绕过此卡顿。

    1. 重启并进入编辑模式

    强制重启你的电脑。在看到 GRUB 引导菜单(选择 Fedora 内核版本的倒计时界面)时,立即按下键盘上的 e 键进入编辑模式。

    2. 修改内核启动参数

    在出现的代码页中,找到以 linux 开头的行(通常位于倒数第 3 或第 4 行)。

    1. 将光标移动到该行的末尾
    2. 先输入一个 空格
    3. 手动输入以下参数:
      inst.xdriver=vesa nomodeset

    3. 启动并完成设置

    按下 Ctrl + X 启动系统。此时系统会以低分辨率模式启动,初始化页面的 Next 按钮现在可以正常点击了。

    进入桌面后的后续处理

    成功进入桌面后,由于我们使用了 nomodeset,系统分辨率会很低且操作有延迟。请务必执行以下步骤恢复正常:

    1. 更新系统: 打开终端,运行 sudo dnf update
    2. 安装驱动: 检查并安装适合你显卡的驱动程序(如 NVIDIA 专有驱动)。
    3. 正常重启: 驱动安装完成后,直接重启电脑,无需再手动输入任何参数,系统将恢复满血性能。
  • 从 Windows 到 Linux:Node.js 项目迁移实战与避坑指南

    在 Windows 上开发 Node.js 项目非常方便,但将项目打包上传到 Linux 服务器后运行时,常常会遇到各种错误,比如 Permission denied、模块找不到或路径错误。

    因为 Windows 和 Linux 的文件系统、依赖管理以及路径规则存在差异。跨平台迁移 Node.js 项目时核心逻辑其实非常简单:丢弃 Windows 产物,在 Linux 原生构建。

    迁移操作步骤

    项目已经从 Windows 上传到 Linux按以下步骤操作:

    # 彻底清理 Windows 残留的依赖和锁文件
    rm -rf node_modules package-lock.json
    
    # 重新安装依赖
    npm install
    
    # 启动开发模式,验证运行
    npm run dev
  • 在 Debian 13 Trixie 上安装 Fcitx5 中文输入法

    1. 安装中文输入法

    在终端执行以下命令,安装 Fcitx5 及中文输入法插件:

    apt update
    apt install --install-recommends fcitx5 fcitx5-chinese-addons

    2. 配置 Fcitx5

    1. 打开 Fcitx5 配置工具:
       fcitx5-configtool
    1. 在“输入法”中点击 + 添加 Pinyin(拼音) 输入法。

    3. 切换输入法

    使用快捷键 Ctrl + 空格 在中英文输入法间切换。