Linux 之十八 Ubuntu 22.04 配置内核版本、GRUB 引导、远程桌面、包后缀(-dev、-dbg等)、Ubuntu 阶段更新

  前段时间重新安装了 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 内核配置文件。 然后,将这些文件打包成 .deb 文件,以方便大家使用。

这些内核不受支持,不提供任何安全更新

手动安装

  要安装新的 Ubuntu 的内核,首先打开 http://kernel.ubuntu.com/~kernel-ppa/mainline/,然后从列表中选择需要的版本。打开页面就会发现 Ubuntu 官方对该内核针对不同架构平台的构建(xxx/build)和测试(xxx/self-tests)情况,所以,务必注意不要选择错了架构(例如我这里是 amd64)。
在这里插入图片描述
  如上所示,内核并不是只有一个包,通常会有 linux-headers-*-generic_*linux-headers-*_alllinux-image-unsigned-*-generic_*linux-modules-*-generic_* 四个软件包(我们通常需要的就是名字中带有 generic 字样的包),必须都进行安装。

  1. 下载各个包
    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
    
  2. 直接使用命令 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/ 下载内核的各个包,然后安装。

  1. 添加安装源 sudo add-apt-repository ppa:cappelikan/ppa -y
  2. 安装 sudo apt install mainline
  3. 从开始界面打开 Mainline Kernel Installer 选择要安装的内核即可
    在这里插入图片描述

Mainline Kernel Installer 会自动过滤掉不支持当前架构平台的内核

修改默认版本内核

  在实际工作中,有时候我们需要在 Ubuntu 中添加多个不同版本的内核。所有已安装的可用内核可以在 /boot/grub/grub.cfg 这个文件中查看到。/boot/grub/grub.cfg 这里面就对应于 GRUB 引导页面中的各条目内核的启动参数。

命令行方式

  1. 首先打开 sudo nano /boot/grub/grub.cfg,从中选择要配置的内核参数。这个文件就是 GRUB 启动项的菜单描述文件!GRUB 在启动中会读取该文件,然后显示出来就是我们看到的 GRUB 引导界面。
    在这里插入图片描述
      我这里没有安装其他内核,默认的是有 Linux 5.15.0-53-genericLinux 5.15.0-56-generic 这两个(以及这两个对应的 recovery mode 模式)。其中,我添加的蓝色和红色标号代表不同层级的菜单项的标号。

    不要试图直接编辑 /boot/grub/grub.cfg,这个文件会根据默认配置自动更新

  2. 编辑默认的 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

    由于内容中包含了空格,因此必须使用双引号

  3. 保存后退出。然后执行 sudo update-grub,最后 sudo reboot 重启应该就可以会自动选择我们指定的内核了。

grub-customizer

  Ubuntu 中有一个名为 grub-customizer 的带 GUI 的 GRUB 编辑器,不喜欢使用命令行的可以直接安装这个工具。使用也比较简单直接,简单说一下如何安装,就不过多介绍使用方法了。
在这里插入图片描述

  1. Ubuntu 20.04 版本可以直接使用命令 sudo apt install grub-customizer 来安装
  2. 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)。

  1. 编辑默认的 GRUB 配置文件:sudo nano /etc/default/grub
    在这里插入图片描述
    1. GRUB_TIMEOUT_STYLE=hidden 这一行前加个 # 注释掉或者改为 GRUB_TIMEOUT_STYLE=menu
    2. 修改 GRUB_TIMEOUT=0,添加一个合适的启动超时时间,单位是秒。超时时间内如果无操作,则自动启动。
  2. 保存后退出。然后执行 sudo update-grub,最后 sudo reboot 重启应该就可以看到 GRUB 引导界面了。
    在这里插入图片描述

  如果只有一个内核,开启 GRUB 引导页面貌似也没啥意义,还额外增加了启动时间。通常,我们在安装了不同内核时才需要开启。当然,在某些情况下,安装内核后,相关工具可能自动就给我开启了!

远程桌面

  Ubuntu 22.04 自带了微软搞的 RDP(Remote Desktop Protocol),并且是默认的远程桌面,因此,我们可以直接使用 Windows 的远程桌面进行连接。同时也带了 VNC 远程桌面,再也不用手动安装各种 VNC 服务端了。
在这里插入图片描述
  Ubuntu 22.04 中的这套远程桌面其实就来自于最新的 GNOME 中的 gnome-remote-desktopgnome-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 体验一模一样)。

包后缀

  在 Ubuntu 下使用 apt 命令安装软件包时,经常会遇到这些包都有各种各样的后缀。apt 命令安装软件包其实就是安装了一些其他软件的依赖(运行时 .so.a 文件)。注意,包全名的格式通常是 包名-版本-patch-后缀,例如:libusb-1.0-0。此外,包的版本号与包中运行时(全名格式通常与包差不多)的版本号可能不一致!

  • 无后缀:不带任何后缀的包就是一个包含软件运行时(.so 文件)包,以供其他软件运行时调用。当我们运行某个软件时就需要安装其依赖的这种不带后缀的包! 无后缀的包中的运行时是经过版本化的(运行时文件有版本后缀),如下所示:
    在这里插入图片描述

  • -dev:带 -dev 后缀的包是开发专用的,其中不仅包含运行时(.so.a 文件),还包含了该软件包对外提供的开发使用的各种头文件。当我们要编译某些软件源码时,就需要安装其依赖的带 -dev 后缀的包! -dev 后缀的包中的运行时通常是没有版本化的(运行时文件没有版本后缀),如下所示
    在这里插入图片描述

    1. debian、ubuntu 常用 -dev 后缀;red hat、centos、fedora 常用 -devel 后缀
  • -utils:带 -utils 后缀的包里面包含了一些该软件额外的命令行工具。

  • -dbg:带 -dbg 后缀的包里面包含调试符号,通常仅供开发人员使用该软件或调试软件的人员使用

  • -doc:带 -dbg 后缀的包里是本软件包的文档

The following packages have been kept back

  当我们使用 sudo apt upgrade 时,经常会遇到 The following packages have been kept back,被保留的软件包不会被升级。出现这个文件的很大原因是 Ubuntu 的阶段性更新策略导致的,从 21.04 开始apt 命令实现了阶段性更新策略(以前只有更新管理器支持阶段性更新)。

  在分批更新策略之下,更新包会优先推送给部分用户,以供测试及反馈,只有没问题后才会逐步大面积推送。我们可以在 https://ubuntu-archive-team.ubuntu.com/phased-updates.html 这个页面上看到更新的推送情况。

  阶段性更新是由 python3-update-manager 提供的,具体文件是在 /usr/lib/python3/dist-packages/UpdateManager/Core/UpdateList.py 中实现的。apt 设置与更新管理器设置略有不同:

Update-Manager::Always-Include-Phased-Updates;
APT::Get::Always-Include-Phased-Updates True;

Update-Manager::Never-Include-Phased-Updates;
APT::Get::Never-Include-Phased-Updates True;

可以通过告诉 apt 忽略阶段性更新来尽早获得更新:sudo apt -o APT::Get::Always-Include-Phased-Updates=true upgrade

参考

  1. https://linuxhint.com/install-linux-kernel-ubuntu/
  2. https://linuxhint.com/install-upgrade-latest-kernel-ubuntu-22-04/
  3. https://codechacha.com/ja/ubuntu-update-kerenl/
  4. https://askubuntu.com/questions/1246962

猜你喜欢

转载自blog.csdn.net/ZCShouCSDN/article/details/128188958
今日推荐