Fedora配置

前言

前阵子装了个双系统Fedora,开箱即用确实香,在此记录下配置Fedora的过程,指不定哪天就玩炸了得重装呢hhh

写文时Fedora已发布stable 34 version,主系统Windows 10 Pro,笔记本Asus Zenbook Duo.


FUCK YOU NVIDIA

Fedora对于N卡会默认安装开源的nouveau,然而nouveau的功能并不齐全,如果想用cuda的话还是得装闭源驱动,如果不是因为我这笔记本只有N卡,我肯定AMD YES. 但既然我们没得选,那只能在丢下一句“FUCK YOU NVIDIA”后老老实实折腾驱动。

首先我们要添加RPM Fusion仓库:

$ sudo dnf install https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm 
$ sudo dnf install https://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm

然后根据显卡的类型安装对应版本的驱动

$ sudo dnf install akmod-nvidia

之后重启电脑即可,理论上安装完akmod后会自动disable开源的nouveau. 检查是否安装成功NVIDIA驱动:

$ nvidia-smi

在Secure boot下FUCK YOU NVIDIA

如果你因为种种原因不想关Secure boot的话,你会在重启后惊喜的发现没有成功加载akmod,这是因为akmod模块并没有进行签名,无法通过Secure boot. 由于我的Windows 10对硬盘进行了加密,必须要Secure boot, 否则每次进入系统都需要输入一串密钥。目前的解决方案就是手动对akmod模块进行签名,具体可参考Fedora的wiki

首先创建一对X.509公钥私钥:

$ cat << EOF > configuration_file.config
[ req ]
default_bits = 4096
distinguished_name = req_distinguished_name
prompt = no
string_mask = utf8only
x509_extensions = myexts

[ req_distinguished_name ]
O = yourOrganizationName
emailAddress = yourEmailAddress

[ myexts ]
basicConstraints=critical,CA:FALSE
keyUsage=digitalSignature
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid
EOF

然后用openssl生成一组X.509公私钥:

$ openssl req -x509 -new -nodes -utf8 -sha256 -days 36500 \
-batch -config configuration_file.config -outform DER \
-out public_key.der \
-keyout private_key.priv

接着将我们生成的密钥Enroll到系统里。由于Fedora支持Machine Owner Key (MOK),我们可以很简单地将这密钥Enroll进去:

$ mokutil --import public_key.der

然后重启系统,跟着指示完成Enroll即可。接下来只需要对akmod模块进行签名即可

$ /usr/src/kernels/$(uname -r)/scripts/sign-file \
sha256 \
private_key.priv \
public_key.der \
my_module.ko

将上面的my_module.ko换成/usr/lib/modules/$(uname -r)/extra/nvidia/下的所有.ko即可。最后重启系统,就能成功加载NVIDIA驱动了。


必备Package

  • zsh
  • oh-my-zsh
  • vim
  • latte-dock
  • ffmpeg
  • 'dnf-command(versionlock)'

oh-my-zsh配置

ZSH_THEME="ys"

plugins=(
 git
 extract
 rand-quote
 z
 sudo
)

quote | cowsay

source /usr/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
source /usr/share/zsh-autosuggestions/zsh-autosuggestions.zsh

KDE插件

KWin Scripts

  • Force Blur
  • Latte Window Colors

Widgets

  • Active Window Control
  • Simple Monitor

双系统蓝牙共享

虽然有人说双系统蓝牙键盘能直接切换,但无论如何我的都不行,因为两个系统下蓝牙键盘的物理地址相同,但Key不一样,导致没法直接切换。每次切换系统都得重新配对一次,那这属实麻烦。

解决方法就是修改Windows或Linux端的Key值,使得两个系统下的Key值相同即可。

Fedora端:
需要以root身份访问并修改蓝牙信息

# cd /var/lib/bluetooth/aa:bb:cc:dd:ee:ff/aa:bb:cc:dd:ee:ff
# vim info

[LinkKey]下的Key即为我们需要的值。

Windows端:
Windows不能直接在注册表里访问蓝牙信息,会显示权限不足,需要下载微软官方的工具PsExec,然后在管理员权限下的cmd执行:

PsExec.exe -s -i regedit

以此打开注册表,然后进入HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\BTHPORT\Parameters\Keys\aabbccddeeff, 其Data即为Key值


中文输入法配置

目前Fcitx已经发布了version 5,几乎能开箱即用,这里附上GitHub地址和官方wiki地址。

安装:

$ sudo dnf install fcitx5 fcitx5-chinese-addons kcm-fcitx5

然后在~/.zshrc里添加

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

最后在Configure里的input methods添加pinyin即可。


多触摸屏

我的笔记本是双触摸屏,但KDE默认的触摸映射是每个触摸屏都映射到两个屏幕上,这就导致点的地方和鼠标的位置有很大的偏差。解决方案是手动将每个触摸屏单独映射到自身的屏幕,而不是所有屏幕。

首先获取显示器的编号

$ xrandr

然后获取触摸屏的编号和id

xinput --list

最后将触摸屏和显示器重新映射一下即可

xinput --map-to-output 'pointer:xxxxxxxxx' eDP-1

KDE Connect

KDE Connect能帮助我们在电脑和手机之间建立快速便捷的联系,比如互传文件,这样就不用装微信或者搭FTP了。不过默认情况下Fedora的防火墙是没有打开KDE Connect需要使用的Ports的,所以手机上无法搜索到电脑,需要在Firewall里允许端口1714-1764


VS Code

首先将VS Code的官方Key和源导入到包管理中:

$ sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
$ sudo sh -c 'echo -e "[code]\nname=Visual Studio Code\nbaseurl=https://packages.microsoft.com/yumrepos/vscode\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/vscode.repo'

然后安装即可:

$ sudo dnf check-update
$ sudo dnf install code

dnf版本锁

由于Fedora经常更新内核,每次更新内核我们都要重新导入NVIDIA驱动的密钥,所以我们可以加个版本锁,便于我们手动更新内核。

$ sudo dnf install 'dnf-command(versionlock)'
$ sudo dnf versionlock add "kernel*"