RedHat/Fedora LOGO 版权由红帽所有;封面来自于 Reckless 毛子
侵权则删。
前言
WARNING本文章没有适用性,主要针对本人使用。
如果能帮到您,万分荣幸!
按照惯例,贴一下 Fastfetch(这次是无 Logo 版)
ne0w0r1d@Ne0-Cyrene-------------------OS: Fedora Linux 43 (KDE Plasma Desktop Edition) x86_64Host: ROG Zephyrus M16 GU603ZM_GU603ZM (1.0)Kernel: Linux 6.18.6-cachyos1.fc43.x86_64Uptime: 5 hours, 41 minsPackages: 3495 (rpm), 37 (flatpak), 5 (linglong)Shell: bash 5.3.0Display (AUOC199): 2560x1600 @ 1.25x in 16", 165 Hz [Built-in]DE: KDE Plasma 6.5.5WM: KWin (Wayland)WM Theme: BreezeTheme: Breeze (Dark) [Qt], Breeze-Dark [GTK2], Breeze [GTK3]Icons: breeze-dark [Qt], breeze-dark [GTK2/3/4]Font: Noto Sans (10pt) [Qt], Noto Sans (10pt) [GTK2/3/4]Cursor: breeze (24px)Terminal: konsole 25.12.1CPU: 12th Gen Intel(R) Core(TM) i7-12700H (20) @ 4.70 GHzGPU 1: NVIDIA GeForce RTX 3060 Mobile / Max-Q [Discrete]GPU 2: Intel Alder Lake-P Integrated Graphics Controller @ 1.40 GHz [Integrated]Memory: 4.41 GiB / 7.47 GiB (59%)Swap: 4.72 GiB / 23.47 GiB (20%)Disk (/): 275.35 GiB / 911.57 GiB (30%) - xfsDisk (/run/media/ne0w0r1d/Ne0_Cifera): 690.49 GiB / 931.45 GiB (74%) - exfatLocal IP (wlo1): 192.168.2.54/24Battery (ASUS Battery): 80% [AC Connected]Locale: zh_CN.UTF-82025 年 1 月末,我抛弃了自己最喜欢的发行版 openSUSE Tumbleweed Slowroll,转向了 IBM | RedHat Fedora GNU/systemd-linuxd-rs 43 KDE Plasma Desktop Edition。
并为此去 bugzilla 🇫 了红帽(因为 Kate 缺翻译,而且就 Fedora 缺翻译)。而对比刚发布 Fedora 43 的时候,一堆 Python ABI Break Change 导致我的达芬奇无法正常使用,这一次也正好可以使用了。
那这个文章就来说说我是如何调教我的 IBM | RedHat Fedora GNU/systemd-linuxd-rs 43 KDE Plasma Desktop Edition 的。
从 openSUSE 跳槽 Fedora 的原因
其实很简单,大伙也都知道,openSUSE 的 NVIDIA-Open 驱动是一款内核更新就会炸的静态版本。但自带签名,驱动没法用那一定是一款我的问题。
但我不真不想在 N 卡驱动没更新的时候要等半个月不能更新内核的痛苦中而导致无法滚动更新。
而且我的滚动更新是一款交给 PackageKit 自动更新的滚动更新。这样可能就会导致我下次开机可能就是黑屏,以至于我有时候真不想更新内核
而 Fedora 是 RedHat Akmod,带来的好处就是个跟着内核更新可以自动编译(只要内核用的编译器是 GCC/LLVM 不开链接时优化就没问题)。
而且 Fedora 是可以自己换内核的,CachyOS 也有为 Fedora 打造专属优化的内核,而且带有 scx、asus-linux、ananicy 功能。
但可惜 Fedora 的 BTRFS 默认不支持快照我也懒得折腾支持了,所以我就只能用 XFS 保证硬盘性能了。
好了扯了那么多也该说说 Fedora 的一些问题了。
删除沟槽的 Fedora Flatpak 私货仓库,并启用 Flathub
沟槽的红帽不知道为啥不使用 Flathub,而是用自己的 Flatpak 仓库当作默认的软件分发渠道。
作为 IBM | RedHat Fedora GNU/systemd-linuxd-rs 43 KDE Plasma Desktop Edition 用户而不是 IBM | RedHat Fedora GNU/systemd-linuxd-rs 43 Kinoite Atomic Desktop 用户。我大可直接删除 Fedora Flatpak。
CAUTION如果你是
IBM | RedHat Fedora GNU/systemd-linuxd-rs Atomic Desktops用户。
千万不要删除 Fedora Flatpak。
系统的各项依赖使用的是来自 Fedora Flatpak 的。
KDE Discover 操作
打开 Discover - > 设置 -> 添加 Flathub -> 将 Flathub 放在最顶上 -> 禁用 Fedora Flatpak -> 删除 Fedora Flatpak

Inhuman Desktop 操作
不提供,自己找。
命令行操作
使用 flatpak 命令进行管理.
flatpak remotes # 列出仓库名称 选项flathub system,filtered
flatpak remote-delete $REPONAME # 删除仓库,将 REPONAME 改成你不想保留的仓库删除 ibus
ibus-libs 的话没法卸载,红帽有意捆绑保留,但可以通过 rpm 强力清除,这里按下不表,但是其他的直接通过 sudo dnf rm ibus ibus-chewing ibus-gtk3 ibus-gtk4 卸载
编解码器
众所周知,红帽是美国公司,受美国《专利法》和《数字千年版权法》保护。
视频、音频、图片的正常输出,都需要进行编解码器的更换。
首先!一定要启用 RPMFusion 仓库!这是一个第三方仓库,用于发布 Fedora 和 EL 系不想发或者不能发布的软件。而下文的 NVIDIA 驱动,也要通过 RPMFusion 仓库进行。
启用 RPMFusion 仓库
可能用 KDE Plasma 欢迎向导或 Inhuman Desktop Tour 没法打开所有的仓库,建议直接安装 RPM 包。
Free:
sudo dnf install https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpmNonFree:
sudo dnf install https://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm更换组建、Mesa、安装额外编解码器
跟着以下步骤进行安装即可
sudo dnf swap ffmpeg-free ffmpeg --allowerasing # 更换 FFmpeg 包sudo dnf update @multimedia --setopt="install_weak_deps=False" --exclude=PackageKit-gstreamer-plugin # 多媒体包,并包含 GStreamer 插件的 PackageKitsudo dnf swap mesa-va-drivers mesa-va-drivers-freeworld # 更换 Free World 版本 Mesa VAAPI,避免无法硬件加速sudo dnf swap mesa-vdpau-drivers mesa-vdpau-drivers-freeworld # 更换 Free World 版本 Mesa VDPAU,避免无法硬件加速sudo dnf in libheif-freeworld # 安装 libheif-freeworld 以提供 libheif 支持sudo dnf install intel-media-driver # 安装 IMD 以启用 Intel QSV 支持NVIDIA 用户须知
如果你是 N 卡用户,想在 FireFox 和 Chrome 进行硬件解码,将会在下文阐述。
NVIDIA 驱动(安全启动)
安装前准备
启用 RPMFusion 仓库
请前往 编解码器 - 启用 RPMFusion 仓库自行启用
生成密钥,并 Enroll MOK(不止 NVIDIA 驱动,所有 RPMFusion 内的 akmods 驱动均能用)
首先请使用以下命令安装依赖。
sudo dnf install kmodtool akmods mokutil openssl使用 kmodgenca -a 生成适用于 akmods 的密钥
并执行 sudo mokutil --import /etc/pki/akmods/certs/public_key.der
然后输入导入密码,重启电脑,进行 Enroll。
安装
使用 RPMFusion 的仓库安装:
sudo dnf in akmod-nvidia xorg-x11-drv-nvidia-cuda xorg-x11-drv-nvidia-cuda-libs安装完后重启。
启用 FireFox 和 Google Chrome 硬件解码
安装 libva-nvidia-driver 即可,安装完后可查看vainfo。
如果输出了如下内容,则为成功安装
vainfo: VA-API version: 1.22 (libva 2.22.0)vainfo: Driver version: VA-API NVDEC driver [direct backend]注意事项
Nvidia kernel module missing, falling back to nouveau( NVIDIA 内核模块丢失,正在回退至 Nouveau)
WARNING该行为一般是在双系统/更新 BIOS/微软安全启动密钥更新的情况下出现。
本文不推荐关闭安全启动。
首先,把安全启动关闭。
然后再执行一次 sudo mokutil --import /etc/pki/akmods/certs/public_key.der ,设置密码,重启,输入密码,打开安全启动即可。
如果安全启动是正常的话,请执行一次 sudo akmods --force
nvidia-smi 功率不正确
启用 nvidia-powerd 服务即可。如果想让显卡在特定条件下不休眠,可以顺带启动 nvidia-nvidia-persistenced 服务
CachyOS 内核+CachyOS 配置文件(带安全启动)
安装前准备
检查特性集
○ ld.so --help | grep "(supported, searched)" x86-64-v3 (supported, searched) x86-64-v2 (supported, searched)CachyOS 主线内核需要 支持 x86_64V3,而如果你恰巧只有一个 V2,请安装 kernel-cachyos-lts 或 kernel-cachyos-server,但请注意,只有 V3 支持 BORE 调度器。
SELinux
请执行如下命令,可让 SELinux 放行内核模块:
sudo setsebool -P domain_kernel_load_modules on安装
启用 COPR
毕竟属于第三方内核,不归红帽管,所以需要自行启用 CachyOS 的 COPR
WARNINGCOPR 是红帽的社区构建服务,专注于 RPM 系发行版。
用户内容需要自己鉴别,红帽和本文并不负责
sudo dnf copr enable bieszczaders/kernel-cachyos # GCC 版本,推荐 NVIDIA + 安全启动用户使用sudo dnf copr enable bieszczaders/kernel-cachyos-lto # LTO 版本,推荐 Non-NVIDIA 用户用户使用当然,大伙也可以使用 mozixun 的灵车内核,同样,推荐 N 卡用户关闭安全启动或者非 N 卡用户使用。
TIP相较于 CachyOS 官方移植内核,mozixun 的内核使用了 O3+Full-LTO+Polly+ 默认 PREEMPT_LAZY 编译,理论上来说极限性能会比官方移植内核强。
但与之对应的问题是,CachyOS 官方移植内核,会从linux-nextbackport 一些对我而言很有必要的东西,如早期的NTSync(现在都支持了),以及asus-armouy(6.19 才支持)。
sudo dnf copr enable mozixun/CachyOS-Kernel-LTO-x64-Normal # X86-64v2sudo dnf copr enable mozixun/CachyOS-Kernel-LTO-x64-v3 # X86-64v3 - AVX2sudo dnf copr enable mozixun/CachyOS-Kernel-LTO-x64-v4 # X86-64v4 - AVX512安装
CachyOS 官方移植
GCC 版本
sudo dnf in libcap-ng libcap-ng-devel procps-ng procps-ng-devel kernel-cachyos kernel-cachyos-devel-matchedLTO 版本
sudo dnf in kernel-cachyos-lto kernel-cachyos-lto-devel-matchedMozixun 灵车版
sudo dnf in kernel-cachyos-lto kernel-cachyos-lto-core kernel-cachyos-lto-devel kernel-cachyos-lto-devel-matched kernel-cachyos-lto-modules # 其他显卡sudo dnf in kernel-cachyos-lto-nvidia-open # NVIDIA 开放内核模块,请关闭安全启动签名
因为 Fedora 的 GRUB-BLS 存在 shimlock 机制,会检测内核是否签名,故需要自己签名。
首次使用签名
TIP参考:《GitHub Gist - mikaeldui/CachyOS Kernel for Fedora with Secure Boot.md》
- 安装依赖
sudo dnf install pesign openssl kernel-devel mokutil keyutils- 允许自己的用户签名内核
sudo echo "$USER" | sudo tee -a /etc/pesign/userssudo /usr/libexec/pesign/pesign-authorize- 生成签名用的证书(推荐放在主目录)
openssl req -new -x509 -newkey rsa:2048 -keyout "key.pem" \ -outform DER -out "cert.der" -nodes -days 36500 \ -subj "/CN=CachyOS Secure Boot/" # /CN=CachyOS Secure Boot/ 中的 CachyOS Secure Boot 可以自己定义,但一定要自己记住,后面要用,本人叫 NewCachy,key.pem/cert.der 也同理,别改后缀,但是一定要记住名字,也要记住位置openssl pkcs12 -export -out key.p12 -inkey key.pem -in cert.der # key.pem/cert.der 是上面生成证书的文件名字,key.p12 也同理,这是输出文件,名字自定,后缀别改,记住位置和名字sudo certutil -A -i cert.der -n "CachyOS Secure Boot" -d /etc/pki/pesign/ -t "Pu,Pu,Pu" # CachyOS Secure Boot 中的 CachyOS Secure Boot 可以自己定义,但一定要自己记住,后面要用,本人叫 NewCachy,要跟上面的 OpenSSL 生成的密钥 CN 一样,cert.der 上面生成证书的文件名和位置- 导入证书
sudo pk12util -i key.p12 -d /etc/pki/pesign # 用上面的生成的 p12 文件sudo mokutil --import "cert.der" # 导入上面生成的公钥文件,输入完密码重启- 签名内核
cd /boot # 进入引导目录sudo pesign --certificate 'CachyOS Secure Boot' \ # 这里的 CachyOS Secure Boot 需要自己注意上面定义的证书名字 --in vmlinuz-6.18.6-cachyos1.fc43.x86_64 \ # 可输入 vmlinuz- 然后补全,反正中间一定是 cachyos1,内核版 --sign \ --out vmlinuz-6.18.6-cachyos1.fc43.x86_64.signed # 输出的内核文件,也可以自动补全后加入 .signedsudo mv vmlinuz-6.18.6-cachyos1.fc43.x86_64.signed vmlinuz-6.18.6-cachyos1.fc43.x86_64 # 替换内核,善用自动补全自动签名和自动设置启动项钩子
毕竟总不可能每次安装内核手动签名内核吧,而且自启动选项有时候可能也没法改动,故可以设置如下的钩子,请放在 /etc/kernel/postinst.d/
自动签名 00-signing
#!/bin/sh
set -e
KERNEL_IMAGE="$2"MOK_KEY_NICKNAME="CachyOS Secure Boot" # 这个是上面设置的密钥名字,不再赘述
if [ "$#" -ne "2" ] ; then echo "Wrong count of command line arguments. This is not meant to be called directly." >&2 exit 1fi
if [ ! -x "$(command -v pesign)" ] ; then echo "pesign not executable. Bailing." >&2 exit 1fi
if [ ! -w "$KERNEL_IMAGE" ] ; then echo "Kernel image $KERNEL_IMAGE is not writable." >&2 exit 1fi
echo "Signing $KERNEL_IMAGE..."
pesign --certificate "$MOK_KEY_NICKNAME" --in "$KERNEL_IMAGE" --sign --out "$KERNEL_IMAGE.signed"mv "$KERNEL_IMAGE.signed" "$KERNEL_IMAGE"然后使用:sudo chown root:root /etc/kernel/postinst.d/00-signing ; sudo chmod u+rx /etc/kernel/postinst.d/00-signing设置文件权限
自动设置启动项 99-default
#!/bin/sh
set -e
grubby --set-default=/boot/$(ls /boot | grep vmlinuz.*cachy | sort -V | tail -1)然后使用: sudo chown root:root /etc/kernel/postinst.d/00-signing ; sudo chmod u+rx /etc/kernel/postinst.d/00-signing 设置文件权限。
注意事项
Bad Shim
WARNING该行为一般是在双系统/更新 BIOS/微软安全启动密钥更新的情况下出现。
也有可能是更新后没有自动签名。
本文不推荐关闭安全启动。
首先,把安全启动关闭。
然后再执行一次 sudo mokutil --import $KEY ,设置密码,重启,输入密码,打开安全启动即可。($KEY 是指密钥文件,相对位置和绝对位置均可)
如果是没有被 Windows Update 毒害,没有更新 BIOS 和微软安全启动密钥。
则需要考虑重新签名内核,请直接使用 签名 - 首次使用签名 - 5. 签名内核 的方式手动签名一次。(确保 MOK 存在,刚刚更新就炸了一次 shim,可能跟 PackageKit 有关,也有可能跟安装后脚本权限有关)
无法使用 NVIDIA 驱动
- 官方 GCC 内核 + 安全启动:请参考上面的安装 NVIDIA 驱动,以及检查一下签名是否掉了,然后如果 Nouveau 进去 SDDM 后(GDM 不熟),进入 TTY 重新导入,重新使用
sudo akmods --force - 官方 LTO 内核:请使用 GCC 内核
- Mozixun LTO 内核:请使用官方 GCC 内核或关闭安全启动使用 Mozixun 的 LTO NVIDIA-OPEN 内核
使用了 CachyOS 内核后其他方面的性能调优
通用调优
首先安装如下套件:
sudo dnf in ananicy-cpp cachyos-ananicy-rules cachyos-settings scx-scheds-git scxctl scx-manager --allowerasing # 因为需要更换 ZRAM 方案,所以需要 allowerasingananicy-cpp:一个用于自动调节可执行程序nice值的守护进程。nice值表示了在为特定可执行程序分配CPU资源时的优先级。1cachyos-ananicy-rules:CachyOS 的ananicy-cpp规则cachyos-settings:CachyOS 的性能调优文件scx-scheds-git:SCX 调度器主线版本,一个可拓展调度器框架,允许在不修改内核代码的情况下通过 BPF(Berkeley Packet Filter)或 eBPF 来实现自定义调度策略,具有少量的性能提升效果。2scxctl:SCX 调度器的 CLI 控制器scx-manager: SCX Loader 的 GUI 控制
然后启用一下 ananicy-cpp 服务,打开 scx-manager 选择合适的调度器方案即可。
笔记本调优
默认的 tuned 配置文件对我而言会严重限制性能,所以直接偷用 Bazzite 的配置文件即可,tuned 配置文件在 /etc/tuned/profiles
balanced-bazzite.conf/tuned.conf(平衡)
## tuned configuration#
[main]summary = General non-specialized tuned profile with added Bazzite tweaksinclude = balanced
[audio]# See 17c869dtimeout=0
[sysctl]# The swappiness parameter controls the tendency of the kernel to move# processes out of physical memory and onto the swap disk.# 0 tells the kernel to avoid swapping processes out of physical memory# for as long as possible# 100 tells the kernel to aggressively swap processes out of physical memory# and move them to swap cachevm.swappiness = 180
vm.watermark_boost_factor = 0vm.watermark_scale_factor = 125vm.dirty_bytes = 268435456vm.dirty_background_bytes = 134217728vm.page-cluster = 0
[sysfs]/sys/devices/system/cpu/amd_pstate/cpb_boost=enabled/sys/devices/system/cpu/intel_pstate/no_turbo=0
[script]script=${i:PROFILE_DIR}/script.sh对应的脚本 balanced-bazzite.conf/script.sh
#!/bin/bash
. /usr/lib/tuned/functions
start() { [ "$(/usr/bin/systemctl is-enabled scx_loader.service)" = "enabled" ] && /usr/bin/scxctl switch -m auto return 0}
stop() { return 0}
process $@balanced-battery-bazzite.conf/tuned.conf(电池平衡,需要前者)
## tuned configuration#
[main]summary = Balanced profile biased towards power savings changes for battery with added Bazzite tweaksinclude = balanced-bazzite
[cpu]energy_performance_preference=balance_powerboost=1
[audio]timeout=10
[video]panel_power_savings=1throughput-performance-bazzite/tuned.conf(高吞吐量性能)
## tuned configuration#
[main]summary = General non-specialized tuned profile with added Bazzite tweaksinclude = throughput-performance
[cpu]boost=1
[audio]# See 17c869dtimeout=0
[sysctl]# The swappiness parameter controls the tendency of the kernel to move# processes out of physical memory and onto the swap disk.# 0 tells the kernel to avoid swapping processes out of physical memory# for as long as possible# 100 tells the kernel to aggressively swap processes out of physical memory# and move them to swap cachevm.swappiness = 180
vm.watermark_boost_factor = 0vm.watermark_scale_factor = 125vm.dirty_bytes = 268435456vm.dirty_background_bytes = 134217728vm.page-cluster = 0
[sysfs]/sys/devices/system/cpu/amd_pstate/cpb_boost=enabled/sys/devices/system/cpu/intel_pstate/no_turbo=0
[script]script=${i:PROFILE_DIR}/script.sh对应的脚本 throughput-performance-bazzite/script.sh
#!/bin/bash
. /usr/lib/tuned/functions
start() { [ "$(/usr/bin/systemctl is-enabled scx_loader.service)" = "enabled" ] && /usr/bin/scxctl switch -m gaming return 0}
stop() { return 0}
process $@powersave-bazzite/tuned.conf
## tuned configuration#
[main]include = powersave
[sysfs]/sys/devices/system/cpu/intel_pstate/no_turbo=1/sys/devices/system/cpu/amd_pstate/cpb_boost=disable
[video]radeon_powersave=dpm-balanced, autopanel_power_savings=0
[script]script=${i:PROFILE_DIR}/script.sh对应脚本 powersave-bazzite/script.sh
#!/bin/bash
. /usr/lib/tuned/functions
start() { [ "$USB_AUTOSUSPEND" = 1 ] && enable_usb_autosuspend [ "$(/usr/bin/systemctl is-enabled scx_loader.service)" = "enabled" ] && /usr/bin/scxctl switch -m powersave enable_wifi_powersave return 0}
stop() { [ "$USB_AUTOSUSPEND" = 1 ] && disable_usb_autosuspend disable_wifi_powersave return 0}
process $@powersave-battery-bazzite/tuned.conf(需要前者)
## tuned configuration#
[main]summary = Optimize for low power consumption with added Bazzite tweaksinclude = powersave-bazzite
[video]radeon_powersave=dpm-battery, autopanel_power_savings=3SELinux
玲珑
用玲珑的时候可能会出现 AVC 拒绝警告,这个可以通过自己设置规则完成
sudo ausearch -c 'll-box' --raw | audit2allow -M my-llbox # 生成规则sudo semodule -i my-llbox.pp # 应用规则Howdy
新建howdy.te文件
module howdy 1.0;
require { type lib_t; type xdm_t; type v4l_device_t; type sysctl_vm_t; class chr_file map; class file { create getattr open read write }; class dir add_name;}
#============= xdm_t ==============allow xdm_t lib_t:dir add_name;allow xdm_t lib_t:file { create write };allow xdm_t sysctl_vm_t:file { getattr open read };allow xdm_t v4l_device_t:chr_file map;然后
sudo checkmodule -M -m -o howdy.mod howdy.tesudo semodule_package -o howdy.pp -m howdy.modsudo semodule -i howdy.ppHowdy Pam.d 配置
在自己的桌面/锁屏/登录管理器中,以及 system-auth 里面加入这两句话
auth sufficient pam_unix.so try_first_pass likeauth nullokauth sufficient pam_howdy.sorealtime 设置
除了可以使用 scx 完成设置之外,也可以使用如下方案进行
首先安装 realtime-setup 并启用 realtime 服务,加入实时用户组。
sudo dnf in realtime-setupsudo systemctl enable realtime-setup.servicesudo systemctl enable realtime-entsk.servicesudo usermod -aG realtime $(whoami)然后重启
OTD
跟 openSUSE 不同,去 OpenTabletDriver 的仓库下载 RPM 安装即可。Fedora 的仓库内有 dotNET 运行时安装包。
END
至于达芬奇和做音乐的事儿后面再说!现在差不多也说完了遇到了问题,如果还有别的问题的话,我再补充?