前段时间重新安装了 Ubuntu 22.04 LTS,安装后没有显示 GRUB 引导页面(默认自动跳过),直接使用默认内核启动,而我需要变更一下默认的内核版本,特此记录一下修改过程。
安装其他版本内核
Ubuntu 中安装其他版本的内核非常简单,内核其实就是相当于一个软件(DEB 包),安装方式与其他软件并没有啥区别。首先,使用命令 uname -sr
就可以查看当前运行的内核版本。
注意,这里说的是安装一个其他版本的内核,与更新当前 Ubuntu 的内核不同。如果是更新当前 Ubuntu 的内核,则是直接使用命令 sudo apt-cache search linux-image-
可以搜到针对当前 Ubuntu 版本的官方发布的不同版本的内核,然后使用 sudo apt-get install xxx
即可。
https://kernel.ubuntu.com/~kernel-ppa/mainline/ 上提供的内核是由未经修改(默认情况下,Ubuntu 系统使用 Ubuntu 存储库提供的 Ubuntu 修改过的内核)的上游内核(upstream kernel)源代码制成,但使用了 Ubuntu 内核配置文件。 然后,将这些文件打包成 Ubuntu .deb 文件,以方便大家使用。
这些内核不受支持(不提供任何安全更新)
手动安装
要安装新的 Ubuntu 的内核,首先打开 http://kernel.ubuntu.com/~kernel-ppa/mainline/,然后从列表中选择需要的版本。打开页面就会发现 Ubuntu 官方对该内核针对不同架构平台的构建(xxx/build
)和测试(xxx/self-tests
)情况,所以,务必注意不要选择错了架构(例如我这里是 amd64)。
如上所示,内核并不是只有一个包,通常会有 linux-headers-*-generic_*
、 linux-headers-*_all
、 linux-image-unsigned-*-generic_*
、 linux-modules-*-generic_*
四个软件包(我们通常需要的就是名字中带有 generic
字样的包),必须都进行安装。
- 下载各个包
wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.19.17/amd64/linux-headers-5.19.17-051917-generic_5.19.17-051917.202210240939_amd64.deb wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.19.17/amd64/linux-headers-5.19.17-051917_5.19.17-051917.202210240939_all.deb wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.19.17/amd64/linux-image-unsigned-5.19.17-051917-generic_5.19.17-051917.202210240939_amd64.deb wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.19.17/amd64/linux-modules-5.19.17-051917-generic_5.19.17-051917.202210240939_amd64.deb
- 直接使用命令
sudo dpkg -i *.deb
安装下载的所有包即可
如下所示,某些内核下面可能还会有一些与 generic
对应的 lowlatency
的包。lowlatency
是用于工业嵌入式系统的低延迟 Linux 内核。官方介绍:https://ubuntu.com/blog/industrial-embedded-systems-iii。
Mainline Kernel Installer
相比手动安装,Ubuntu 下还有个第三方的带 GUI 的内核安装器:Mainline Kernel Installer,我们只需要点点鼠标,其会自动从 http://kernel.ubuntu.com/~kernel-ppa/mainline/ 下载内核的各个包,然后安装。
- 添加安装源
sudo add-apt-repository ppa:cappelikan/ppa -y
- 安装
sudo apt install mainline
- 从开始界面打开 Mainline Kernel Installer 选择要安装的内核即可
Mainline Kernel Installer 会自动过滤掉不支持当前架构平台的内核
修改默认版本内核
在实际工作中,有时候我们需要在 Ubuntu 中添加多个不同版本的内核。所有已安装的可用内核可以在 /boot/grub/grub.cfg
这个文件中查看到。/boot/grub/grub.cfg
这里面就对应于 GRUB 引导页面中的各条目内核的启动参数。
命令行方式
-
首先打开
sudo nano /boot/grub/grub.cfg
,从中选择要配置的内核参数。这个文件就是 GRUB 启动项的菜单描述文件!GRUB 在启动中会读取该文件,然后显示出来就是我们看到的 GRUB 引导界面。
我这里没有安装其他内核,默认的是有Linux 5.15.0-53-generic
和Linux 5.15.0-56-generic
这两个(以及这两个对应的 recovery mode 模式)。其中,我添加的蓝色和红色标号代表不同层级的菜单项的标号。不要试图直接编辑
/boot/grub/grub.cfg
,这个文件会根据默认配置自动更新 -
编辑默认的 GRUB 配置文件:
sudo nano /etc/default/grub
,其中,默认的GRUB_DEFAULT=0
就表示使用上面的第 0 个菜单项(也就是默认选中 Ubuntu 这条菜单),这里我以修改为Linux 5.15.0-53-generic
为例。
我们只需要将需要的内核对应的菜单添加到GRUB_DEFAULT=0
这一项上即可。注意,修改的格式是需要包含菜单层级:Advanced options for Ubuntu>Ubuntu, with Linux 5.15.0-53-generic
或者直接简写1>2
由于内容中包含了空格,因此必须使用双引号
-
保存后退出。然后执行
sudo update-grub
,最后sudo reboot
重启应该就可以会自动选择我们指定的内核了。
grub-customizer
Ubuntu 中有一个名为 grub-customizer
的带 GUI 的 GRUB 编辑器,不喜欢使用命令行的可以直接安装这个工具。使用也比较简单直接,简单说一下如何安装,就不过多介绍使用方法了。
- Ubuntu 20.04 版本可以直接使用命令
sudo apt install grub-customizer
来安装 - Ubuntu 22.04 中由于一个 BUG,官方没有提供该工具,因此需要从第三方安装源进行安装:
sudo add-apt-repository ppa:danielrichter2007/grub-customizer sudo apt update sudo apt install grub-customizer
开启 GRUB 引导页面
在默认情况下,如果系统只有一个版本的 Ubuntu(或者说只有一个操作系统),GRUB 引导页面是不会显示的。如果需要打开 GRUB 引导页面就需要编辑 Ubuntu 中的 GRUB 配置文件(不喜欢命令行的也可以直接使用上面说的 grub-customizer
)。
- 编辑默认的 GRUB 配置文件:
sudo nano /etc/default/grub
- 将
GRUB_TIMEOUT_STYLE=hidden
这一行前加个#
注释掉或者改为GRUB_TIMEOUT_STYLE=menu
- 修改
GRUB_TIMEOUT=0
,添加一个合适的启动超时时间,单位是秒。超时时间内如果无操作,则自动启动。
- 将
- 保存后退出。然后执行
sudo update-grub
,最后sudo reboot
重启应该就可以看到 GRUB 引导界面了。
如果只有一个内核,开启 GRUB 引导页面貌似也没啥意义,还额外增加了启动时间。通常,我们在安装了不同内核时才需要开启。当然,在某些情况下,安装内核后,相关工具可能自动就给我开启了!
远程桌面
Ubuntu 22.04 自带了微软搞的 RDP(Remote Desktop Protocol),并且是默认的远程桌面,因此,我们可以直接使用 Windows 的远程桌面进行连接。同时也带了 VNC 远程桌面,再也不用手动安装各种 VNC 服务端了。
Ubuntu 22.04 中的这套远程桌面其实就来自于最新的 GNOME 中的 gnome-remote-desktop
。gnome-remote-desktop
还有个配套的命令行工具 grdctl
,通过 grdctl
可以直接在 SSH 中来修改上面 GUI 中的配置。
处理锁屏断开问题
上面这些都不是重点,重点是默认的远程桌面在自动息屏(屏幕变黑)或者手动执行 Lock 锁屏之后就会断开连接,然而,如果把 Ubuntu 22.04 的息屏直接关闭,屏幕就会一直亮着(容易被领导窥屏),再也不会锁屏了(手动锁屏还是会断开远程桌面)。
Ubuntu 使用的是 GNOME 桌面,GNOME 提供了很多插件,最终,我在 GNOME 插件中发现了 Allow Locked Remote Desktop
这个插件,完美解决了上面的问题。在 Ubuntu 下,GNOME 插件有个带 GUI 的管理程序,通过管理程序可以方便安装卸载各种插件:sudo apt install gnome-shell-extension-manager gnome-shell-extensions
。
处理重启无法连接问题
还有一种情况,当我们重启电脑后,远程桌面是无法链接的,因为默认用户没有启用自动登录,导致没有可用的账户来进行远程链接。然而,并不是开了自动登录就可以用的,因为权限问题,自动登录后不允许远程操作,这和常用的 Windows 还是有很大差别的。
解决方法就是将修改 Ubuntu 中的秘钥链:Ubuntu 提供了 Passwords and Keys 这个 GUI 程序,打开后修改 Login 的密码为空(直接在 Login 上鼠标右键,输入原密码,新密码留空,确定即可)。以后即使重启电脑,也会自动登录并可以进行远程桌面链接了(与 Windows 体验一模一样)。
参考
- https://linuxhint.com/install-linux-kernel-ubuntu/
- https://linuxhint.com/install-upgrade-latest-kernel-ubuntu-22-04/
- https://codechacha.com/ja/ubuntu-update-kerenl/