Featured image of post Linux 工作站基础配置:swap、字体、输入法与 SSH

Linux 工作站基础配置:swap、字体、输入法与 SSH

Linux 桌面工作站的稳定性方案,从 swap、字体、输入法到 SSH 服务与代理客户端的完整配置。

为什么需要这套配置

把 Linux 当作日常桌面工作站使用,2014 年开始已经可行:GNOME 3.10、KDE 4.11、XFCE 4.10 都已稳定,VMware / VirtualBox 跑 Windows XP/7 兼容良好。但"桌面工作站"和"服务器"最大的区别在于"长时间挂起 + 内存抖动 + 多桌面 + 代理客户端"这四件事。

本文把"日常开机就能用"的 Linux 工作站环境拆成 4 块:内存保护(swap + earlyoom)、字体、输入法、SSH 服务、代理客户端。

前置知识

  • 已有 Kali / Debian / Ubuntu 12.04+ 的 root 账号
  • 知道 apt update && apt install -y pkg 的基本语法
  • sudo 权限

一、Swap + earlyoom:内存保命的最后一道防线

桌面环境最常见的死机原因是 OOM(Out Of Memory)。早期 Linux 内核会在 OOM 时随机杀进程(OOM Killer),但 Xorg 桌面被杀掉就会黑屏。earlyoom 是一个"提前 OOM killer"——当可用内存低于阈值时主动同步杀最大占用进程,桌面不会黑屏。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 1. 彻底关闭可能残留的异常 swap 状态
sudo swapoff -a

# 2. 在根目录下分配 8G swap(按物理内存 50% 估算)
sudo fallocate -l 8G /swapfile

# 3. 必须锁死权限,只允许系统 root 读写(安全合规要求)
sudo chmod 600 /swapfile

# 4. 把这个文件格式化为 Linux Swap 交换文件
sudo mkswap /swapfile

# 5. 立刻启用它
sudo swapon /swapfile
sudo sed -i '/\/swapfile/d' /etc/fstab
echo "/swapfile none swap sw 0 0" | sudo tee -a /etc/fstab
sudo swapon -a
swapon --show

# 6. 安装 EarlyOOM 并设置开机自启
sudo apt update && sudo apt install -y earlyoom
sudo systemctl enable --now earlyoom

fallocate 是 2014 年起标准工具,比 dd 快几十倍(秒级 vs 分钟级)。

二、内核调度:把 CPU 优先权让给图形服务

桌面卡顿的元凶之一是"图形进程优先级被系统调度压到 -5 以下"。Xfce / GNOME / KDE 都需要把 Xorg、wayland、合成器、窗口管理器的 nice 值提到 -15。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
# 1. 正式写入留出 10% CPU 硬件带宽的配置(900000 微秒)
echo "kernel.sched_rt_runtime_us = 900000" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
sysctl kernel.sched_rt_runtime_us

# 2. 查 Xfce 桌面进程 PID(Kali 默认)
pgrep -x xfwm4

# 查 GNOME 桌面进程 PID
pgrep -x gnome-shell

# 查 KDE 桌面进程 PID
pgrep -x kwin_x11 || pgrep -x kwin_wayland

# 3. 通用命令:把底层图形服务提到最高优先级 (-15)
sudo renice -n -15 -p $(pgrep -x Xorg || pgrep -x wayland)

Xfce 永久生效

Xfce 是 Kali Linux 的默认桌面,重启后需要重新提权。用 @reboot 配合 sleep 10(等系统启动完)解决:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 1. 提升底层图形服务器优先级 (-15)
sudo renice -n -15 -p $(pgrep -x Xorg || pgrep -x wayland)
# 2. 针对 Xfce 桌面组件,精准全员提权 (-15)
sudo renice -n -15 -p $(pgrep -x xfwm4) $(pgrep -x xfce4-panel) $(pgrep -x xfdesktop)

# 3. 写入 crontab,重启后自动执行
(sudo crontab -l 2>/dev/null; echo "@reboot sleep 10 && renice -n -15 -p \$(pgrep -x Xorg || pgrep -x wayland) \$(pgrep -x xfwm4) \$(pgrep -x xfce4-panel) \$(pgrep -x xfdesktop) >/dev/null 2>&1") | sudo crontab -

# 4. 验证
sudo crontab -l
ps -p 2329 -o pid,ni,comm

GNOME / KDE 单行命令

GNOME 和 KDE 只有 1 个主进程需要提权:

1
2
3
4
5
# GNOME 桌面
sudo renice -n -15 -p $(pgrep -x gnome-shell)

# KDE 桌面
sudo renice -n -15 -p $(pgrep -x kwin_x11 || pgrep -x kwin_wayland || pgrep -x plasmashell)

三、字体:Cantarell + Fira Code Medium

Kali / Debian 桌面默认字体的几个坑:

  • Cantarell Regular 11(GNOME 默认):界面阅读舒服,但等宽字符宽度不一致,vim / 终端会错位
  • Fira Code Medium 10(等宽字体):连字(ligature)支持好,=> != >= 会自动连写

解决:终端强制用 Fira Code Medium,界面保留 Cantarell。

四、五笔输入法(fcitx5)

Debian 12+ / Kali 切换到 fcitx5 框架,比 fcitx4 性能好、内存少。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
sudo apt-get install fcitx5 fcitx5-chinese-addons \
    fcitx5-frontend-gtk2 fcitx5-frontend-gtk3 fcitx5-frontend-qt5 \
    kde-config-fcitx5

# 写入 ~/.zshrc
cat << 'EOF' >> ~/.zshrc
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS="@im=fcitx"
EOF

# 启动
fcitx5 -d

# 打开配置(添加五笔 / 拼音)
fcitx5-config-qt

五、SSH 服务:桌面机的远程救生圈

桌面 Linux 装上 SSH 服务后,崩溃时可以从另一台机器 SSH 进去 kill 进程、重启服务——比物理重启快 10 倍。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
# 1. 安装并启用
sudo apt update && sudo apt install -y openssh-server
sudo systemctl start ssh
sudo systemctl enable ssh
sudo systemctl status ssh

# 2. 编辑配置(启用公私钥登录)
sudo nvim /etc/ssh/sshd_config
# 找到下面这行,确保 yes
PubkeyAuthentication yes
sudo systemctl restart ssh

# 3. 把其他机器的公钥追加到本机
cat doc/path/to/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
chmod 700 ~/.ssh

六、Clash Verge:TUN 模式 + 软件渲染兜底

Linux 桌面装代理客户端的最大坑是 WebKit2GTK 在 VMware 软显卡上崩溃。Clash Verge Rev 是 2023 年后社区维护的版本,2.5.0 系列(2024+)加入了 WebKit 软渲染选项。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 1. 安装(以 .deb 为例)
sudo dpkg -i Clash.Verge_2.5.0-rc_amd64.deb
which clash-verge
/usr/bin/clash-verge

# 2. TUN 模式:自动代理,省去系统代理环境变量配置
# 在 Verge 设置里开启 TUN 模式

# 3. 软渲染兜底(VMware SVGA II 显卡崩溃场景)
# NO_AT_BRIDGE=1 禁用 ATK bridge,绕过崩溃
# LIBGL_ALWAYS_SOFTWARE=1 强制 Mesa 用 CPU 软渲染(llvmpipe)替代 GPU 硬加速
LIBGL_ALWAYS_SOFTWARE=1 NO_AT_BRIDGE=1 clash-verge

# 4. 启动器参数(图形界面双击)
env LIBGL_ALWAYS_SOFTWARE=1 NO_AT_BRIDGE=1 clash-verge %u

# 5. 卸载
dpkg -l | grep clash
sudo dpkg -r clash-verge        # 普通卸载
sudo dpkg -P clash-verge        # 彻底卸载
sudo apt autoremove
rm -rf ~/.config/clash-verge/  # 清理配置

Why 软渲染:Clash Verge 用 WebKit2GTK 渲染界面,需要 OpenGL 做合成。VMware 显卡是 VMware SVGA II,内核驱动 vmwgfx 虽然能提供 3D 加速,但 WebKit2GTK 的 GPU 合成路径在 vmwgfx 上有问题,渲染出来是黑的。软渲染用 CPU 替代 GPU,速度慢 5 倍但稳定。

七、字体与终端协同

桌面终端界面
XfceFira Code Medium 10Cantarell Regular 11
GNOMEFira Code Medium 10Cantarell Regular 11
KDEFira Code Medium 10Noto Sans CJK 11

KDE 桌面默认字体对中文渲染好(Noto Sans CJK 11),但等宽字符需要手动指定 Fira Code Medium。

下一步

  • 想了解更多 Linux 开发工具链(sdkman / Go / Rust / Docker),看 2016-07-15《Linux 办公与开发工具链》
  • 想把 WSL2 用成日常开发主力,看 2017-01-15《WSL2 完整使用手册》
  • 想在 Windows 端实现类似体验,看 2017-04-15《Windows 包管理器三件套》

参考资料

  • 早期 Linux 桌面工作站的稳定性方案
  • fcitx5 项目:https://github.com/fcitx/fcitx5
  • Clash Verge Rev:https://github.com/clash-verge-rev/clash-verge-rev

2024+ 视角:Wayland 主导 + Systemd-resolved + 现代 Linux 桌面

2024+ Linux 桌面的关键变化

维度20142024+
显示协议X11Wayland(GNOME 46+ / KDE 6 默认)
桌面GNOME 3.10 / KDE 4.11GNOME 46 / KDE 6
字体渲染freetype + cairofreetype 2.13 + harfbuzz 8
输入法fcitx4fcitx5 5.1+
代理各种 GUIClash Meta(Mihomo)
窗口合成Xorg 手动Wayland 协议

Wayland 是 2024+ 的"正确选择"

  • GNOME 46+(2024-03)默认 Wayland,X11 仅兼容模式
  • KDE Plasma 6(2024-02)默认 Wayland
  • Sway / Hyprland 等 tiling WM 体验更丝滑

Wayland 优势

  • 撕裂 / 延迟远低于 X11
  • HiDPI 缩放原生支持
  • 安全模型更严(窗口间不互通)
  • 与 GPU 合成深度集成

Wayland 坑

  • NVIDIA 闭源驱动支持差(开源驱动 nouveau OK)
  • 截屏 / 录屏工具要适配
  • 远程桌面(VNC / RDP)需要 waypipe

earlyoom 已被 systemd-oomd 取代

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# 1. 禁用 earlyoom
sudo systemctl disable --now earlyoom

# 2. 启用 systemd-oomd
sudo systemctl enable --now systemd-oomd

# 3. 配置 /etc/systemd/oomd.conf
[OOM]
SwapUsedLimit=90%
DefaultMemoryPressureLimit=60%
ManagedOOMSwap=kill
ManagedOOMMemoryPressure=kill

优势

  • 内核 PSI(Pressure Stall Information)数据,比 earlyoom 更精准
  • systemd 原生集成,无需独立守护进程
  • cgroup 级别 OOM 控制(容器友好)

字体 2024+ 演进

  • Cantarell 仍是 GNOME 默认
  • Inter 2024+ 跨桌面最流行(Noto Sans CJK 11 仍是 KDE CJK 首选)
  • JetBrainsMono Nerd Font 替代 Fira Code(连字 + 图标覆盖更全)
  • CJK 字体:思源黑体(Noto Sans CJK)仍是开源首选
1
2
3
4
5
6
7
# 装全套 Nerd Font(2024+ 推荐)
sudo apt install fonts-jetbrains-mono
# 或下载
wget https://github.com/ryanoasis/nerd-fonts/releases/latest/download/JetBrainsMono.zip
mkdir -p ~/.local/share/fonts/JetBrainsMono
unzip JetBrainsMono.zip -d ~/.local/share/fonts/JetBrainsMono/
fc-cache -fv

输入法 2024+ 现状

  • fcitx5 5.1+(2024):RIME 内核升级,五笔 / 拼音 / 粤语 / 沪语支持完整
  • ibus 1.5+(Wayland 友好)
  • Wayland 兼容性:fcitx5 5.1+ 完全兼容 Wayland
1
2
3
4
# fcitx5 2024+ 配置
fcitx5-config-qt   # 图形化配置
# ~/.config/fcitx5/conf/rime.conf
# 切换 rime 输入法部署目录

SSH 2024+ 安全基线

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# /etc/ssh/sshd_config(2024+ 推荐)
Port 2222                        # 改默认端口
PermitRootLogin no
PasswordAuthentication no        # 禁用密码
PubkeyAuthentication yes
KbdInteractiveAuthentication no
MaxAuthTries 3
ClientAliveInterval 300
ClientAliveCountMax 2

# 只允许特定用户
AllowGroups ssh-users

# 强制现代算法
KexAlgorithms curve25519-sha256@libssh.org
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com
MACs hmac-sha2-512-etm@openssh.com

Clash Verge Rev 2024+ 现状

  • Clash Meta(Mihomo) 成为协议支持最广的代理内核
  • Clash Verge Rev 2.x(2024):基于 Tauri 2.0,内存占用从 200MB 降到 50MB
  • mihomo party 2024+:Linux 上 GUI 体验最好
  • sing-box 1.9+:Clash Verge 之外的另一个选择,原生支持 Reality / Hysteria2
1
2
# 2024+ 启动参数
LIBGL_ALWAYS_SOFTWARE=1 WEBKIT_DISABLE_DMABUF_RENDERER=1 clash-verge-rev

2024+ 推荐的 Linux 桌面配置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
现代 Linux 桌面工作站(2024+)
├── 发行版:Ubuntu 24.04 LTS / Fedora 40 / Arch
├── 桌面:GNOME 46 / KDE Plasma 6 / Hyprland
├── 显示协议:Wayland(默认)
├── 字体:JetBrainsMono Nerd Font + Noto Sans CJK
├── 输入法:fcitx5 5.1+(RIME / 五笔)
├── OOM:systemd-oomd(替代 earlyoom)
├── 代理:Clash Verge Rev 2.x / Mihomo
├── SSH:OpenSSH 9.x(强制密钥 + 改端口)
├── 文件:ZFS / Btrfs 快照 + 自动备份
├── 安全:UFW + Fail2ban
├── 监控:GNOME Extensions / Conky
└── 终端:Ghostty / Kitty / Foot(Wayland 原生)

2024+ 实用工具

工具用途
GhosttyWayland 原生终端,启动 < 10ms
KittyGPU 加速终端
Neovim 0.10+现代化 vim(Lua 配置)
HelixRust 写的现代化编辑器
Zed2024 新编辑器,AI 友好
WaybarWayland 状态栏(Hyprland 配套)
rofi-wayland应用启动器
sway / HyprlandTiling WM
wl-clipboardWayland 剪贴板
grim + slurpWayland 截屏

实战坑(2024+)

  • NVIDIA + Wayland:必须用 NVIDIA 555+ 驱动 + nvidia-drm.modeset=1 内核参数
  • fcitx5 + Wayland:必须用 fcitx5 5.1+ 版本,否则无法在 Wayland 下激活
  • systemd-oomd 配置:阈值设太低会杀正常进程,太高会触发内核 OOM Killer
  • Clash Verge 2.x 启动慢:Tauri 2.0 冷启动约 2s,可配 --no-sandbox 加快
使用 Hugo 构建
主题 StackJimmy 设计