00|日用记录
Mint
常用软件替代
腾讯系
- 截至2024年底,腾讯会议、QQ和微信都已经有了官方Linux版(微信属内测但功能基本完善),主要支持Ubuntu(Debian)系。
办公
- WPS Office停留在2019版本,CAJViewer搭配edge浏览器使用,可能需要安装微软字体。
- 输入法框架使用fcitx(借助IBus),如果是fcitx5自带的输入法就不错,如果4就用搜狗
开发
- 刷题的RedPanda(小熊猫)从GitHub的每日构建中登陆后下载,其他情况使用vscode
- 虚拟机使用virtualbox或者boxes,qemu适合进阶
- notepad--也能用来写点简单的,DBeaver也能用
影音
- 音乐播放器有rhythmbox等老牌软件,视频播放器推荐mpv、cellouid是mpv套壳。
- 编辑使用ffmpeg,硬要用ffplay播放也不是不行;硬件足够上DavinceResolve
日常
- 百度网盘、keepassxc
其它
Synthesizer V Studio也能正常更新使用,但需要老版本升级,暂时没找到linux的下载方式
00|前面的话
起因
Win11吃藕和负优化,Win10又不支持新CPU(比如大小核调度),所以看看Linux发行版中,有没有可以基本满足日常开发使用的操作系统和相应软件。尝试Linux还有一个原因是想看看传闻中的“老机换新颜”有多厉害,所以同时又装了一个Win10 22H2作为对比。
配置
裸机是一台18年的联想笔记本,上大学时淘的相对便宜,i5-8265U+8G板载,两块合计512G的固态硬盘,Win10和Mint各占一块。我的强迫症曾经让我想当然希望两者的boot可以在各自硬盘上,后来发现这是徒劳,不过不足500M 的差距不会影响对比结果就是了。
选择
操作系统
尝试了Fedora、Debian、Kali、Mint、ZorinOS、elementaryOS等一系列系统之后,最终选定了Mint Cinnamon(当前21.3),没有尝试Ubuntu因为该死的snap和我的强迫症,没有尝试Deepin因为笨重,没有尝试麒麟系列搞不到,没有尝试Arch系列是因为“滚着滚着就挂了”。
Fedora从各方面来说都是相当不错的选择,用这个你可以和人吹嘘linus同款,就是不捆绑GNOME就更好了。GNOME确实挺好用,就是我用着不爽,而且还有莫名的闪屏bug。
Debian怎么说呢,12.3版本在我这台机器上居然复现了linus那个“因为兼容性问题无法继续安装”,所以说Debian为了稳定软件版本老的人真该重新考虑一下了,这老吗?这新的我都装不上!doge
Kali确实是做了深度美化的,甚至美化到grub,但我也不是天天搞安全,装点日常用软件就要忍受那冗长的菜单甚至还有兼容性问题,而一些在Windows上的安全工具只能通过Wine,多少有点得不偿失。
ZorinOS浅尝辄止的评价是,外国Deepin,和号称最像OSX的elementaryOS有一样的问题,美化了,只美化了一点点,且不说兼容问题,光是这个软件和那个工具能和系统本身有三种风格,就足够我这个强迫症崩溃了。
Mint作为一众系统里以blog起家的,虽然叠了Debian、Ubuntu、Mint三层buff,但也带来了格外好的兼容性,甚至有在别处没见过的“驱动管理器”和“安装音视频编解码器”,可以说相当好用了,大学里很敬仰的一位老师,就是只在笔记本上装了Mint做工作机使用。
桌面环境
我选择桌面环境的宗旨首先就是好用,这个好用分别是:
- 兼容稳定:长时间使用没有恶性bug,软件兼容好,可以快速响应。
- 方便美观:有常用的小功能/工具,设计比较简洁,便于自定义。
- 暂时就想到这么多,后面再补。
任何发行版最好用的桌面环境,一定就是主推的那款。Ubuntu虽然有Xfce和KDE的风味版,却不如GNOME的好看,一致性做的不如Mint。相比之下,xfce太简陋,如果是通过软件包管理器安装的就更甚以至于我会用“丑”来形容,而KDE则大包大揽,什么都做,风格太鲜明。
我一直认为,适当美化愉悦身心,过度美化仍是默认。有人看到别人花里胡哨高大上的Linux桌面就“给俺也整一个”,但过度的美化不仅会在后台占用大量资源(在Windows上尤其明显,我这台老机器放个鹿鸣,开机GPU占用就一半了TAT),还会让我这个有对称审美的强迫症发飙。所以在Windows上折腾好一阵,“归来仍是默认”,换个壁纸得了整那些花里胡哨干啥。
最后来评价一下Mint的三个桌面环境,Cinnamon模仿Win7,虽然平时老说Windows各种毛病,但从Windows切换归来,也就Cinnamon用着最顺手,不得不感叹惯性的力量。MATE给我的感觉就是处处散发着一股老气,三重开始菜单我的小屏笔记本不甚友好,而xfce虽然有Mint的加持,也还是缺东少西,自定义相当掣肘。如果算上LMDE可以说四个环境,但Debian虽然也是Cinnamon,但由于Debian的一些Debuff只能屈居妃位。(Mint Ubuntu Cinnamon:XXXXXX,XXXXXX。doge
自定义
- 非整数分辨率可以在Mint的实验功能中开启,对于我这块1.5K屏幕,当然是150%缩放最合适。
- 字体Mint/Ubuntu自带的就相当可用了,如果使用WPS、CAJViewer会带有一些宋体、方正字体,WPS的缺少字体提升目前看可以不管,还没遇到过问题(据说是有些公式在用)。
02|通用软件
指的是Windows上常用的软件对Linux(主要是Ubuntu)做了适配的。虽然平时总吐槽Electron应用各种难用(包括但不限于体积臃肿、反应迟钝、资源开销大等),但有时也不得不感叹相比Qt那种可能需要深耕才能做出较为一致体验的应用(搜狗输入法、WPS,虽然是Qt值得表扬,但也各有缺点),Electron真是轻而易举啊(比如QQ)!
搜狗输入法
参考链接:Linux Mint 21.1 安装搜狗输入法 - 食铁兽、搜狗输入法linux-安装指导 (sogou.com)
前提环境准备:sudo apt install fcitx libqt5qml5 libqt5quick5 libqt5quickwidgets5
(相比官网建议少了几个qt的库,但确实能跑)
如果打字不多,输入框架自带的输入法也能使用,不过相当不好用。
搜狗输入法适配了一批以Ubuntu为基础的“国产操作系统”,所以在Mint上也能相当跑起来,可能是桌面环境的支持原因,无法对输入法进行设置(会闪窗口但没有渲染),Linux版也没有登录选项,好在可以切换五笔和拼音输入。
搜狗输入法需要的框架是fcitx(4,不是5。虽然5各种好,但新生事物还没能来得及完成兼容,在我这个系统上设置界面会有些扭曲),如果直接安装官网的软件包,可能会帮你安装好,也可以通过Mint的输入法管理器或者根据下载搜狗软件包后跳转的安装指导↑进行安装。
安装好fcitx框架和搜狗输入法后,还需要设置fcitx框架启用输入法,这边建议把fcitx自带的输入法全卸载,就不用纠结切换和排序的问题了。启用输入法的按键也在fcitx设置中可以找到,默认是Ctrl+Space,用惯传统Windows快捷键的可能刚开始不熟悉。
自带输入法需要重启才能正常缩放,搜狗输入法没有这个问题,但状态栏会按照缩放前的“屏幕右下角”固定,不能再移动,在高清屏上就是接近中心的位置了,我只好把它挪到左上角。
在Mint上如果不对Qt库进行重定向,使用系统安装而非搜狗自带的,会出现能提示切换到搜狗输入法但既不显示状态栏(有时候显示),按键也没有反应,参考上面食铁兽的博客得以解决,复制了其中脚本方便使用。
# !/bin/shcd /opt/sogoupinyin/files/lib/qt5/lib/sudo rm libQt5Core.so.5
sudo ln -s /usr/lib/x86_64-linux-gnu/libQt5Core.so.5 libQt5Core.so.5sudo rm libQt5Gui.so.5
sudo ln -s /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5 libQt5Gui.so.5sudo rm libQt5Widgets.so.5
sudo ln -s /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5 libQt5Widgets.so.5sudo rm libQt5DBus.so.5
sudo ln -s /usr/lib/x86_64-linux-gnu/libQt5DBus.so.5 libQt5DBus.so.5sudo rm libQt5Qml.so.5
sudo ln -s /usr/lib/x86_64-linux-gnu/libQt5Qml.so.5 libQt5Qml.so.5sudo rm libQt5Network.so.5
sudo ln -s /usr/lib/x86_64-linux-gnu/libQt5Network.so.5 libQt5Network.so.5sudo rm libQt5Quick.so.5
sudo ln -s /usr/lib/x86_64-linux-gnu/libQt5Quick.so.5 libQt5Quick.so.5sudo rm libQt5QuickWidgets.so.5
sudo ln -s /usr/lib/x86_64-linux-gnu/libQt5QuickWidgets.so.5 libQt5QuickWidgets.so.5sudo rm libQt5Svg.so.5
sudo ln -s /usr/lib/x86_64-linux-gnu/libQt5Svg.so.5 libQt5Svg.so.5sudo rm libQt5XcbQpa.so.5
sudo ln -s /usr/lib/x86_64-linux-gnu/libQt5XcbQpa.so.5 libQt5XcbQpa.so.5
搜狗输入法的指南里说要卸载ibus,如果预先只安装了ibus甚至使用了,可以先卸载,否则不建议。因为fcitx在我目前的理解相当于对ibus的一个封装或者汉化,就像stockfish和pikafish关系一样,fcitx是要依赖于ibus的,即使卸载,在安装fcitx过程中还要安装ibus,何必多此一举呢?
食铁兽的博客中还提到安装一个qtsetting库,实测暂不必要。
WPS Office
似乎一个好消息是,WPS Office是难得的官方提供Linux包的几个(尤其是同时通过多架构和分发版)。但不好的消息是要处理一些字体问题。这本不是什么大事,但有些字体是Windows特供,所以只能额外安装。一个办法是安装微软TTF包即 ttf-mscorefonts-installer
,另一个办法是下载缺失的几个字体,放进文件夹里重建字体缓存。
本来这以为几个字体没什么用,但需要一个复选框时,刚好就在缺失的字体中,所以选择下载一下字体包,不过只需要将字体全部解压到WPS Office的字体路径 /usr/share/fonts/wps-office
即可。
03|替代软件
结论
Fedora
- 删除旧内核:
dnf remove --oldinstallonly
- 重置密码
- 密钥环不匹配:安装seahorse新建并默认,可以单独设置密码,记好
- 优化和扩展:
dnf install gnome-tweaks gnome-extensions-app
- 推荐扩展:user-themes eye-and-mouse-extended just-perfection nothing-to-say transparent-window-moving
- 安装C#:dnf install dotnet-sdk-7.0
- 安装vscode:把直链的域名改为(vscode.)cdn.azure.cn使用国内镜像加速,下载rpm包安装
- 安装pwsh(powershell 7):在GitHub下载rpm包安装(默认在
/opt/microsoft/
) - 安装oh-my-posh:从GitHub下载本体、主题和Meslo字体,将posh添加到path(不添加也可以)
- 为pwsh配置posh:在
~/.config
目录下创建powershell文件夹,从pwsh编辑$PROFILE
,照posh说明添加配置。新建终端配置文件,安装并指定字体,在“命令”中勾选“使用自定义命令而不是shell”,添加命令pwsh --nologo
完成配置。 - 安装QQ:从官网下载AppImage包(rpm也行,但我觉得AppImage更好用),创建桌面文件,
- 查看Linux文件系统
- Snap、AppImage和Flatpak:snap是Ubuntu多,能跨,但分区隔离不好用(类docker);Flatpak是沙箱隔离(类似微软商店),全通用;AppImage是磁盘挂载(类似绿色文件),需要自己创建关联(但临时文件还会保存)。
- 移除软件包密钥:
rpm -qa microsoft
- 配置posh:oh-my-posh和pwsh从GitHub上下载相应文件可执行Path/安装即可,主题对不同shell(如zsh和pwsh)不一样,终端启动需要修改配置文件,配置pwsh启动后按posh提供配置创建即可。
- 关于pwsh的命令链接:在使用高亮时候出现了ls和dir不一样的问题,推荐使用原生的dir命令,因为ls在Windows上是dir的软链接,但在Linux上是实际程序,所以pwsh无法处理Linux下ls命令的输出,插件就不起作用了。
- zsh的使用:直接安装本体和扩展,修改配置文件即可,推荐的主题有amuse、flazz、maran、simple、ys
- util-linux-user提供chsh命令,p7zip-plugins提供7zip命令
- 使用java:任何java都提供java和javac两个命令,编译成类再运行。需要安装开发库包devel。
- C#的vscode扩展:对本地安装好的的,需要指定程序的绝对路径,不能指定软连接
内核编译
内核编译好,资源少不了。
编译不规范,使用两行泪。
本文只介绍最简单的编译方式,让萌新可以迅速上手,同时尽量避免出错导致系统启动失败。在Ubuntu发行版中,使用apt包管理器就可以更新内核,无需自己编译。
01|使用make在Ubuntu编译内核并使用
如标题所言,本文分为两个部分:编译内核,启用内核。操作环境如下:
- Ubuntu20.04LTS
- VMWare16
编译安装内核
通过整个编译过程,我对内核的粗浅理解是,内核是由动态库(模组)、核心镜像和一些其它文件组成的一个文件集合。对编译过程的介绍将会以此展开。
编译前的准备
- 基本的命令行操作和Linux环境
- 联网(用于下载依赖库和源码包)
一、获取源码包并解压
从内核网(或者GitHub,不建议没有git基础的人用)将源码包下载到Linux系统中,并存放在家(~/)目录下。
# 本次使用的是5.14.7稳定,可自行替换为其它稳定版或长期支持版
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.14.7.tar.xz
# 网速不够快也可使用中科大镜像
wget https://mirrors.ustc.edu.cn/kernel.org/linux/kernel/v5.x/linux-5.14.7.tar.xz# 解压命令
tar -zxvf linux-5.14.7.tar.xz
# 加入解压后文件夹
cd linux-5.14.7.tar.xz
二、安装依赖库
- 推荐切换中科大镜像源进行安装
- 在不同Linux发布系统上(RedHat系和Debian系),依赖库名有所不同,具体请以自己的系统为准
sudo apt install flex bison build-essential libncurses-dev libssl-dev bc xz-utils libelf-dev
# 或者:sudo apt install kernel-package
- git和vim:可选安装,如能熟练使用你,可用git恢复误删文件,使用vim的文本界面操作从而不安装
libncurses-dev
库。 - flex和bison:flex是词法分析器,bison是语法分析器,这部分在编译原理中有提及,是编译C文件不可或缺的两个包。
- build-essential:包如其名,构建必需。这个包指定了C/C++文件从哪里获取头文件,从哪里获取库函数。安装同时还会安装这个包依赖的
gcc, g++, make
等包(不是跨平台的CMake)。 - libncurses-dev:图形字符处理库,在后文使用到
menuconfig
时弹出的图形菜单的依赖库。 - libssl-dev:加密算法库,编译完成对内核的签名等依赖库。
- kernel-package:包如其名,一步到位将编译内核需要的各种库都安装。
三、配置内核选项并编译安装
cp /boot/config-$(uname -r) .config
将系统当前正在使用的设置文件复制为当前目录下的 .config
,并在之后使用。大佬可以用vim等自己写配置文件。
make menucoifg
使用图形化界面配置Linux内核中的各种选项,该命令依赖 libncurses-dev
库。对内核不了解的萌新建议直接退出,使用当前设置进行编译,以免配置错误导致编译失败。
make -j 8 modules
编译模组,j选项启用多线程,通常为CPU核心数的2倍。此过程通常很漫长,可以先去做其他事。
make bzImage
编译完模组后,可以发现当前目录下已经有 vmlinux
文件了,这是一个可引导的内核,但此时安装文件尚不完整。bzImage
是安装的脚本,并包含了gzip压缩后的内核。
make -j 8 (all)
将其它未编译文件全部编译,默认为 make all
make modules_install
首先安装modules,否则在安装过程会提示文件缺失。
make install
将内核安装
配置内核引导
# 将当前内核添加到引导第一项,注意将版本号替换为自己的
update-initramfs -c -k 5.14.7
# 更新引导
update-grub
或者使用 vim /etc/default/grub
进行配置,重启后即可在高级选项中看到新编译的内核,或进入系统后使用 uname -a
命令查看内核版本。
整个过程中的一些问题
Linux系统下,没有报错就是正常。(No news is good news.)
warning: the frame size of 1072 bytes is larger than 1024 bytes
警告原因:内核堆栈大小默认是1024B
解决方法:修改配置文件中堆栈大小的值为4096(最大,不要超过),即可消除。但因为是警告不会中断编译过程,可以忽略。
debian/canonical-certs.pem错误
出错原因:安全文件相关
解决方法:修改 .config
文件,搜索 debian/canonical-certs.pem
,并将这个字符串删除即可
删除自己编译的内核
# 列出所有内核
dpkg --get-selections |grep linux
内核镜像主要包括以下类型:linux-image-version_code
内核镜像文件,linux-headers-version_code
内核头文件,linux-image-extra-version_code
内核扩展文件。
sudo rm -rf /lib/modules/version_code
sudo rm -rf /usr/src/linux-headers-version_code
sudo rm /boot/*version_code*
sudo rm /var/lib/dpkg/info/linux-headers-version_code*
sudo update-grub
删除系统自带内核
sudo apt-get purge linux-image-version_code
sudo update-grub
10|如何编译一个Ubuntu内核并使用(make ver.)
如标题所言,本文分为两个部分:编译内核,启用内核。操作环境如下:
- Ubuntu20.04LTS
- VMWare16
编译安装内核
通过整个编译过程,我对内核的粗浅理解是,内核是由动态库(模组)、核心镜像和一些其它文件组成的一个文件集合。对编译过程的介绍将会以此展开。
编译前的准备
- 基本的命令行操作和Linux环境
- 联网(用于下载依赖库和源码包)
一、获取源码包并解压
从内核网(或者GitHub,不建议没有git基础的人用)将源码包下载到Linux系统中,并存放在家(~/)目录下。
# 本次使用的是5.14.7稳定,可自行替换为其它稳定版或长期支持版
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.14.7.tar.xz
# 网速不够快也可使用中科大镜像
wget https://mirrors.ustc.edu.cn/kernel.org/linux/kernel/v5.x/linux-5.14.7.tar.xz# 解压命令
tar -zxvf linux-5.14.7.tar.xz
# 加入解压后文件夹
cd linux-5.14.7.tar.xz
二、安装依赖库
- 推荐切换中科大镜像源进行安装
- 在不同Linux发布系统上(RedHat系和Debian系),依赖库名有所不同,具体请以自己的系统为准
sudo apt install flex bison build-essential libncurses-dev libssl-dev bc xz-utils libelf-dev
# 或者:sudo apt install kernel-package
- git和vim:可选安装,如能熟练使用你,可用git恢复误删文件,使用vim的文本界面操作从而不安装
libncurses-dev
库。 - flex和bison:flex是词法分析器,bison是语法分析器,这部分在编译原理中有提及,是编译C文件不可或缺的两个包。
- build-essential:包如其名,构建必需。这个包指定了C/C++文件从哪里获取头文件,从哪里获取库函数。安装同时还会安装这个包依赖的
gcc, g++, make
等包(不是跨平台的CMake)。 - libncurses-dev:图形字符处理库,在后文使用到
menuconfig
时弹出的图形菜单的依赖库。 - libssl-dev:加密算法库,编译完成对内核的签名等依赖库。
- kernel-package:包如其名,一步到位将编译内核需要的各种库都安装。
三、配置内核选项并编译安装
cp /boot/config-$(uname -r) .config
将系统当前正在使用的设置文件复制为当前目录下的 .config
,并在之后使用。大佬可以用vim等自己写配置文件。
make menucoifg
使用图形化界面配置Linux内核中的各种选项,该命令依赖 libncurses-dev
库。对内核不了解的萌新建议直接退出,使用当前设置进行编译,以免配置错误导致编译失败。
make -j 8 modules
编译模组,j选项启用多线程,通常为CPU核心数的2倍。此过程通常很漫长,可以先去做其他事。
make bzImage
编译完模组后,可以发现当前目录下已经有 vmlinux
文件了,这是一个可引导的内核,但此时安装文件尚不完整。bzImage
是安装的脚本,并包含了gzip压缩后的内核。
make -j 8 (all)
将其它未编译文件全部编译,默认为 make all
make modules_install
首先安装modules,否则在安装过程会提示文件缺失。
make install
将内核安装
配置内核引导
# 将当前内核添加到引导第一项,注意将版本号替换为自己的
update-initramfs -c -k 5.14.7
# 更新引导
update-grub
或者使用 vim /etc/default/grub
进行配置,重启后即可在高级选项中看到新编译的内核,或进入系统后使用 uname -a
命令查看内核版本。
整个过程中的一些问题
Linux系统下,没有报错就是正常。(No news is good news.)
warning: the frame size of 1072 bytes is larger than 1024 bytes
警告原因:内核堆栈大小默认是1024B
解决方法:修改配置文件中堆栈大小的值为4096(最大,不要超过),即可消除。但因为是警告不会中断编译过程,可以忽略。
debian/canonical-certs.pem错误
出错原因:安全文件相关
解决方法:修改 .config
文件,搜索 debian/canonical-certs.pem
,并将这个字符串删除即可
删除自己编译的内核
# 列出所有内核
dpkg --get-selections |grep linux
内核镜像主要包括以下类型:linux-image-version_code
内核镜像文件,linux-headers-version_code
内核头文件,linux-image-extra-version_code
内核扩展文件。
sudo rm -rf /lib/modules/version_code
sudo rm -rf /usr/src/linux-headers-version_code
sudo rm /boot/*version_code*
sudo rm /var/lib/dpkg/info/linux-headers-version_code*
sudo update-grub
删除系统自带内核
sudo apt-get purge linux-image-version_code
sudo update-grub
(kernel-package版)