Skip to content
Go back

从 Gnome 到 COSMIC 桌面

什么是 COSMIC

COSMIC 桌面是 System76 专门为 Pop!_OS 开发的新一代桌面环境,使用 Rust 编写,原生支持平铺窗口管理,这正好符合我的需求。

  • 原生平铺支持:内置了强大的平铺窗口管理器,不需要任何插件
  • 高性能:使用 Rust 编写,性能优秀且内存安全
  • 现代化设计:界面简洁美观,符合现代审美

为什么切换?

我很喜欢平铺桌面 + 完整的桌面环境(非 i3 / sway),但是 Gnome 目前只提供了完整的桌面环境,如果想使用平铺桌面需要使用插件 + 自定义快捷键的方式,而 COSMIC 平铺是桌面自带支持,正好尝个鲜 (截至 2024-10-31,COMSIC 还在 Beta 阶段)

Fedora 上安装 COSMIC

Fedora 已经提供了 Spins 可以直接使用,如果你想要全新安装直接去官网下载即可

我相信绝大多数人不是直接的全新安装,Fedora 的桌面可以随意切换和安装多个,下面我们安装 COMSIC
首先查看可用的桌面环境组:

sudo dnf group list | grep desktop
kde-desktop                 KDE                                                no
budgie-desktop              Budgie                                             no
budgie-desktop-apps         Budgie Desktop Applications                        no
cosmic-desktop              COSMIC Desktop                                    yes
cosmic-desktop-apps         COSMIC Desktop Supplementary Applications          no
desktop-accessibility       Desktop accessibility                             yes

可以看到 cosmic-desktop 已经可用。接下来安装COSMIC桌面:

cosmic-desktop-apps 指的是桌面环境附带的应用,例如文件管理器,播放器之类的,建议安装,但不是必须

sudo dnf group install cosmic-desktop cosmic-desktop-apps

切换到 COSMIC 桌面

安装完成后,注销当前会话,在登录界面的右下角选择 COSMIC 桌面环境即可。

Gnome配置(保留,如果哪天我还想使用Gnome的话下面很有用)

Gnome 模拟平铺

  1. 安装支持平铺的插件(Tilling Shell),当然如果你像我一样一个工作空间只显示一个应用也可以不安装
  2. 使用自定义快捷键来模拟切换和移动工作空间
// 在你的配置下加上这两个指令 ~/.zshrc 或者 ~/.bash_profile
alias movewk='wmctrl -r :ACTIVE: -t'
alias switchwk='wmctrl -s'

然后绑定自定义快捷键进行模拟,设置->键盘->查看及自定义快捷键->自定义快捷键,然后定义下面的命令即可,你使用多少个工作空间一般定义多少个

// 切换到第一个workspace
switchwk 0

// 移动应用到第一个workspace
movewk 0

自动切换夜间模式

安装扩展 Night Theme Switcher 即可

Alt 和 Ctrl 互换

由于我是Mac和Linux双持,我更喜欢Mac的键位

  1. 安装优化应用:gnome-tweak
sudo dnf install gnome-tweak
  1. 打开 优化->键盘->其他布局选项->Ctrl的位置->交换左侧和Ctrl和Alt

COMSIC 配置

绝大多数配置可以直接在界面调整,截至2025-10-31反转alt和ctrl需要使用命令行

第一种方式(Fedora)

sudo localectl set-x11-keymap cn pc105 "" "ctrl:swap_lalt_lctl,ctrl:swap_ralt_rctl"

第二种方式(任意发行版)

  1. 安装
sudo apt install evtest
  1. 测试左侧的ALT 和 CTRL的键值
sudo evtest
[sudo] password for xxx:
No device specified, trying to scan all of /dev/input/event*
Available devices:
/dev/input/event0:	Sleep Button
/dev/input/event1:	Power Button
/dev/input/event10:	IKBC USB Keyboard
/dev/input/event11:	IKBC USB Keyboard Consumer Control
/dev/input/event12:	IKBC USB Keyboard System Control
/dev/input/event13:	IKBC USB Keyboard Mouse
/dev/input/event14:	IKBC USB Keyboard
/dev/input/event17:	HDA ATI HDMI HDMI/DP,pcm=3
/dev/input/event18:	HDA ATI HDMI HDMI/DP,pcm=7
/dev/input/event19:	HDA ATI HDMI HDMI/DP,pcm=8
/dev/input/event2:	Power Button
/dev/input/event20:	HDA ATI HDMI HDMI/DP,pcm=9
/dev/input/event21:	HDA Intel PCH Mic
/dev/input/event22:	HDA Intel PCH Line Out
/dev/input/event23:	HDA Intel PCH Front Headphone
/dev/input/event3:	SINO WEALTH Legion M5 Wireless Gaming Mouse_2.4G
/dev/input/event4:	SINO WEALTH Legion M5 Wireless Gaming Mouse_2.4G Keyboard
/dev/input/event5:	SINO WEALTH Legion M5 Wireless Gaming Mouse_2.4G
/dev/input/event6:	Razer Razer DeathAdder Essential
/dev/input/event7:	Razer Razer DeathAdder Essential Keyboard
/dev/input/event8:	Razer Razer DeathAdder Essential
/dev/input/event9:	Razer Razer DeathAdder Essential
Select the device event number [0-23]:

你自己选择对应的键盘,这里我的是/dev/input/event14: IKBC USB Keyboard

  1. 获取需要交换的键值
sudo evtest /dev/input/event14
...
Testing ... (interrupt to exit)
Event: time 1764338255.181474, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70028
Event: time 1764338255.181474, type 1 (EV_KEY), code 28 (KEY_ENTER), value 0
Event: time 1764338255.181474, -------------- SYN_REPORT ------------
# 按下CTRL
Event: time 1764338259.403493, type 4 (EV_MSC), code 4 (MSC_SCAN), value 700e0
Event: time 1764338259.403493, type 1 (EV_KEY), code 56 (KEY_LEFTALT), value 1
Event: time 1764338259.403493, -------------- SYN_REPORT ------------
Event: time 1764338259.590511, type 4 (EV_MSC), code 4 (MSC_SCAN), value 700e0
Event: time 1764338259.590511, type 1 (EV_KEY), code 56 (KEY_LEFTALT), value 0
Event: time 1764338259.590511, -------------- SYN_REPORT ------------
# 按下ALT
Event: time 1764338261.219527, type 4 (EV_MSC), code 4 (MSC_SCAN), value 700e2
Event: time 1764338261.219527, type 1 (EV_KEY), code 29 (KEY_LEFTCTRL), value 1
Event: time 1764338261.219527, -------------- SYN_REPORT ------------
Event: time 1764338261.389507, type 4 (EV_MSC), code 4 (MSC_SCAN), value 700e2
Event: time 1764338261.389507, type 1 (EV_KEY), code 29 (KEY_LEFTCTRL), value 0
Event: time 1764338261.389507, -------------- SYN_REPORT ------------

这里就可以获取到CTRL的code 为 700e0 , ALT的code为700e2

  1. 创建 hwdb 文件

编辑全局 hwdb 文件:

sudo vim /etc/udev/hwdb.d/90-global-remap.hwdb

写入:

# 全局交换左 Ctrl ↔ 左 Alt
evdev:input:b0003*
 KEYBOARD_KEY_700e0=leftalt
 KEYBOARD_KEY_700e2=leftctrl

说明:

  • b0003 表示 USB 设备
  • * 表示匹配所有 USB 键盘

  1. 更新 hwdb 并触发

执行下面的命令进行刷新

sudo systemd-hwdb update 
sudo udevadm trigger