标签 Ubuntu 下的文章

Ubuntu系统,如何让dkms编译的内核模块支持安全启动?

1 在BIOS中打开SecureBoot支持

这因为不同品牌的计算机设置不尽相同,就不做详细说明了。
根据自己计算机的实际情况,搜一下基本上都能找方法。
或者找一下购买计算机附赠的手册,一般也能找到开启/关闭安全启动的方法

在Ubuntu系统中,查看SecureBoot的状态:

mokutil --sb-state

2 安装必要软件包

sudo apt-get install --yes shim-signed mokutil

3 创建签名内核模块需要的密钥

sudo update-secureboot-policy --new-key

生成了两文件:

ls /var/lib/shim-signed/mok/
MOK.der  MOK.priv

MOK.der --- 公钥

MOK.priv --- 密钥

4 公钥导到安全启动的信任列表

sudo mokutil --import /var/lib/shim-signed/mok/MOK.der

这一步会要求设置一个密码,可随意设个简单密码就行。

注意:这个命令仅是做一个“导入密钥的计划”,真正导入需要重启一下,进行实操。

5 重启计算机导入公钥

重启后就进入了一个操作界面,分别选择:

Enroll MOK -> continue -> yes -> password -> reboot

password 就是上一步import时,设置的密码

注意:

如果这个环节有哪一步选错了,可以重复4,5

6 内核模块签名

搞了上面的操作之后,dkms再编译完内核模块,

就会自动使用/var/lib/shim-signed/mok下的密钥,

对生成的内核模块进行签名

所以只需要重新编译一些内核模块即可:

for m in $(dkms status |sed 's|[/:]|,|g;s|[ \t]||g' |awk -F, '{print $1"/"$2}' |sort |uniq)
do
    dkms remove ${m} --all
    for v in /lib/modules/*
    do
        test -d "${v}/initrd" || continue
        v=$(basename $v)
        dkms install ${m} -k ${v}
    done
done

7 完成

此后,就用dkms辅助编译内核模块(自动签名),SecureBoot不再是个麻烦。
例如:
    sudo apt-get install --yes nvidia-driver-xxx
    sudo apt-get install --yes virtualbox

Ubuntu 22.10 PipeWire 无声音的解决方法

Ubuntu 22.10默认使用PipeWire作为声音服务器,替换之前的PulseAudio。

PipeWire是个新东西,算是刚刚开始较大范围使用,结果就是表现的不太行。

至少在我自己的ThinkPad X1上就没有声音。解决的办法也很简单就用PulseAudio。

具体操作:

1 确保 PulseAudio 已安装

sudo apt install --yes pulseaudio pulseaudio-module-bluetooth pulseaudio-utils gstreamer1.0-pulseaudio

2 禁用 PipeWire

因为很多桌面系统组件都有依赖PipeWire,卸载PipeWire是个问题,所以就不卸载了。

想办法不让TA起来就可以啦。

具体操作:


systemctl --user disable pipewire{,-pulse}.service
systemctl --user stop pipewire{,-pulse}.{socket,service}
tmpdr=/usr/lib/systemd/user/backups
sudo mkdir -p ${tmpdr}
sudo mv /usr/lib/systemd/user/pipewire* ${tmpdr}

3 启用 PulseAudio

systemctl --user enable pulseaudio.service
systemctl --user start pulseaudio

结束语

经过上述操作,Ubuntu 22.10就能正常出声音了

虽然PipeWire相比PulseAudio是新技术,但还没有经过大量机器和时间的考验,

预计还得经过很长时间才能做到安装完成后立即可用。