采用拟物化设计的 Linux Wayland 桌面环境
摘要
DEsk 是一个为 Linux 打造的 Wayland 桌面环境,采用 iOS 6 式的写实拟物化设计:窗口是书桌上的纸张,Dock 是抽屉,应用收纳在书架上的活页夹里,整个房间经过光线追踪渲染。目前为 v0.1.2 beta 版,支持 Debian、Ubuntu、Arch 和 Fedora 一键安装。
查看缓存全文
缓存时间: 2026/10/15 16:12
fyzugx/DEsk
来源:https://github.com/fyzugx/DEsk
English | 日本語
DEsk
v0.1.2 (BETA) —— v0.1 是首个公开版本,包含修复以及一个适用于 Fedora 的安装脚本。详见 RELEASE-NOTES.md。
我建立了一个 Discord 服务器! 你也可以在这里报告 Bug 和提出新功能建议! 链接:https://discord.gg/xR5f7Xs49
DEsk 是 Desktop Environment 与 desk 合为一词 —— 这个名字来自 Reddit 社区。它以前叫 DeskWM:命令现在是
desk、desk-session、desk-settings等,而为 DeskWM 设置过的内容(其配置、数据、DESKWM_*变量)会自动沿用。
一个写实拟物化的 Linux Wayland 桌面 —— 就像 iOS 6 那样,屏幕上的一切都绘制得如同真实之物。在这里,桌面就是一张书桌。
窗口是胡桃木书桌上的纸张。Dock 是一个抽屉,你的应用归档在书桌后面的书架上的活页夹里,通知投递到信箱中,系统控制面板则是嵌入书桌背面的一块控制板。房间采用光线追踪渲染,由一盏台灯照亮一切。
状态:Beta 版。 DEsk 已在作者的机器上日常使用,并经过了仔细的检查(见 docs/ARCHITECTURE.md 第 9 节),但这是它的首次发布:请预期会有一些粗糙之处,也请预期会有变化。你的设置和数据将被保留并沿用。
安装
从 Releases 页面(https://github.com/fyzugx/DEsk/releases)下载最新版本并解压(或克隆此仓库)。然后在该文件夹中,运行适合你系统的命令:
Debian 13
sudo sh scripts/install_debian.sh
Ubuntu 24.04 / 26.04(以及 Linux Mint、Pop!_OS)
sudo sh scripts/install_ubuntu.sh
Arch Linux(以及 EndeavourOS、Manjaro)
sudo sh scripts/install_arch.sh
Fedora 43 / 44(以及 Nobara)
sudo sh scripts/install_fedora.sh
然后注销并在登录界面选择 DEsk。
- 安装脚本会先显示将要安装的内容并征求你的确认。
--yes采用建议的默认回答;--no-apps则仅安装 DEsk 本身而不安装推荐程序。 - 首次登录时会渲染房间一次:在 GPU 上需要几秒钟,没有 GPU 则需要更久。之后每次都能即时启动。
- 要更新,获取新版本并再次运行相同的命令即可。你的设置会被保留。
- 出了问题?参见报告问题。
更多选项、手动构建以及在窗口中运行 DEsk,请参见构建和运行。
桌面上有什么
这里没有任何东西是桌面上某样物品的“图标“。正如 iOS 6 的写实拟物化风格,每一样都被绘制得如同真实物品放置在那里 —— 有它的材质、光照、阴影和使用磨损的痕迹。
- 窗口就是纸。 每个窗口都放置在一张带有真实纸纤维、厚度和折角的米色纸张上。将鼠标悬停在折角上,纸角会翘起露出背面印着的内容:折叠(最小化:像信件一样折好放在桌上,和其他纸张一样压在窗口下面)、展开 / 重新折叠(最大化和还原),以及丢弃(关闭:揉成一团扔掉)。 拖动窗口边缘会从纸张背后抽出更多的纸来。
- 抽屉就是 Dock。 拉动黄铜把手(或按
Super+D)。里面存放你放入的东西:任何应用,或折叠好的窗口。开箱即用,它装着 DEsk 的标准程序(见下文)和一把打开 Shell 设置的螺丝刀。 - 书架存放你的应用(
Super+A,或 ALL APPS 招牌)。每个分类是一个活页夹,纸页从单个圆环处散开。取出一张纸,它会被带到桌面上,应用的窗口就在上面展开。在这一排的末尾立着一本 ALL APPS 索引册:从 A 到 Z 的所有程序,带有拇指标签和页面顶部的一行输入框(通过 IBus 的输入法可以使用)。 - 信箱就是通知中心(
Super+N)。信件显示发件人和主题,取出的信件会放在桌面上。 - 控制面板(
Super+C)是嵌入书桌背面的一台阀门时代的机器:真正的仪表、音量旋钮、网络和蓝牙拉杆、房间台灯的推子和屏幕自身背光的推子(在笔记本上通过 logind 控制;亮度快捷键也可以用)、一个解锁电源按钮的钥匙,以及作为纸片夹在下方的系统托盘(纸片多得放不下,滚轮可以滑动这一排)。 - 桌历、便签本和时钟立在搁板上。日历里有一本计划和待办事项的笔记本,便签撕下来贴在对应日期上。便签本同样被取下来书写(那里也能用 IBus);纸页沿着铁丝翻转。时钟在分钟旁边以小字显示秒数,在两个灯罩下面,当摄像头或麦克风在使用时灯才会亮起。
- 前门在外面的真实世界里。 锁屏上的门映射着当下时刻的光照 —— 根据你所在时区的城市计算的太阳位置,黄昏时门廊灯会亮起 —— 如果你允许它向 open-meteo.com 查询该城市的天气(只会发送经纬度),还会有天气效果:雨水打湿砖墙并从灯前划过,雪花积落在朝上的表面,雾气,闪电。在一年中某些特别的日子,门和时钟还会给你带来别的惊喜 —— 没有相关设置;它是什么,你到那天就会知道(在 Shell 设置中填写你的生日,那就是其中之一)。按 Esc 可以跳过。
- 光照。 房间(书桌、书架、控制台、信箱)在 GPU 上进行光线追踪(GLES 3),以 CPU 光线追踪器作为回退方案,并按屏幕尺寸缓存结果。叠加在其上的一切都由同一盏灯照亮。登录时房间从黑暗开始,随着房间被构建出来灯光逐渐亮起,时钟以发光的红色数字计数进度。
- 尺寸以点为单位。 更大的屏幕意味着更大的桌子,而不是更大的物品。
- 多屏幕。 桌面位于一块屏幕上;其他屏幕显示更多桌面木板的延伸部分,供窗口放置其上。新窗口出现在鼠标指针所在的屏幕上,展开和全屏填满窗口所在的屏幕,而桌面自身屏幕上的操作 —— 抽屉、转向书架 —— 不会移动其他屏幕上的内容或将它们移出可及范围。移除某块屏幕时,其上的窗口会被移到剩余的屏幕上。
- X11 应用通过 Xwayland 运行,自绘边框的窗口同样放置在纸张上。
- 屏幕锁就是前门(
Super+L或 logind):夜晚走近它,近到触手可及,以 3D 追踪渲染,有自己的灯光和柔和阴影。你的头像和名字挂在门上的牌子上,密码输入在黄铜面板上,钥匙在旁边;按回车(或点击钥匙)后你会凑近转动钥匙。如果放行,钥匙会转动,门打开,你穿门而入走到桌前坐下;如果拒绝,钥匙不会转。锁定则是同样的动作倒放 —— 离开房间,关上门,转动钥匙 —— 通过Super+L或控制面板上的蓝色 LOCK 按钮触发。与登录一样,使用 PAM 验证。 - 七种语言。 DEsk 自身显示的一切以及程序名称,均有英文、日文、简体中文、韩文、西班牙文、法文或德文:跟随系统 locale,或在
~/.config/desk/shell.conf(或 Shell 设置应用)中设置language = en | ja | zh | ko | es | fr | de,并且可以即时切换。日历按照实际销售的样式排版,中文和韩文使用 CJK 字体的专属切分版本。
标准程序
DEsk 旨在作为完整桌面环境安装,类似于 GNOME 或 KDE,因此为桌面上的每一项工作选择一个标准程序:终端、网页浏览器、文件管理器和文本编辑器。抽屉中的物品和 Super+Enter 会打开它们。对于每项工作,按以下优先级选择已安装的:
shell.conf中的app.terminal、app.browser、app.files、app.editor(一个.desktopid),- freedesktop.org 顺序的默认应用程序列表:
~/.config/desk-mimeapps.list(仅 DEsk 读取)、~/.config/mimeapps.list(Shell 设置的“默认程序“、xfce4-mime-settings 所写入),以及系统目录中同样位置的两个文件,最后是随 DEsk 安装的desk-mimeapps.list—— 与 xdg-open 和 GIO 给出的结果一致, - 标准套件,经典 GTK 程序优先:Xfce Terminal、Firefox ESR、Thunar、Mousepad(然后是 MATE Terminal、Caja、Pluma 等),
- 归档在正确分类下的任何程序。
导览
| 窗口翻起的折角,背面写着折叠、展开和丢弃 | 从书桌下拉出的抽屉,五件物品放在绿色毛毡上 |
| 每个窗口的折角:折叠、展开、丢弃。 | 抽屉:Dock。 |
| 一个窗口折成包裹放在桌面上 | 书架:八本活页夹、ALL APPS 索引册、日历、便签本、时钟和信箱 |
| 一个折叠好的窗口,压在其他窗口下面放在桌上。 | 书桌后面的书架。 |
| ALL APPS 索引册翻到 A 至 D | ALL APPS 索引册搜索 “term” |
| ALL APPS,从 A 到 Z 的每个程序…… | ……以及一个输入框。 |
| 控制面板:仪表、拉杆、音量旋钮和电源按键 | 打开的信箱,里面有信件 |
| 控制面板。 | 信箱:通知。 |
| 桌历翻到十月,旁边是它的便签活页夹 | Shell 设置,系统标签页:每一行标明它打开的程序 |
| 桌历和它的便签。 | Shell 设置。 |
文档
- docs/ARCHITECTURE.md —— DEsk 的构建方式:程序、合成器、光线追踪房间、线程、文件。
- docs/MODDING.md —— 修改 DEsk:文字与语言、设置、借用的程序、声音、房间、桌面上的物品。
- docs/CONFIGURATION.md —— 所有设置项、文件和环境变量。
- RELEASE-NOTES.md —— v0.1.2 的内容以及已知尚未正常工作的功能。
- docs/design.md —— 完整的开发日志(日文)。
作为桌面环境
DEsk 绘制桌面;在上面完成的工作由已有的自由软件完成。它通过借用达到完善,并在自己构建的内容与借用的内容之间保持严格的界限:
| DEsk 自建 | 双方协作:DEsk 绘制,其他程序负责工作 | 借用 | |
|---|---|---|---|
| 内容 | 绘制为房间并作为其物品处理的内容;只有合成器才能完成的内容 | 程序、系统设置面板、后台辅助程序 | |
| 示例 | 窗口即纸、抽屉、书架、时钟、控制面板、信箱、前门、日历和便签本;键盘、指针及其按键(含音量和媒体键)、屏幕及其电源管理、记忆屏幕排列、空闲状态、锁定;Shell 设置 | 音量旋钮和静音(PipeWire/PulseAudio)、亮度(logind)、Wi-Fi 和蓝牙拉杆、信箱(桌面本身是通知守护进程)、托盘的纸片(小程序自身的项目)、时钟的 MEDIA 页面(MPRIS)、截图(grim)、输入法(到 IBus 的桥接) | 网络连接、蓝牙设备、音频设备、显示排列、打印机、其他程序的外观、默认程序、磁盘、polkit 代理、密钥环、门户 —— 以及程序本身 |
新场景的规则:只构建那些被绘制为房间的一部分或只能在合成器内部完成的内容;否则寻找一个在 wlroot 合成器下无需修改即可工作的现有程序,实在找不到时才自己构建。KDE 的系统设置和 kcmshell(在 Plasma 之外无法工作)、Xfce 和 MATE 的仅限 X11 的对话框、以及 Xfce 的显示和外观对话框(需要 xfsettingsd,而 xfsettingsd 启动时会用 Xfce 默认值覆盖 GSettings)均不予使用。
sudo sh scripts/install_debian.sh # DEsk 及全部组件(install_ubuntu.sh、install_arch.sh、install_fedora.sh 同理)
sh scripts/install-desktop.sh # 仅安装程序(先列出,然后请求 sudo)
sh scripts/install-desktop.sh --extras # 加上办公套件、邮件等
install-desktop.sh 支持 apt、dnf、pacman 和 zypper。在 Debian 和 Ubuntu 上,同一组件集合也可以打包为一个包:equivs-build packaging/debian/desk-desktop.equivs。
| 用途 | 包含的程序 |
|---|---|
| 终端、文件、文本 | Xfce Terminal、Thunar(含 tumbler 和 thunar-volman)、Mousepad |
| 网页浏览 | Firefox(Debian 上为 Firefox ESR,Ubuntu 上为 snap 版) |
| 图片、文档、音乐和视频 | Ristretto、Atril、Parole |
| 工具 | Engrampa、GNOME Disks |
| 网络、蓝牙、音频 | NetworkManager 及其托盘小程序和编辑器、Blueman、PipeWire、pavucontrol |
| 显示器、外观、默认程序 | wdisplays、nwg-look(Ubuntu 24.04 和 Fedora 上为 GNOME Tweaks)、Xfce 的 MIME 设置 |
| 打印 | system-config-printer、CUPS |
| 通知 | udiskie(U 盘挂载,附带通知)、poweralertd(低电量;Arch 上为 batsignal;Fedora 上无)、package-update-indicator(更新提醒;Debian 和 Ubuntu) |
| 系统维护 | QDirStat(磁盘使用情况)、LXQt 的日期时间及用户管理、Mugshot(姓名和头像)、Seahorse(密码和密钥)、gnome-packagekit(安装和卸载程序)、Back In Time(备份)、Xfce Task Manager、hardinfo2(关于本计算机);Arch 上另有 baobab 和 Deja Dup;Fedora 上无 Mugshot |
| 密码 | MATE 的 polkit 代理、GNOME Keyring |
| 底层组件 | xdg-desktop-portal(wlr、gtk)、Xwayland、xdg-user-dirs、xdg-utils、wl-clipboard、grim、curl |
| 外观 | Qt 的 GTK 平台主题,使 Qt 程序与 GTK 程序风格一致 |
| 输入和字体 | IBus(日语用 Mozc)、Noto(CJK、emoji)、URW base 35、Klee One(Arch 和 Fedora 上无此字体) |
--extras | LibreOffice(GTK 绘制)、Thunderbird、Galculator、Xfce Task Manager、Simple Scan |
Xfce 和 MATE 的经典 GTK 程序排在前面,因为桌面的纸张就是为这种窗口裁剪的 —— 菜单栏、简洁工具栏和文档内容 —— 而且它们轻量、启动迅速、原生运行在 Wayland 上。GTK 3 通过 KDE 的 server-decoration 协议向合成器请求边框,因此它们带着 DEsk 纸张上印刷的标题栏躺着,没有 GTK 的标题栏。带有 header bar 的窗口(GNOME 程序、Firefox)则保留自己的边框,被纸张边距包围。
Shell 设置(desk-settings)在 Shell 标签页中管理 DEsk 自身的设置 —— 窗口、物品大小、绘制细节、语言、时钟、你的生日和天气、屏幕何时熄灭以及届时是否锁定桌面 —— 在 System 标签页中则是打开借用程序的各行(网络、蓝牙、音频、显示器、打印机、其他程序的外观、默认程序、磁盘、磁盘使用情况、色彩配置、输入法、日期和时间、你的姓名和头像、用户、密码和密钥、安装和卸载程序、备份、计算机正在做什么、以及体验指数),经典外观的程序排在最前面,每一行都带有程序自己的图标和名称 —— “Displays (wdisplays)” —— 让你清楚是什么程序负责该设置。如果某行对应的程序未安装,该行会以浅色显示,并注明该发行版名称下需要安装的包。两个标签页像文件夹的索引标签一样放在纸页上,每个口袋里是一本线圈装订的笔记本,表单的每个部分各占一页,每页边缘贴有一张便签;按住便签会沿着铁丝翻页到对应页面,就像桌历一样(Page Up 和 Down 也可用)。切换标签页(点击、Ctrl+Tab 或 Ctrl+Page Up/Down)会从下方将另一本笔记本从文件夹中抽上来,窗口打开时笔记本也以同样的方式升起。
以会话方式启动(desk-session,从登录界面选择),DEsk 会向 D-Bus 和 systemd 报告自己的显示服务器位置,运行 XDG autostart 条目(跳过那些会与它冲突的条目,例如 another
相似文章
在Wayland上追求永恒的停靠 - lambdock (C + GTK4 + Lisp GNU Guile Scheme)
lambdock是一款原生支持Wayland的、可修改的桌面停靠应用,使用C、GTK4和GNU Guile Scheme构建,具有流畅的物理动画和运行时REPL控制。
在Minecraft中作为模组实现的Wayland合成器
一个在游戏内实现了功能完整的Wayland合成器的Minecraft模组,允许用户在Minecraft世界中运行和管理应用程序。仅支持Linux。
@wsl8297: 逛 GitHub 时挖到一个狠角色:niri。它直接绕开传统桌面“窗口一多就被挤变形”的老毛病,把窗口管理方式彻底重做了一遍。 niri 采用可滚动的平铺思路:窗口按列铺在一条“无限延伸”的水平条带上。你开新窗口,不会强行压缩现有窗口;多…
文章介绍了开源项目 niri,这是一款基于 Wayland 的新型桌面合成器,通过可滚动平铺布局避免传统窗口拥挤问题,并支持动态工作区、多显示器独立管理及自定义着色器动画等特性。
KiwiDesk
KiwiDesk 是一款免费、开源的 macOS 平铺窗口管理器,提供可自定义的布局、键盘快捷键和与原生桌面的集成。
RustDesk 现已支持 Wayland 上的真正无人值守远程访问
RustDesk 现已支持 Wayland 上的真正无人值守远程访问,实现了多显示器设置并可从登录屏幕访问,同时提供了基于 x86_64 的 Debian/Ubuntu 系统预览版。