Vandee's Blog

12 Aug 2025

薛定谔的 Linux

TL;DR

Both stable and unstable until you linux.

Linux 好玩是好玩,就是不太稳定,会遇到很多小问题。Linux 的图形界面和显示器协议的混乱和前端有的一拼。

我的 Fcitx 输入法框架在 Emacs 和系统之间反复横跳,就像薛定谔的猫一样。有时候是 Emacs 里可以用,系统不能用,有时候又刚好反过来。

折腾记录

近道都是远路,尝试过几个大佬自己封装好的 Arch Linux,附带了桌面环境的安装和配置。是挺方便的,但是遇到一些小问题的时候,由于不知道他具体是怎么实现的一些功能,又要去看文档和源码。我这个电脑又比较老了,很多问题都没有现成的答案和别人的复现。

也尝试了 DHH 的 Omarchy ,桌面环境是 hyprland + Wayland,可能是我的电脑比较老了,运行起来有点卡顿。内置的 theme 我又不太喜欢,体验了 2 天之后,感觉不是很顺手。

最后决定使用 i3 和 X11,运行起来一点不卡,所有应用都是秒开。

Arch Linux 初始安装

Arch Linux - Downloads 页面下载最新的 ISO 文件,有很多国内镜像可以选。写入 U 盘之后,进入 BIOS 启动 U 盘引导。

archinstall 是 Arch Linux 的官方安装脚本,挺方便的,命令行输入 archinstall 启动安装脚本。

  • 选择仓库镜像为 China
  • 设置硬盘和分区:由于我的老电脑一个硬盘是小固态,一个是机械硬盘。在 manually partition 里手动设置把 arch 的系统(挂载 EFI Root)安装在固态,home 挂在在机械硬盘。设置完之后,设定 disk encryption 硬盘加密。
  • 设定 root 密码并添加用户
  • 设定 audio 为 pipewire,不在这里设定就播放不了音频,之后要单独安装。

Arch Linux 的镜像对国内环境太友好了,差不多 10 分钟就安装好了。

接下来就是大坑桌面环境。

i3

i3 的简洁实在太爱了。

安装:

sudo pacman -S i3 xorg xorg-xinit
                  echo "exec i3" > ~/.xinitrc

输入 startx 进入桌面环境。i3 会有一个引导界面,可以初始化生成配置文件到 /home/user/.config/i3/config

配置

  • 设置鼠标滚轮翻转

    编辑 /usr/share/X11/xorg.conf.d/40-libinput.conf 文件:

      Section "InputClass"
                          Identifier "libinput pointer catchall"
                          MatchIsPointer "on"
                          MatchDevicePath "/dev/input/event*"
                          Driver "libinput"
                          Option "NaturalScrolling" "True"
                          EndSection
  • 我的自定义设置

    exec --no-startup-id opensnitch-ui
                          exec --no-startup-id copyq
                          exec --no-startup-id feh --bg-fill /home/vandee/Pictures/create.jpg
                          bindsym $mod+period exec ghostty
                          bindsym $mod+b exec librewolf --new--windows
                          bindsym $mod+e exec emacsclient -c -a ""
                          bindsym $mod+f exec thunar
                          bindsym $mod+q kill
                          # bindsym $mod+Mod1+v exec --no-startup-id copyq show
                          # Gaps
                          gaps inner 5
                          smart_gaps on
                          # hide tiling window title bar
                          for_window [tiling] border pixel 1
                          smart_borders on
                          exec --no-startup-id fcitx5

其他设定

i3 是一个裸的图形化窗口管理,图片查看,文件资源管理器什么的都没有。

一些基础的 app 和系统设定,让 LLM 生成了一个安装脚本。迭代了很多次现在基本可用了。

脚本会安装好 rime 输入法,系统字体,ghostty 终端,paru 包管理器,Node.js,UV python,Emacs,thunar(文件管理器),opensnitch(轻量网络监控), flameshot(截图),mpv(媒体播放),feh(图片查看)等软件并设置好一些系统启动项服务。

应用启动就用了 dmenu,很轻量,也可以直接在 i3 的配置里写快捷键。

dotfiles 一直在用 GitHub 同步管理,迁移过来也很方便。

冤家 Fcitx 和 Emacs

~/.xprofile

export GTK_IM_MODULE=fcitx
              export QT_IM_MODULE=fcitx
              export XMODIFIERS=@im=fcitx

/etc/environment.d/90-fcitx5.conf

XMODIFIERS=@im=fcitx
              GTK_IM_MODULE=fcitx
              QT_IM_MODULE=fcitx

还有其他网上能查到的地方我都设置了。

现在他们两个的情况就是:有时候是 Emacs 里可以用,系统不能用,有时候又刚好反过来,还有的时候 Emacs 桌面不能用,但是 Emacsclient 可以,大多数时候在终端里 emacs -nw 可以,极少数情况都可以用。

这篇博客就是趁它们刚好都可以同时运行的时候抓紧时间写的!

用 Emacs rime 可以解决现在这个问题,但我更想弄明白到底是哪里出了问题。

我猜测可能的原因是因为 Emacsclient 在设置为系统的 service 之后,启动需要加载的环境和 i3 之间有顺序要求。有时候加载的顺序对了,环境就应用上了。

之前的猜测错了,是因为我用 systemd 启动了 Emacs daemon,而 i3 启动的 Fcitx5 获取的是 i3 session 的环境变量。之前就算我在 Emacs 里使用 getenv 指令获取到了 XMODIFIERS=@im=fcitx ,输入法框架还是出不来。由于某种原因,systemd 里启动的 Emacs 和 i3 的环境变量没有统一。找到一个最简单的方法,直接用 tmux 后台 Emacs --daemon

小结

这可能就是 Linux 一直不是流行的桌面环境的原因,它的桌面环境和 win、mac 比起来不那么稳定,不同的硬件配置和环境遇到的问题都不一样,得自己看文档解决。但这同时也是 hacker、nerd 和折腾仔(我)喜欢 Linux 的原因,它和 Emacs 一样,都是我的赛伯乐高。

Linux 就是我会一直使用下去的操作系统, Linux 太自由了

Tags: Linux Ramble