什么是 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 模拟平铺
- 安装支持平铺的插件(
Tilling Shell),当然如果你像我一样一个工作空间只显示一个应用也可以不安装 - 使用自定义快捷键来模拟切换和移动工作空间
// 在你的配置下加上这两个指令 ~/.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的键位
- 安装优化应用:
gnome-tweak
sudo dnf install gnome-tweak
- 打开 优化->键盘->其他布局选项->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"
第二种方式(任意发行版)
- 安装
sudo apt install evtest
- 测试左侧的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
- 获取需要交换的键值
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
- 创建 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 键盘
- 更新 hwdb 并触发
执行下面的命令进行刷新
sudo systemd-hwdb update
sudo udevadm trigger