先说场景

机器是一台日常开发本:Debian GNU/Linux 13 (trixie) + XFCE,硬件是 HP ProBook,双 NVMe,本机还跑着 Docker(MySQL / Redis / Portainer 等)。

一次顺手整理,把几件容易踩坑的事一起做完:

  1. 关掉自动熄屏 / 挂起(插电、电池都关)
  2. 看清「要不要更新」,以及为什么 apt 会甩出一千多个可升级包
  3. 注释掉 sid / bullseye 混源,只做安全范围内的升级
  4. 弄清 XApp / AppMenu,装上全局菜单并让它对齐、能导出菜单
  5. 看资源占用,给开发机开防火墙(默认不让别的设备访问)

下面按实际操作顺序写,命令可直接复用。

XFCE:关掉自动熄屏和挂起

电源管理 GUI

打开:

bash
1xfce4-power-manager-settings

重点看两个标签,且 On battery / Plugged in 都要改:

  • System:When inactive for → Never
  • Display:Put to sleep after / Switch off after → Never
    更干净的做法:直接关掉 Display power management 总开关

Devices 标签只显示电池信息,没有熄屏相关选项。

屏保

本机没有 xfce4-screensaver(command not found 很正常),可以忽略。真正黑屏多半来自电源管理或 DPMS。

DPMS(硬件级熄屏)

终端立刻关掉:

bash
1xset s off
2xset -dpms
3xset s noblank

想开机也生效:在 设置 → 会话和启动 → 应用程序自动启动 加一条:

bash
1xset s off -dpms s noblank

也可用 xfconf 关掉电源管理侧的 DPMS:

bash
1xfconf-query -c xfce4-power-manager -p /xfce4-power-manager/dpms-enabled -s false
2xfconf-query -c xfce4-power-manager -p /xfce4-power-manager/blank-on-ac -s 0
3xfconf-query -c xfce4-power-manager -p /xfce4-power-manager/blank-on-battery -s 0

系统要不要更新:先看源,再看数量

表面现象

bash
1apt list --upgradable

一度出现 一千多个 可升级包,内核候选版本甚至从 6.12 跳到 7.x。这不是「trixie 落后很多」,而是软件源混了。

实际系统状态(整理前)

项状态
发行版Debian 13.6 (trixie)
内核6.12.107+deb13-amd64
重启需求无
真正该升的(排除 sid)主要是 Chrome / Firefox / Thunderbird / VS Code 一类

问题根源:sources.list 混进了 sid 和 bullseye

典型危险行:

text
1deb http://ftp.de.debian.org/debian sid main
2deb http://deb.debian.org/debian bullseye main non-free contrib
3deb http://deb.debian.org/debian bullseye-updates main non-free contrib

sid 与 trixie 同为优先级 500 时,apt upgrade 会大量拉 unstable,等于把稳定桌面往滚动版拖。

处理:注释掉混源

先备份,再注释:

bash
1sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak.$(date +%Y%m%d%H%M%S)
2sudo sed -i '/ftp\.de\.debian\.org\/debian sid/s/^/# /' /etc/apt/sources.list
3sudo sed -i -E '/deb\.debian\.org\/debian bullseye/s/^([^#])/# \1/' /etc/apt/sources.list
4sudo apt update

干净后应只剩:

  • trixie / trixie-updates / trixie-backports(镜像)
  • trixie-security
  • 以及 Chrome / Docker / VS Code 等第三方源

此时可升级包会从一千多个掉到几个。

安全升级(不要 full-upgrade 乱扫)

bash
1sudo apt upgrade -y

当时升的是:

  • firefox-esr / 语言包 → 安全更新
  • thunderbird → 安全更新
  • google-chrome-stable
  • code(VS Code)

不要对着带 /unstable 的那一千个包直接 full-upgrade。

XFCE 全局菜单:AppMenu,不是 XApp Menu

容易混淆的名字

名字实际是什么
XAppLinux Mint 的跨桌面组件库(托盘 StatusNotifier 等)
xapp-sn-watcher托盘相关服务,不是开始菜单
AppMenu Plugin全局菜单:当前窗口的 File / Edit 显示在面板上

Debian 上对应的包:

bash
1sudo apt install xfce4-appmenu-plugin appmenu-gtk3-module

会顺带装上 appmenu-registrar。装完后:

  1. 面板右键 → 添加新项目 → AppMenu Plugin
  2. 注销再登录(环境变量要进图形会话)

只显示应用名、没有 File/Edit?

常见两个原因:

① 会话没加载 appmenu-gtk-module

检查:

bash
1echo "GTK_MODULES=$GTK_MODULES"
2# 空的话菜单导不出来

写入 ~/.xsessionrc(XFCE 会读):

bash
1if [ -z "$GTK_MODULES" ]; then
2  GTK_MODULES="appmenu-gtk-module"
3else
4  GTK_MODULES="$GTK_MODULES:appmenu-gtk-module"
5fi
6export GTK_MODULES
7export UBUNTU_MENUPROXY=1

也可:

bash
1mkdir -p ~/.config/environment.d
2cat > ~/.config/environment.d/appmenu.conf <<'EOF'
3GTK_MODULES=appmenu-gtk-module
4UBUNTU_MENUPROXY=1
5EOF

官方脚本还会写 xsettings:

bash
1/usr/bin/xfce4-appmenu-plugin-enable

然后注销重登,用 Thunar / Mousepad 这类 GTK 应用验证。
点桌面时显示 Xfdesktop、只有名字没有菜单,是正常的——桌面本身没有传统菜单栏。
Cursor / Chrome / VS Code 等 Electron 应用通常也不支持全局菜单。

② 菜单「居中」而不是靠左

AppMenu 若开启 Expand plugin on panel,会占满面板中间空白;短标题(如 Cursor)会看起来像漂在中间。

关掉扩展(假设 AppMenu 是 plugin-2,用 xfconf-query -c xfce4-panel -l -v | grep appmenu 确认 ID):

bash
1xfconf-query -c xfce4-panel -p /plugins/plugin-2/plugins/plugin-2/expand -n -t bool -s false
2xfconf-query -c xfce4-panel -p /plugins/plugin-2/expand -n -t bool -s false
3xfce4-panel -r

面板上保留一个 Expand 的分隔符 在 AppMenu 后面,托盘和时钟仍会靠右。

也可右键 AppMenu → 属性,取消勾选 Expand plugin on panel。
注意:插件启动往往会把 expand 写回 true,只改 GUI 不够。完整原因与登录后强制关掉的脚本见:XFCE AppMenu 居中与 Expand 被写回。

资源占用一眼看懂

整理防火墙前顺手摸了一下(开机约 1 小时时):

资源概况
CPUi5-1240P,16 逻辑核;负载 ~2.1,空闲约 80%
内存15 GiB,已用 ~9.6 GiB,可用 ~5.7 GiB;Swap 未用
磁盘/ ~8%,/home ~20%
温度CPU 包温约 62°C
主要占用Firefox、Cursor、本机/容器相关服务、clash-verge

常用命令:

bash
1uptime
2free -h
3df -hT
4ps aux --sort=-%mem | head
5ps aux --sort=-%cpu | head
6sensors   # 需 lm-sensors

防火墙:开发机默认不对外开放

整理前的真实状态

组件状态
UFW未安装(仅有 /etc/ufw 残留目录)
firewalld无
nftables 服务装了但 disabled
INPUT 策略ACCEPT(入站全放行)

更麻烦的是 Docker 把端口绑在 0.0.0.0 上,例如:

  • 3306 MySQL
  • 6379 Redis
  • 9000/9001、9874 Portainer 等

局域网里别的设备理论上能直接连进来。开发本一般不需要这个。

安装并启用 UFW

bash
1sudo apt install -y ufw
2
3sudo ufw default deny incoming
4sudo ufw default allow outgoing
5sudo ufw default deny routed
6
7# 本机不跑对外 SSH,就不放行 22
8sudo ufw --force enable
9sudo ufw status verbose

期望结果:

text
1Status: active
2Default: deny (incoming), allow (outgoing), deny (routed)

关键:UFW 管不住 Docker 发布端口

外部访问 Docker 映射端口走的是 FORWARD + DNAT,不是简单的 INPUT,所以还要在 DOCKER-USER 里拦一层。

追加到 /etc/ufw/after.rules(文件末尾):

text
 1# -*- Begin Docker protection (dev laptop) -*-
 2*filter
 3:DOCKER-USER - [0:0]
 4-A DOCKER-USER -m conntrack --ctstate RELATED,ESTABLISHED -j RETURN
 5-A DOCKER-USER -i docker0 -j RETURN
 6-A DOCKER-USER -i lo -j RETURN
 7-A DOCKER-USER -s 172.16.0.0/12 -j RETURN
 8-A DOCKER-USER -j DROP
 9COMMIT
10# -*- End Docker protection -*-

然后:

bash
1sudo ufw reload
2sudo iptables -L DOCKER-USER -n -v

效果:

  • 本机 127.0.0.1:3306 / :6379 → 照常
  • 其他设备访问你的局域网 IP + 这些端口 → 被丢弃

常用维护

bash
1sudo ufw status verbose
2sudo ufw allow 8080/tcp          # 临时给某个服务开洞
3sudo ufw delete allow 8080/tcp
4sudo ufw disable                 # 临时关掉
5sudo ufw enable

更稳妥的长期做法,是把 compose / docker run 的端口改成只绑本机,例如 -p 127.0.0.1:3306:3306,防火墙只是第二道闸。