适用 XFCE 4.12 / 4.14 / 4.16 / 4.18(RHEL 7/8 上多为 EPEL 的 XFCE)。窗口管理器须为 xfwm4。面向 VNC、SPICE、XRDP、X2Go、NoMachine、X11 转发等「画面要编码后传出去」的场景。本地独显游戏不要照搬「全关」。
1. 这篇解决什么
XFCE 默认窗口管理器是 xfwm4。它自带合成器(compositor):把每个窗口先画到离屏缓冲,再叠阴影、半透明、淡入,最后贴到屏幕。本地显示器上这能换来阴影、半透明效果和较少撕裂;一旦桌面是远程的,合成器每一帧都会变成更大、更碎、更难压缩的像素,带宽和延迟一起涨。
收益最大、也最常被忽略的开关是:
xfconf-query -c xfwm4 -p /general/use_compositing -t bool -s false
改完立刻生效,不必重启 X,也不必注销(个别版本的 vblank_mode 除外)。先确认窗口管理器确实是 xfwm4:wmctrl -m 或 ps -C xfwm4。若实际在跑 Compiz、Marco、KWin、Mutter,改 xfwm4 通道无效。
2. 合成器为什么吃带宽、拖慢显示
远程协议(RFB/VNC、SPICE、RDP)按「脏矩形」压缩画面。合成器打开时大致是:
1. 每个 toplevel 窗口被 Composite Redirect,不直接画到根窗口。
2. xfwm4 用 Render/GLX 把窗口、阴影、透明面板合成一张屏幕图。
3. 移动窗口时,阴影拖尾导致周围一大片像素变化,远程编码器按帧重压。
4. 半透明面板/终端让像素无法用单色矩形或 copyrect 优化。
关合成器后,窗口不再被重定向到离屏缓冲,直接显示,拖动可用 X 的 CopyArea。VNC 的 copyrect、SPICE 的 image cache 都能重新生效。带宽下降、拖动跟手,是因为少画了、也好压了。
3. 图形界面怎么关
1. 应用菜单 → 设置 → 窗口管理器微调(Window Manager Tweaks)。
2. 打开最后一页「合成器 / Compositor」。
3. 取消勾选「启用显示合成 / Enable display compositing」。
同一页还有窗口不透明度、移动/缩放时透明度、阴影。远程场景建议整页都「不透明 + 无阴影」。box_move / box_resize 不在这一页,而在「窗口管理器微调」的「无障碍(Accessibility)」页:勾选「移动/缩放窗口时隐藏窗口内容」(Hide content of windows when moving / resizing),对应 box_move / box_resize = true。不同版本界面文字可能略有出入,以 xfconf-query 的值为准。
xfconf-query -c xfwm4 -l -v | grep -E 'composit|opacity|shadow|vblank|unredirect|box_move|box_resize|zoom|cycle_preview'
4. 参数表(远程 / 瘦客户机推荐值)
读写方式:xfconf-query -c xfwm4 -p /general/名字。「远程推荐」用于降带宽和加速绘制;本机带独显、在意撕裂时不要全抄。
属性 | 远程推荐 | 作用 | 对带宽/速度 |
/general/use_compositing | false | 总开关。false=不走离屏合成 | 最大收益,立刻少一层全屏合成 |
/general/unredirect_overlays | true | 合成器仍开时,全屏窗口绕过合成 | 全屏视频/GL 少拷一次 |
/general/show_frame_shadow | false | 普通窗口阴影 | 拖动时脏区小一圈 |
/general/show_dock_shadow | false | 面板/dock 阴影 | 面板附近少半透明像素 |
/general/show_popup_shadow | false | 菜单、tooltip 阴影 | 菜单弹出更干净 |
/general/shadow_opacity | 0 | 阴影浓度 0–100 | 即使忘了关阴影也不发虚 |
/general/frame_opacity | 100 | 窗口边框不透明度 | 100=不透明,可矩形压缩 |
/general/inactive_opacity | 100 | 非活动窗口 | 避免失焦变半透明 |
/general/move_opacity | 100 | 移动窗口过程中 | 拖动时不要透视桌面 |
/general/resize_opacity | 100 | 缩放窗口过程中 | 同上 |
/general/popup_opacity | 100 | 弹出菜单 | 菜单不透底 |
/general/vblank_mode | off | auto / glx / xpresent / off | 远程不必等 vsync;需 xfwm4 --replace |
/general/zoom_desktop | false | Alt+滚轮桌面放大 | 少一个全屏缩放路径 |
/general/cycle_preview | false | Alt+Tab 缩略图 | 切窗口时少抓 pixmap |
/general/box_move | true | 移动时只画线框 | 拖动带宽断崖下降 |
/general/box_resize | true | 缩放时只画线框 | 同上 |
/general/horiz_scroll_opacity | false | 水平滚轮调透明度 | 防止误触半透明 |
5. 一条命令套装
在图形登录后的用户会话里执行(xfconf 按用户隔离)。root 改自己的会话改不到普通用户。没有 DISPLAY 时命令会失败。若某条命令提示属性不存在,说明该属性在你的 xfwm4.xml 里还没有,在命令末尾加 --create(-t 类型照写)即可。
# 总开关:关合成
xfconf-query -c xfwm4 -p /general/use_compositing -t bool -s false
# 阴影全关
xfconf-query -c xfwm4 -p /general/show_frame_shadow -t bool -s false
xfconf-query -c xfwm4 -p /general/show_dock_shadow -t bool -s false
xfconf-query -c xfwm4 -p /general/show_popup_shadow -t bool -s false
xfconf-query -c xfwm4 -p /general/shadow_opacity -t int -s 0
# 全部不透明(合成器万一又被打开也不发虚)
xfconf-query -c xfwm4 -p /general/frame_opacity -t int -s 100
xfconf-query -c xfwm4 -p /general/inactive_opacity -t int -s 100
xfconf-query -c xfwm4 -p /general/move_opacity -t int -s 100
xfconf-query -c xfwm4 -p /general/resize_opacity -t int -s 100
xfconf-query -c xfwm4 -p /general/popup_opacity -t int -s 100
# 线框移动/缩放;关掉桌面缩放和 Alt-Tab 预览
xfconf-query -c xfwm4 -p /general/box_move -t bool -s true
xfconf-query -c xfwm4 -p /general/box_resize -t bool -s true
xfconf-query -c xfwm4 -p /general/zoom_desktop -t bool -s false
xfconf-query -c xfwm4 -p /general/cycle_preview -t bool -s false
xfconf-query -c xfwm4 -p /general/horiz_scroll_opacity -t bool -s false
xfconf-query -c xfwm4 -p /general/unredirect_overlays -t bool -s true
# vsync 关掉(可能需要 --create),然后替换窗口管理器
xfconf-query -c xfwm4 -p /general/vblank_mode -t string -s off --create
xfwm4 --replace &
临时翻转合成器(适合绑快捷键,会议投屏卡顿时一键关特效):
xfconf-query -c xfwm4 -p /general/use_compositing -T
配套脚本:scripts/xfce-fast-display.sh 。加 --restore 可大致恢复本机观感默认。
6. 合成器必须留着时的折中
无边框透明终端、录屏、本机 Intel 卡靠合成器减撕裂时,不要关总开关,按下面砍特效:
1. 三颗阴影全 false,shadow_opacity=0。
2. 五种 opacity 全 100。
3. unredirect_overlays=true(全屏播放器/GL 不再被合成)。
4. vblank_mode=off,或按显卡试 xpresent(较新 AMD)/ glx(Intel)。远程优先 off。
5. cycle_preview=false,zoom_desktop=false。
不注销、只换 vblank 试手感:
xfwm4 --vblank=off --replace &
注意:use_compositing 多数版本热更新;vblank_mode 不会。必须 xfwm4 --replace &,不要在 tty 里 kill 掉 xfwm4 后不管,否则会丢掉窗口装饰。
7. 桌面、面板、GTK:合成器以外同样吃带宽
7.1 壁纸改纯色
大图壁纸一滚动、一露出桌面就要传整屏 JPEG。纯色几乎为零流量。图形界面:设置 → 桌面 → 样式选「无」,颜色选深灰或纯黑。
xfconf-query -c xfce4-desktop -l | grep -i image-style
# image-style 0=无图。多屏时属性路径可能是 monitorDP-1 等
xfconf-query -c xfce4-desktop -p /backdrop/screen0/monitor0/workspace0/image-style -s 0
7.2 面板不要透明
xfconf-query -c xfce4-panel -l | grep -i background
# background-style: 0=无(跟随主题) 1=纯色 2=背景图(没有“透明”这一档)
# 面板编号以上面 -l 输出为准,默认面板通常是 panel-1
xfconf-query -c xfce4-panel -p /panels/panel-1/background-style -t int -s 1
# XFCE 4.12:用 background-alpha(0-100)
xfconf-query -c xfce4-panel -p /panels/panel-1/background-alpha -t int -s 100
# XFCE 4.14 及以后:改用 background-rgba(R G B A,最后一项 1.0=不透明)
xfconf-query -c xfce4-panel -p /panels/panel-1/background-rgba -t double -t double -t double -t double -s 0.2 -s 0.2 -s 0.2 -s 1.0 --create
xfce4-panel -r
7.3 关掉 GTK 动画与提示音
xfconf-query -c xsettings -p /Net/EnableEventSounds -t bool -s false
xfconf-query -c xsettings -p /Net/EnableInputFeedbackSounds -t bool -s false
# GTK 动画:走 xsettings 通道(会覆盖 gtk-3.0/settings.ini 里的同名项)
xfconf-query -c xsettings -p /Gtk/EnableAnimations -t bool -s false --create
7.4 Thunar 缩略图
远程打开图片、视频多的目录时,缩略图会变成成百张小 JPEG。设置 → 文件管理器 → 显示 → 缩略图「从不」,或:
xfconf-query -c thunar -p /misc-thumbnail-mode -s THUNAR_THUMBNAIL_MODE_NEVER
8. 远程协议侧再砍一刀
通道 | 建议 |
Ftu/Xlink | 建议使用use_compositing=false |
TigerVNC / x11vnc | 色深 16 或 24;开 Tight/ZRLE;关高质量 JPEG。合成器关后 copyrect 才有用。 |
SPICE | 客户端勿滥用 jpeg wan;服务端 streaming-video=off,除非真在放视频。 |
XRDP | 用 xorgxrdp 而不是嵌套 VNC;max bpp=24。 |
X2Go | 无自定义壁纸 + 无合成;压缩方式选 jpeg/png 类(如 16m-jpeg、4k-png),质量选中档(约 4–6),不要选 0。 |
ssh -X / -Y | 合成器几乎无意义且极慢。务必 use_compositing=false;整桌面优先改用 VNC/SPICE。 |
显示尺寸也是线性成本:远程会话用 1280×720 或 1600×900,不要默认 4K。XFCE:设置 → 显示,或 xrandr --output … --mode 1600x900。
9. 怎么验证变快、变省
1. xfconf-query -c xfwm4 -p /general/use_compositing 应为 false。拖动窗口应出现线框(若开了 box_move),不应有阴影拖尾。
2. 拖动窗口时不应再出现阴影或半透明拖尾;这是最直观的判断。(不建议用 xprop -root 查 _NET_WM_CM_S0:它是 selection,不是 root 属性, xprop 查不到。)
3. VNC 中持续拖动大窗口,对比开关前后 iftop 或客户端统计。常见观感是从「发糊的 JPEG 瀑布」变成「整窗平移」。
4. top 里 xfwm4 在拖动时不应再占满一核;Xorg / Xtigervnc / spice 编码 CPU 应下降。
落地顺序:① 关合成器 → ② 线框拖动 → ③ 纯色桌面 → ④ 降低分辨率 → ⑤ 再调 VNC/SPICE/RDP 编码器。只做第 1 步,多数 VNC 会话已经能从「能用」变成「跟手」。
10. 还原、持久化、注意点
10.1 配置落在哪
用户级 xfconf:~/.config/xfce4/xfconf/xfce-perchannel-xml/xfwm4.xml。kickstart/ansible 应改这一份,或登录后跑脚本。改 /etc/xdg/xfce4/xfconf/… 只影响尚未有个人配置的新用户。
10.2 恢复本机观感
xfconf-query -c xfwm4 -p /general/use_compositing -s true
xfconf-query -c xfwm4 -p /general/show_frame_shadow -s true
xfconf-query -c xfwm4 -p /general/box_move -s false
xfconf-query -c xfwm4 -p /general/box_resize -s false
xfconf-query -c xfwm4 -p /general/vblank_mode -t string -s auto --create
xfwm4 --replace &
10.3 不要踩的坑
· 在 ssh 文本会话里改 xfconf:没有 DISPLAY 和会话 DBus 时会改空通道或失败。应带上 DISPLAY=:0 和 DBUS_SESSION_BUS_ADDRESS,或直接在桌面终端跑。
· XFCE 默认合成器就是 xfwm4,不是 picom。只有自己又装了独立 compositor 才需要停 picom。
· xfwm4 合成 + picom 同时开会花屏或吃双倍 GPU。远程两者都关。
· 本机游戏/浏览器视频撕裂是关 vsync 的代价。本机把 vblank_mode 改回 glx 或 auto;合成器可以开着但阴影关掉。
· Wayland:官方 XFCE 仍以 X11 为主。若发行版用 labwc/Wayland,这些 xfconf 项不适用。
最短记忆:远程 XFCE 四件事——use_compositing=false,box_move/box_resize=true,纯色桌面,分辨率不要 4K。参数表其余项是防止总开关又被设置向导打开时的保险。


网友留言: