先说结论,ICEWM是那种你装完就可以完全不碰鼠标的窗口管理器。不是那种“看上去很酷但跑起来一堆依赖”的玩具,也不像i3那样需要学习一套全新的平铺思维。ICEWM属于经典的浮动式窗口管理器,继承了老式Unix工作站的交互逻辑:右键菜单出程序,任务栏管窗口,快捷键切虚拟桌面,配置全部写在纯文本文件里。我个人的体会是,它非常适合那些喜欢“配置即代码”、不想要桌面环境绑架自己操作习惯的人,也适合老机器、远程服务器、嵌入式环境这类需要极致轻量的场景。
这篇文章就围绕“ICEWM桌面配置”这条主线,从配置文件结构讲起,把菜单定制、快捷键、状态栏、虚拟桌面、启动组件这些核心环节全部过一遍,加上我实际配置过程中踩过的一些坑。如果你想搭一个干净、稳定、肉眼可见的流畅桌面,而且不希望系统里塞满用不到的图形化设置面板,这篇文章应该能帮你节省不少试错时间。
1. 为什么在满大街GNOME和KDE的时代,还要选ICEWM
先梳理一下定位。ICEWM是一个X11下的窗口管理器,不是完整的桌面环境。它不管登录界面、不管网络管理、不管电源管理,只管窗口的摆放、装饰、任务栏、虚拟桌面和菜单。这种“小而专”的定位,和GNOME那种全家桶式体验完全是两种路线。
我最早接触ICEWM是在某台只有1GB内存的上网本上。装完GNOME之后,系统光启动就要吃掉大半内存,开个浏览器都能听到风扇狂转。后来换成ICEWM,内存占用直接掉到200MB以内,整个系统从冷启动到出现桌面大概只要几秒钟。那种“系统终于听我指挥”的轻快感,是我坚持用下去的直接原因。
当然,轻量只是其中一个维度。ICEWM还有几个特性在同类WM里比较少见:
- 配置完全文本化,所有偏好、菜单、快捷键都写在
~/.icewm目录下的若干文件里,可以像代码一样纳入版本管理,换机器直接拷贝迁移。 - 内置任务栏和系统托盘,不需要额外装面板软件。这一点比很多纯WM省事,因为开箱就有一个能看、能点的底部条。
- 虚拟桌面功能扎实,最多可以定义二十个工作区,还能给每个工作区单独命名、单独设置壁纸。
- 支持全局快捷键、鼠标修饰键、窗口分组、窗口锁定、自动启动等一系列实用功能。
- 启动组件配置非常直观,
startup和shutdown文件在会话启动、退出时执行,想挂载网络盘、启动输入法、克隆主窗口,往里写命令就行。
所以ICEWM的目标用户画像其实挺清晰的:喜欢控制每个细节、愿意读文档、追求效率的Linux用户。如果你属于那种“桌面环境里的设置选项根本不够用”的类型,ICEWM大概率会让你舒服。反过来,如果你希望开箱即用、不想折腾配置文件,那它可能不太适合。
我自己的使用场景是主力办公机加远程开发机。主力机用ICEWM搭配一个轻量终端和浏览器,日常写文档、写代码、查资料完全够用。远程机器上跑OpenSSH和ICEWM,通过X11转发跑图形程序,延迟很小,画面也不闪烁。这两个场景都验证了“越简单越可靠”这个朴素的道理。
2. 配置文件体系与目录结构,这是整个配置的地基
ICEWM的所有配置都围绕~/.icewm目录展开。第一次启动时系统会在/usr/share/icewm下面放一份全局默认配置,理论上不拷贝也能用,但实际操作中我强烈建议你先把全局配置里的几个文件复制到自己的用户目录,因为后面改配置、调菜单都要基于这份可写的副本。
需要拷贝的文件主要是这六个:
| 文件 | 作用 |
|---|---|
preferences | 核心偏好,所有开关和参数都在这里 |
menu | 右键菜单和开始菜单的完整定义 |
programs | 自动扫描安装应用的菜单入口 |
toolbar | 任务栏左侧快捷启动按钮的定义 |
winoptions | 针对特定窗口的规则,比如强制置顶、隐藏标题栏 |
keys | 全局快捷键绑定 |
拷贝命令很简单:
mkdir -p ~/.icewm cp /usr/share/icewm/preferences ~/.icewm/ cp /usr/share/icewm/menu ~/.icewm/ cp /usr/share/icewm/programs ~/.icewm/ cp /usr/share/icewm/toolbar ~/.icewm/ cp /usr/share/icewm/winoptions ~/.icewm/ cp /usr/share/icewm/keys ~/.icewm/这里有个细节:~/.icewm目录不一定在第一启动后就存在。如果你是用某个发行版的包管理器装的ICEWM,还是先手动建目录更稳妥。另外,如果系统里没有/usr/share/icewm这个全局配置目录,可以用find / -name "preferences" -path "*icewm*" 2>/dev/null找一下,部分发行版会把它放在/etc/icewm下。
配置文件的语法非常简单,核心是Key=Value的键值对方式。值可以是数字、字符串、布尔值,也支持注释,注释行以#开头。这个语法相当贴近人类阅读习惯,不像某些配置还要学一个专门的DSL。
拿preferences文件举例,最常见的几个参数如下:
# 工作区数量 WorkspaceNames="1 办公, 2 开发, 3 终端, 4 网络" # 启用鼠标滚轮切换工作区 WorkspaceSwitchByWheel=1 # 让新窗口自动获得焦点 FocusOnAppRaise=1 # 点击任务栏时同时反色显示未激活窗口 TaskBarClick Raises=1 # 任务栏自动隐藏 TaskBarAutoHide=0 # 显示系统托盘 TrayShowTaskBar=1我前几次配置的时候,每次改完都重启ICEWM,比较麻烦。后来发现一个更快的调试方式:改完文件后,直接右键菜单里点“重启ICEWM”,或者用快捷键Ctrl+Alt+Shift+Escape,都会重新加载配置文件。而且如果你只是改了菜单文件,甚至不需要重启,右键菜单里有个“重新读取菜单”或者Ctrl+Alt+Shift+M就能刷新,这个细节在后面调试时非常有用。
理解这套配置文件的组织逻辑之后,后续所有定制都变得有章可循:偏好类配置进preferences,菜单进menu,快捷键进keys,窗口行为进winoptions。只要记住这个分工,ICEWM的配置其实没有想象中那么复杂。
3. 核心细节解析与实操要点
3.1 菜单定制,右键菜单到底怎么增加自定义条目
ICEWM的菜单即使在没有桌面环境的状态下也承担着启动器的职责。菜单文件是一个树形定义,用花括号包住子菜单,每一行的基本格式是:
menu 名称 { ... } prog 显示名 图标名 程序命令我自己的菜单里放了一批高频应用,比如终端、浏览器、文件管理器。示例片段如下:
menu 网络应用 { prog "Firefox" firefox firefox prog "文件传输" filezilla FileZilla } prog "终端" terminal x-terminal-emulator prog "文本编辑器" editor gvim prog "文件管理器" file-manager pcmanfm其中prog后面的第一个双引号是菜单里显示的名字,第二个是图标名,第三个是要执行的命令。如果没有合适的图标,可以留空,写成prog "终端" "" x-terminal-emulator。
菜单定制有几个容易忽略的细节:
- 中文显示名没有必要非用英文,直接用中文也可以,只要文件编码是UTF-8。
- 命令部分必须写可执行文件的完整路径,或者确保它在
PATH环境变量里。建议写完整路径,更稳妥。 - 子菜单可以嵌套任意深度,我自己的习惯是浅一层就好,太深了在右键菜单里反而难找。
- 菜单文件改完需要在菜单里触“重新读取菜单”,否则不会自动生效。
其实ICEWM还有一个默认菜单文件,/usr/share/icewm/menu,它通常包含一个programs的自动生成入口,只要安装了新软件,这个入口会自动刷新出应用列表。我建议保留它,作为一种补充手段。当你忘记把自己的应用写进自定义菜单时,至少还能通过这个入口找到它。
3.2 快捷键配置,把高频操作都收归键盘
ICEWM的快捷键绑定写在keys文件里。这个文件的语法比菜单文件稍微讲究一点,因为它涉及多个按键的组合。
先说一下按键修饰符的写法:Mod4是Windows键,Ctrl、Alt、Shift都好理解,Mod1一般对应Alt。组合键用字母或符号连接,例如Ctrl+Alt+Delete。
一个实用的示例片段:
key "Ctrl+Alt+Delete" Restart key "Ctrl+Alt+Escape" Quit key "Ctrl+Alt+BackSpace" Restart key "Ctrl+Alt+KP_Add" WorkspaceNext key "Ctrl+Alt+KP_Subtract" WorkspacePrev key "Ctrl+Alt+1" Workspace1 key "Ctrl+Alt+2" Workspace2 key "Ctrl+Alt+3" Workspace3 key "Ctrl+Alt+4" Workspace4我后来把工作区切换改成了只用右侧的Alt加数字键,因为左手可以保持在主键盘区,右手快速按数字,效率高一些。写法就是:
key "Mod1+Right" WorkspaceNext key "Mod1+Left" WorkspacePrev key "Mod1+1" Workspace1 key "Mod1+2" Workspace2这里需要多说一句,ICEWM自带文档里列了很多内置动作,都能绑定到快捷键上,包括窗口阴影、全屏、置顶、移动、拉伸、切到下一窗口、启动终端、锁定屏幕等等。查看完整清单可以用man icewm-keys,或者直接翻全局keys文件,里面注释写得非常全。
我自己使用频率最高的快捷键其实不是切换工作区,而是“最小化所有窗口”和“显示桌面”。这两个动作在ICEWM里的写法是:
key "Mod4+d" ShowDesktop key "Mod4+Shift+d" MinimizeAll这个在开会或者临时要截屏时非常方便,一键清屏。
安装完ICEWM后,如果你发现某些快捷键没有生效,不要急着怀疑配置。很多登录管理器会自己占用一部分组合键,比如Ctrl+Alt+F1切终端,Ctrl+Alt+T可能是某个图形环境预置的。建议先用xev或wev查看按键事件是否被上层截走。我在某发行版上就遇到过Mod4+d被系统设置里的“显示桌面”抢走的情况,排查了半天才发现是桌面环境自带的快捷键服务在作怪。
3.3 状态栏与任务栏,信息密度比想象中高
ICEWM的底边任务栏默认显示:当前工作区名称、所有已打开窗口的任务按钮、系统托盘、时钟。这些元素都可以在preferences里精确控制。
我比较看重的几个配置项是:
# 显示时钟还是隐藏 TaskBarClock=1 # 时钟格式,遵守strftime语法 TimeFormat="%H:%M" # 显示工作区列表 TaskBarShowWorkspaces=1 # 对每个窗口显示图标 TaskBarShowWindows=1 # 窗口按钮不显示标题,只显示图标 TaskBarShowWindowList=0 # 自动隐藏任务栏,鼠标靠近再弹出 TaskBarAutoHide=0如果你希望任务栏里多显示一些系统信息,其实ICEWM本身并不负责CPU或内存监控,它只显示跟窗口管理相关的信息。想要CPU、内存、网络流量、天气这些东西,通常用外部工具配合实现,比如conky可以在桌面显示,dzen2或polybar可以嵌入到任务栏附近,也可以把信息打印到状态栏右侧的时钟那里,配合一个定时刷新的脚本。
具体做法是,在preferences里把时钟格式改成一个特殊命令的回显:
# 原来的TimeFormat放弃,改用脚本输出 TimeFormat="" ClockCommand="~/.icewm/scripts/statusline.sh"然后在statusline.sh脚本里输出一行包含时间、负载、温度、内存的文本。脚本内容大致是:
#!/bin/bash while true; do mem=$(free -m | awk '/Mem:/{print $3"MB"}') cpu=$(top -bn1 | grep "Cpu(s)" | awk '{print $2"%"}') echo "$cpu $mem $(date '+%H:%M')" sleep 2 doneICEWM会从这个脚本不断读取输出,更新状态栏。这个方案比装一整条桌面环境自带的监控面板轻量得多,而且想要什么信息都可以自己加,非常灵活。
3.4 虚拟桌面与工作区,多任务场景下的核心武器
ICEWM的虚拟桌面配置分两块:一块是数量与命名,在preferences里设置;另一块是窗口如何与工作区交互,也在preferences里调节。
配置工作区数量的常用写法是:
Workspaces=6 WorkspaceNames="1 办公, 2 开发, 3 终端, 4 网络, 5 娱乐, 6 临时"命名的作用不只是美观。当你点击任务栏上的工作区名称时,会直接切换过去;在某些窗口管理器里支持按名字跳到指定工作区,ICEWM的快捷键也可以绑定到WorkspaceN上,这里的N是数字序号。
窗口与工作区的交互,我觉得最重要的参数是这两个:
# 新开的窗口自动分配到当前工作区 NewWindowAtCurrentWorkspace=1 # 切到某工作区时,其他工作区的窗口不要弹出来 HideInactiveWorkspaceWindows=1第二个参数配合窗口最大化使用时尤其关键。不然你在工作区1最大化了一个终端,切到工作区2时,那个终端还是会悬浮出来挡视线。
工作区之间移动窗口的快捷键也很常用:
key "Mod4+Shift+Right" MoveWorkspaceNext key "Mod4+Shift+Left" MoveWorkspacePrev key "Mod4+Shift+1" MoveToWorkspace1 key "Mod4+Shift+2" MoveToWorkspace2这样组合下来,整个工作流非常顺畅:在工作区1写代码,工作区2开浏览器查文档,工作区3放数据库和服务器日志。窗口的归属和切换完全由键盘控制,鼠标只在编辑和选择文本时使用。
4. 实操过程与核心环节实现
4.1 从零开始的完整配置脚本
纸上谈兵再多,不如直接给一份我自己的配置骨架。下面的内容是从我的~/.icewm/preferences里抽取出来的一小部分,去掉了机器相关的个性化设置,保留了基本够用的框架。
# 工作区 Workspaces=4 WorkspaceNames="1 主屏, 2 代码, 3 网络, 4 日志" WorkspaceSwitchByWheel=1 WorkspaceSwitchByClick=1 # 焦点模式 ClickToFocus=0 FocusOnAppRaise=1 FocusChangesWorkspace=1 # 窗口装饰 ShowTitleBar=1 ShowTaskBar=1 TitleBarHeight=24 # 自动隐藏任务栏 TaskBarAutoHide=0 TaskBarShowWorkspaces=1 TaskBarShowAllWindows=1 TaskBarClock=1 TimeFormat="%Y-%m-%d %H:%M" # 最小化动画,0为关闭 MinimizeAnimation=1 # 系统托盘 TrayShowTaskBar=1 # 平滑字体,不开也行 UseMouseWheel=1这份配置的特点是保持基本功能全开,视觉上不过度装饰。你要是想更极简,可以把TitleBarHeight=24改成TitleBarHeight=0,再配合窗口分组功能,效果很接近无装饰的平铺感觉,但仍然是浮动管理,符合ICEWM的原生思维。
写完之后,重启ICEWM即可:icewm -restart,或者右键菜单里选“重启ICEWM”。
4.2 一个可直接复现的最小菜单配置
接下来给一份最小菜单配置。它不是最全的,但胜在结构干净,适合刚上手时用来理解语法。
menu "办公" { prog "浏览器" firefox firefox prog "终端" terminal x-terminal-emulator prog "文件管理器" file-manager pcmanfm } prog "编辑器" editor gvim prog "系统监视器" monitor xfce4-taskmanager separator menus这里最后一行menus会生成子菜单的自动汇总入口,它引用programs文件里的自动添加项。可以理解成系统把安装在/usr/share/applications里的应用图标都自动汇总到了这个入口。如果你安装了一个新软件,菜单里还没有,按Ctrl+Alt+Shift+M刷新一下就能看到。
分离线separator会把菜单内容上下分开,视觉上更清晰。
4.3 启动组件配置,让会话带上你习惯的环境
ICEWM的启动与退出通过~/.icewm/startup和~/.icewm/shutdown实现。这两个文件本质上是shell脚本,需要有可执行权限。
startup文件里通常写上需要随桌面启动的程序:
#!/bin/sh # 启动壁纸设置 feh --bg-scale /home/用户名/Pictures/wallpaper.jpg & # 启动状态栏脚本 ~/.icewm/scripts/statusline.sh & # 启动网络管理 nm-applet & # 启动输入法 fcitx5 & # 启动剪贴板管理 copyq &写完记得加执行权限:
chmod +x ~/.icewm/startup ~/.icewm/shutdownshutdown文件则用于退出时清理。比如如果你启动了一个自己的托盘脚本,退出时应该让它一并结束:
#!/bin/sh pkill -f statusline.sh pkill -f copyq这里有一个很实用的细节:如果想让某个程序只在特定工作区启动,可以配合wmctrl来实现。比如在startup里写:
sleep 2 && wmctrl -s 2 && x-terminal-emulator &这条命令会先等桌面完全起来,再切到工作区2,然后打开一个终端。虽然是笨办法,但实测稳定,比指望WM提供“指定工作区启动”功能靠谱得多。
4.4 主题与外观调整的进阶玩法
ICEWM的外观通常由~/.icewm/theme文件指定,一行写法就行:
Theme="icewm/default.theme"系统自带了一些主题,位于/usr/share/icewm/themes目录。你还可以从网上下载第三方主题,解压后放到~/.icewm/themes目录,然后在theme文件里引用即可。
不过我想多说一句:ICEWM的主题调整的是窗口标题栏、任务栏、菜单边框的颜色与图案,不负责字体渲染和应用界面。中文字体显示的清晰度由系统的字体配置决定。如果你发现菜单里中文发虚或者字体太小,可以在preferences里强行指定字体:
Font="Sans Serif 10" MenuFont="Sans Serif 11" TitleFont="Sans Serif Bold 11"这个配置在低分辨率屏幕和老电脑上尤其值得调一调,因为默认字体在部分环境里渲染出来比较单薄,调大一号看得舒服很多。
调整主题时最省事的办法是先备份系统默认主题,然后用icewm -theme测试不同主题效果。测试时可以保持theme文件引用错误也不怕,ICEWM会回退到默认主题而不会崩溃,这个设计很贴心。
5. 常见问题与排查技巧实录
5.1 菜单和状态栏中文乱码
遇到中文乱码,先检查文件编码。menu文件必须保存为UTF-8,不要用GBK。用编辑器打开时如果右下角显示“UTF-8”,基本没问题;如果显示“GB2312”或“ANSI”,转换一下再保存。保存之后重新读取菜单,乱码通常会消失。
如果菜单已经是UTF-8,但页面显示方块,那就是系统缺中文字体。安装一个开源的文泉驿正黑,或者源里带的中文字体包,再重新读取菜单,问题基本解决。
5.2 快捷键没反应或冲突
快捷键不生效我遇过三种情况:
- 被登录管理器或桌面环境抢占,需要用
xev观察事件是否被吞掉。 - 按键符号写错,比如
Ctrl+Alt+F1里的F1实际是F1而不是KP_F1,数字小键盘要写成KP_1。 - 与ICEWM自身的功能冲突,比如你给
Mod4+d绑定了显示桌面,但某些窗口夺走了焦点事件,导致没响应。
排查快捷键有没有被识别,最好用的命令是xev,启动后按组合键,看events窗口有没有打印KeyPress事件。如果连xev都没收到事件,肯定是上层拦截了,不是ICEWM的问题。
5.3 修改配置后没变化
ICEWM有些配置修改后需要完整重启才生效,比如preferences里的字体、工作区名称这类。菜单文件和快捷键文件则支持热重载,不需要重启。两者区别要记清,免得以为配置写错了。
我自己的习惯是:改preferences里跟外观、工作区相关的先icewm -restart,改keys和menu后先试试热重载,热重载不行再重启。反正ICEWM重启非常快,最多一两秒。
5.4 桌面卡顿或窗口闪烁
ICEWM本身非常轻量,如果你发现卡顿,瓶颈通常在别处:显卡驱动缺失、外部工具脚本刷太快、组合器没配或配错。最常见的两个坑是:
conky刷新间隔设得太短,比如每秒刷新两次,在低端机器上会明显拖累性能。- 没有启用正确合成器,导致菜单弹出一瞬间闪烁。安装
picom并且在startup里加一行picom &,闪动问题通常就消失了。注意如果你的显卡驱动是闭源老驱动,可能需要额外配置backend。
另外,如果你用的是某些特别老的硬件,关掉动画能显著提升流畅度:
MinimizeAnimation=0 MenuAnimation=0这个配置对性能敏感的老机器帮助很大,肉眼几乎看不出差别,但窗口映射和菜单弹出的速度感会好很多。
5.5 窗口无法移动到期望的工作区
这个多半是快捷键配置写法问题。移动窗口到指定工作区要用MoveToWorkspaceN,而不是WorkspaceN。前者是把当前窗口移动过去,后者是本身切换工作区。这两个动作初始理解时特别容易混淆,我最早就是把MoveToWorkspace写成了Workspace,导致窗口一直没动。
还有一种情况是窗口被某个规则锁定了。检查winoptions文件,看是否对某个窗口设置了workspace固定属性,比如写死了Firefox.workspace=2,那它就会一直出现在工作区2,你手动移走又会弹回来。
5.6 设置好的壁纸一重启就丢失
这是最常见的启动顺序问题。如果你把壁纸设置命令写在了startup文件里,但startup文件没有可执行权限,或者命令路径不对,ICEWM不会报错,只会安静地跳过。排查方式很简单:
bash -x ~/.icewm/startup手动执行一次,能看到每一行命令是否执行成功。在手动执行之前,先确认feh或swaybg已经装了。另外注意,startup文件里内容必须是绝对路径,不能依赖PATH因为桌面启动时的环境变量未必完整。
5.7 远程连接时ICEWM窗口无法打开
如果你和我一样用X11转发让远程机器上的图形程序显示到本地,ICEWM本身是可以工作的。常见失败情况有两种:
一是远程端没有正确设置DISPLAY环境变量。SSH登录后手动验证一下,输出echo $DISPLAY,如果不是localhost:10.0这类值,说明X11转发没生效。
二是启动的窗口管理器没有接管会话。这通常发生在你用ssh -X远程启动一个图形会话,但没有显式运行icewm,而是直接执行了某个程序,结果程序没有窗口管理器可用。解决办法是在远程端启动会话时先起ICEWM,再启动应用。
icewm & export DISPLAY=localhost:10.0 your-gui-app不过说实话,远程场景下如果要追求流畅,我自己现在更推荐直接用X转发跑单个应用,而不是带着一台完整ICEWM桌面过去。ICEWM只是恰好能支撑这种玩法,但不是它最合适的使用方式。
6. 我踩过的几个关键坑,提前替你们趟平
这里再集中写几个零散的坑,都是常规文档里不太会提到的。
6.1 使用默认配置启动时,任务栏不显示托盘图标
如果你在startup里启动了nm-applet或其他托盘程序,但托盘区一片空白,先检查preferences里的TrayShowTaskBar=1是否开启。ICEWM对托盘的最大数量还有限制,如果托盘程序太多,超出部分不显示。这个数值叫TrayMaxImageSize,默认好像是264,如果数量真的很多,可以适当调大。
然后要说一个容易被忽略的点:很多托盘程序依赖一个叫StatusNotifier的服务,如果你的系统没有启动任何AppIndicator支持模块,有些新式托盘程序会静默退出。最典型的例子是某些用libappindicator编译的Telegram或Discord客户端。解决办法是装一个轻量的AppIndicator支持包,然后在startup里启动它。
6.2 自动重启陷于无限循环
我的一个错误操作是在startup文件里写了icewm -restart,结果会话启动后在启动脚本里又触发了一次重启,理论上会形成循环。实际表现就是桌面出现又消失,看起来像在闪屏。
现在我的规矩是:startup里绝对不写任何会触发窗口管理器重启的命令。即使是需要重读配置的情况,也优先用菜单操作,不用脚本去调。这个原则我建议你们也遵守,避免那种很难排查的启动循环。
6.3 双屏扩展麻烦不小
ICEWM支持多显示器,但它不做显示器布局管理。它的逻辑是:所有显示器共享同一个根窗口,工作区跨越所有屏幕,窗口可以跨屏拖拽。如果你需要不同的分辨率、刷新率、旋转,必须在进入ICEWM之前用xrandr设置好。
我自己的做法是在startup里写一段xrandr命令,按需设置主屏幕和副屏的摆放位置:
xrandr --output eDP-1 --primary --mode 1920x1080 --pos 0x0 xrandr --output HDMI-1 --mode 2560x1440 --right-of eDP-1这个命令每次开机都会执行,虽然简单但稳定。需要注意的是,不同硬件上显示器名称不一样,先运行xrandr --query确认名字再写进脚本。
6.4 登录管理器与ICEWM的配合
如果你使用显示管理器(GDM/SDDM/LightDM)启动ICEWM,需要创建一个会话入口文件,通常放在/usr/share/xsessions/icewm.desktop,内容大致为:
[Desktop Entry] Name=ICEWM Comment=轻量级X窗口管理器 Exec=icewm Type=Application如果你所在的发行版已经打包好了这个文件,登录界面就能直接选择ICEWM作为会话。没有的话就自己加一个,很简单的文本文件。
需要注意的是,如果在startup里还要启动面板或输入法,必须确认它们与登录管理器没有冲突,尤其是输入法。某些登录管理器会自动启动输入法,你又在startup启动一次,会造成两个输入法实例打架,表现是打字候选框出不来。建议先在startup里注释掉输入法启动,确认登录管理器没有接管后再启用。
6.5 保留一个User Guide的备份
最后说一个工作理念层面的建议:把/usr/share/icewm里的所有文档和示例都保留着,不要手贱清理掉。这些文件是排查问题和学习参数的第一手资料。man icewm、man icewm-keys、man icewm-preferences这些手册页也值得完整读一遍。
我后来把自己常用的配置和说明整理成了一篇笔记,存在本地,换新机器时直接从笔记里拷贝命令,比上网搜配置片段快得多。这其实也是配置类工具最核心的玩法:一切尽在掌握,系统跟着自己的习惯走。
ICEWM桌面配置这件事,说简单确实简单,无非是几个文本文件来回调;说复杂也复杂,毕竟窗口管理器直接决定了你每天好几个小时的操作手感。我的经验是别一上来就追求花哨,先把最基本的菜单、快捷键、工作区跑通,再用一周时间去适应它,之后缺什么补什么,进化成自己的趁手工具。适应之后再回头看,你就会明白为什么有人愿意守着这个旧派但优雅的窗口管理器,一直用下去。