Ubuntu 桌面系统的配置

这篇文章总结了作者的 Ubuntu 桌面系统的设置,它们对于日常使用可能非常重要。
目录

我目前尝试将 Ubuntu 作为我的主力操作系统。为此我做了大量的配置工作。网上有无数类似的介绍(比如,类似“安装 Ubuntu 22.04 后应该做的 10 件事),每一种设置也都有无数相关的介绍。此外,像其他 Linux 操作系统发行版一样, Ubuntu 的配置也是相当自由的,每个人对如何配置自己的系统都有自己独特的想法。尽管如此,我仍然觉得这篇文章对于那些试图使自己的 Ubuntu 系统在日常使用中更为称心的人有些作用。

1. 安装独立显卡驱动

对于那些有 A 卡的人来说,一切都很简单,但是对于那些有 N 卡的人来说,驱动和配置显卡都会是麻烦事。对于 Ubuntu 用户来说,在安装 N 卡驱动之前,最重要的是卸载多余的内核,而只保留当前正在使用的内核。

安装 Ubuntu 后的第一件事,就是运行以下命令

uname -r

来检查当前正在使用的内核。

运行以下命令

dpkg --list | grep linux-image

来检查当前系统安装了哪些内核。运行

sudo apt-get autoremove --purge <linux-image>

来删除多余的内核。这样做是因为,Ubuntu 的 N 卡显卡驱动安装程序会默认把驱动安装进第一个内核之中,而可能不是当前正在使用的内核,这会导致 N 卡驱动加载失败。

检查 /usr/src 这个文件路径,确保除了当前正在使用的内核所属的文件夹,没有其他内核的文件夹。

许多设备有安全启动选项。对于这些设备,强烈建议在安装 N 卡驱动之前,永久关闭安全启动。(但至少对于 Surface 设备而言,这不是必须的。可以通过注册 Mok key 来在安全启动模式下,加载 N 卡驱动。参见:/blog/how-to-install-linux-on-surface/ 。)

运行

sudo ubuntu-drivers install

来安装 NVIDIA 显卡驱动。不要尝试使用其他安装方法。这个命令会自动使用 DKMS 为当前使用的内核加载驱动,确保不会发生驱动加载失败的问题。

安装后,重启,运行nvidia-smi来检查驱动的加载情况,如果显示如下

Fri Apr  5 20:47:32 2024
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 535.161.07             Driver Version: 535.161.07   CUDA Version: 12.2     |
|-----------------------------------------+----------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |         Memory-Usage | GPU-Util  Compute M. |
|                                         |                      |               MIG M. |
|=========================================+======================+======================|
|   0  NVIDIA GeForce RTX 3050 ...    Off | 00000000:F3:00.0 Off |                  N/A |
| N/A   38C    P8              N/A /  10W |      7MiB /  4096MiB |      0%      Default |
|                                         |                      |                  N/A |
+-----------------------------------------+----------------------+----------------------+

+---------------------------------------------------------------------------------------+
| Processes:                                                                            |
|  GPU   GI   CI        PID   Type   Process name                            GPU Memory |
|        ID   ID                                                             Usage      |
|=======================================================================================|
|    0   N/A  N/A      2291      G   /usr/lib/xorg/Xorg                            4MiB |
+---------------------------------------------------------------------------------------+

则表示驱动加载正常。其他情况则不是。如果加载不正常,则无比检查前述步骤是否正确完成。

2. NVIDIA 显卡的使用

Windows 可以智能调用集成显卡和独立显卡,比如,只会在你运行大型游戏时,调用独立显卡,而在使运行其他程序时,默认使用集成显卡。重要的是,以这种模式运行时,独立显卡的性能不会有任何损失。

在 Ubuntu 中,尽管 NVIDIA 驱动也提供了 Prime 程序,并且可以选择 On-Demand 模式来调用显卡,但经测试,无法实现在 Windows 下的类似效果。在 NVIDIA settings 程序中,如果在“PRIME Profiles”菜单中选择的是“NVIDIA On-Demand”,那么当运行需要调用 NVIDIA 显卡的程序时,NVIDIA 并不能发挥应有的性能,而可能比集成显卡的性能还差!只有选择“NVIDIA (Performance Mode)”时,调用 NVIDIA 显卡时,才能发生它应有的性能。

但是,在这种情况下,存在一些问题:

  • 耗电更快,发热量更大;
  • 除了游戏(或其他会调用 NVIDIA 显卡的 GPU 密集型程序),其他所有程序的性能似乎都下降;
  • 经测试,似乎在 On-Demand 模式下,通过 CUDA 运行大模型不会有性能损失。
  • 如果您正在使用 Firefox ,可能需要使用更多的设置,才能继续对视频播放进行硬件加速。

简单说,开启“NVIDIA (Performance Mode)”之后,系统的整体性能会变差。

我的建议是,如果您不在 Linux 上玩游戏,或者也没有运行可能会使用到 NVIDIA 显卡的其他程序(比如使用 CUDA 的程序),那么我甚至建议您不要安装 NVIDIA 显卡驱动。您至少在一开始就做好决定。如果后续安装某些程序(比如 Flatpak)时,NVIDIA 显卡已经被驱动起来,就可能会自动配置以使用它,而卸载 NVIDIA 显卡驱动,可能会让这些程序的性能变得更糟。

如果您经常运行会用到 NVIDIA 显卡的程序,那么我建议直接在“NVIDIA (Performance Mode)”下运行系统。在“NVIDIA On-Demand”和“NVIDIA (Performance Mode)之间切换,需要频繁的重启系统,这的确不是很优雅。

在这种情况下,如果打算让 Firefox 在播放视频时采用硬件加速,您需要安装 nvidia-vaapi-driver 。首先运行

sudo apt install meson gstreamer1.0-plugins-bad libffmpeg-nvenc-dev libva-dev libegl-dev libgstreamer-plugins-bad1.0-dev

来安装所需依赖。然后下载 nvidia-vaapi-driver 的最新版本:https://github.com/elFarto/nvidia-vaapi-driver/archive/refs/tags/v0.0.11.zip

解压之后,进入解压后的文件夹中执行以下命令来安装 nvidia-vaapi-driver :

meson setup build
sudo meson install -C build

然后,运行

sudo gedit /etc/default/grub

GRUB_CMDLINE_LINUX_DEFAULT 中加上 nvidia-drm.modeset=1 。如下所示:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash acpi_osi=linux nvidia-drm.modeset=1"

保存和关闭后,运行

sudo update-initramfs -u
sudo update-grub

来使之生效。重启。

之后,运行

sudo gedit /etc/environment

添加

# Controls which backend this library uses. Either egl (default), or direct. See direct backend for more details.
NVD_BACKEND=direct
# Disables the sandbox for the RDD process that the decoder runs in.
MOZ_DISABLE_RDD_SANDBOX=1
# For libva versions prior to 2.15, this forces libva to load the nvidia backend.
LIBVA_DRIVER_NAME=nvidia
# Required for the 470 driver series only. It overrides the list of drivers the glvnd library can use to prevent Firefox from using the MESA driver by mistake.
_EGL_VENDOR_LIBRARY_FILENAMES=/usr/share/glvnd/egl_vendor.d/10_nvidia.json

来配置环境变量。保存和关闭后,运行

source /etc/environment

来使之生效。

之后,运行

sudo apt install ffmpeg

来安装 ffmpeg 。运行

ffmpeg -hwaccels

来验证。输出的结果中应包含vaapi

打开 Firefox,在地址栏中输入 about:config ,设置如下参数:

参数
media.ffmpeg.vaapi.enabledtrue
media.rdd-ffmpeg.enabledtrue
gfx.x11-egl.force-enabledtrue
widget.dmabuf.force-enabledtrue

之后,运行vainfo来验证是否成功安装。输入类似下面的:

libva info: VA-API version 1.17.0
libva info: User environment variable requested driver 'nvidia'
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/nvidia_drv_video.so
libva info: Found init function __vaDriverInit_1_0
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.17 (libva 2.12.0)
vainfo: Driver version: VA-API NVDEC driver [direct backend]
vainfo: Supported profile and entrypoints
      VAProfileMPEG2Simple            :	VAEntrypointVLD
      VAProfileMPEG2Main              :	VAEntrypointVLD
      VAProfileVC1Simple              :	VAEntrypointVLD
      VAProfileVC1Main                :	VAEntrypointVLD
      VAProfileVC1Advanced            :	VAEntrypointVLD
      VAProfileH264Main               :	VAEntrypointVLD
      VAProfileH264High               :	VAEntrypointVLD
      VAProfileH264ConstrainedBaseline:	VAEntrypointVLD
      VAProfileHEVCMain               :	VAEntrypointVLD
      VAProfileVP8Version0_3          :	VAEntrypointVLD
      VAProfileVP9Profile0            :	VAEntrypointVLD
      VAProfileHEVCMain10             :	VAEntrypointVLD
      VAProfileHEVCMain12             :	VAEntrypointVLD
      VAProfileVP9Profile2            :	VAEntrypointVLD
      VAProfileHEVCMain444            :	VAEntrypointVLD

最后打开 B 站,随意点开一个视频,设置“播放参数”,选择“AVI”,然后刷新,重新播放,然后打开 NVIDIA settings 程序,查看是否采用了视频因加速。

nvidia-settings
nvidia-settings

Video Engine Utilization不为 0,则意味着正在使用硬件加速来播放视频。1

当然您可能因为发现使用 NVIDIA 显卡不如使用 Intel 集显,您可以运行如下命令来卸载 nvidia-vaapi-driver 。

找到您安装 nvidia-vaapi-driver 的那个文件夹,进入其中的 build 文件夹,在终端运行:

sudo ninja uninstall

来卸载。最后把其余配置程序给还原。

3.配置输入法

Ubuntu 默认自带的中文输入法为 libpinyin。我建议不要在上面浪费半点时间。如果您喜欢 iBus 的外观,想继续使用 iBus 输入法框架,我建议您使用 ibus-rime 输入法引擎。

运行

sudo apt install ibus-rime

来安装 ibus-rime。rime 中文名称为“中州韻輸入法引擎”,以配置自由著称,并且不会侵犯隐私。经过使用,我觉得 Rime 的输入体验完全不输搜狗拼音了。但是,Rime 的配置特别复杂,简直可以说令人抓狂。我建议您直接使用某大佬配置的“雾凇输入法”。具体做法如下:

(1)安装 Rime 后重启系统,然后,进入系统设置,在“键盘-输入源”中,点+来添加“汉语”,并继续“中文(Rime)”来添加输入法。

(2)按徽标+空格来切换到 Rime 输入法,然后随便打几个字。

(3)在主目录(home)中,按ctrl+h来显示隐藏文件。

(4)找到 .config/ibus/rime,新建“default.custom.yaml”文件,内容为

patch:
# 仅使用「雾凇拼音」的默认配置,配置此行即可
__include: rime_ice_suggestion:/
# 以下根据自己所需自行定义,仅做参考。
# 针对对应处方的定制条目,请使用 <recipe>.custom.yaml 中配置,例如 rime_ice.custom.yaml
__patch:
 key_binder/bindings/+:
   # 开启逗号句号翻页
  # - { when: paging, accept: comma, send: Page_Up }
   #- { when: has_menu, accept: period, send: Page_Down }
#schema_list:
#- {schema: luna_pinyin_simp}
#- {schema: easy_en}
#"menu/page_size": 6 # 候选词个数

#ascii_composer:
 #switch_key:
   #Shift_L: commit_code #左shift提交字母

(5)下载雾凇输入法的仓库文件,解压后,复制和覆盖到这个文件夹之中。 (6)点击系统面板的左上角的 Rime 输入法图标(可能是一个“”字),再点击“部署”。

默认竖排显示候选菜单,如果需要,可以修改“~/.config/ibus/rime/build/ibus_rime.yaml”,添加或修改其中的一个参数为

style:
  horizontal: true

雾凇输入法的一些其他文件可能是不需要的,请根据自己的需要自行删除,当然,如果能够张正常使用,不必再动。

一些输入技巧:

  1. 尝试输入rq
  2. 尝试输入dt
  3. 尝试输入sj
  4. 尝试输入va

更需多输入技巧,请参考:https://dvel.me/posts/rime-ice/

4.在 Linux 上玩游戏

因为有了 Vulkan(一种图形 API) Linux 的游戏兼容性和体验已经远超 macOS。如果你想要玩的游戏是 Steam 上的,那么可以下载 Linux 版的 Steam。一般情况下,列明支持 steam 的游戏,在 Linux 上也将可用。

另外,对于一些不在 Linux 上的游戏,您也可以尝试 Lutris。中国版的 Lutris 是“Wine 游戏助手”。安装后,可以在“Wine 游戏助手”的网站上查找相关的游戏,然后使用预设的脚本来安装。

我现在唯一玩的游戏是坦克世界。而“Wine 游戏助手”恰好支持坦克世界(感激!)。在这一点上,Linux 可以说远胜 macOS 了。

不过,Linux 上使用 NVIDIA 显卡打游戏不如在 Windows 上那么方便。如果想要发挥 NVIDIA 显卡的性能,只能在 NVIDIA Settings 上将模式设置为 performance。而这会使电脑发热严重,且除了游戏,其他操作的性能都会变差。

我现在已经只使用 Intel 集成显卡,虽说游戏画面没那么好了,但更稳定、能耗更低。如果不是因为考虑到未来可能需要在机子上片跑 AI 模型(因为需要用到 CUDA),我应该已经把 NVIDIA 显卡驱动给卸载了(已经跑上了)。毕竟留着还要额外耗电。

5.安装微信

目前,腾讯被迫为 UOS 等国产操作系统提供了微信软件适配。不过,在其他发行版上可能会无法登录。

不过,好心人已经把它打包,并且免除了发行版限制。我正在使用的是 flatpak 打包的。

安装之前,应先安装 Flatpak。推荐参照如何在 Ubuntu 中安装和使用 Flatpak这篇文章安装。注意,一定要设置其中的国内镜像(也就是上海交大的镜像,否则会慢的让你怀疑人生)。

安装本地的 Flatpak 包的命令如下:

flalpak install /path/to/flatpak-package

后面的那个路径,可以直接把文件拖进终端来解决。注意,安装开始后,可能要等很久才能有提示,请保持耐心。如果提示你第一次添加的 Flathub 地址现在是 Flathub-1,请选择“y”。如果安装时,让你选择从哪个镜像站下载依赖,选择“1”(现在是上海交大的那个镜像站)。

有一个重要提示,Flatpak 应用都在沙盒中运行,每个应用都可能有不同的沙盒环境,这导致了两个重要的问题:第一,Flatpak 比较浪费裁判空间,第二,Flatpak 应用无法使用系统代理。所以,不要过于依赖 Flatpak。

如果你遇到了代理问题,可以参考这篇文章:Flatpak 应用设置代理。亲测对于 Obsidian 有用,但对于其他一些软件无用。

不过,如果你不喜欢为了微信而安装臃肿的 Flatpak,可以使用国内 Debian 发行版“铜豌豆Linux”打包的版本。参考知乎的这篇文章:2024如何在Ubuntu上安装原生微信wechat weixin

可以不用安装它的软件商店,只需要添加它的软件源,再安装所需的软件即可。

wget -c -O atzlinux-v12-archive-keyring_lastest_all.deb https://www.atzlinux.com/atzlinux/pool/main/a/atzlinux-archive-keyring/atzlinux-v12-archive-keyring_lastest_all.deb
sudo apt update
sudo apt install com.tencent.wechat

目前我重装了 Ubuntu 22.04之后,就采用了第二种方法,杜绝 Flatpak 在我的电脑上生根发芽。

6.邮件客户端

在 Ubuntu 上找个能推送新邮件通知的邮件客户端实属不易。经实验,flatpak 版的 Geary 可以推送新邮件通知,而 Evolution 不行。你可能会发现,即使没有安装 Evolution,后台也能看到它的通知进程,然而,即使你安装了 Evolution,还是无法收到新邮件通知。

当然,也不要试图卸载这些进程。我曾尝试卸载,直接把整个 Gnome 都卸载了。

7.个性化调整

如果你像我一样喜欢和使用 Gnome,那么您可能需要对它做一些个性化设置。安装 Gnome shell extensions 是不错的方式。

首先,运行

install gnome-shell-extensions

来安装 Gnome shell extensions 的框架(或接口?),然后,如果你使用 Chrome,则在应用商店搜索和安装“GNOME Shell Integration”插件。启用后,访问 Gnome shell extensions 网站来搜索和安装你喜爱的插件。

在每一个插件页面中,与插件名称水平对齐的右侧都会有一个按钮,拉上按钮就可以安装和卸载该插件。

当然,您也可以通过 apt 命令也来安装插件:

apt-get update
apt-cache search gnome-shell-extension
apt-get install gnome-shell-extension-插件名

以下是我推荐的插件:

插件描述
Floating Panel可以使顶部面板分利于窗口边缘
Night Theme Switcher自动切换系统暗黑和明亮主题
OpenWeather在面板中显示天气信息
Vitals在面板中显示重要的系统指标信息
Compiz windows effect经典的窗口弹性动画
Bing Wallpaper每日更新 Bing 壁纸
Proxy Switcher在面板提供便捷的代理配置切换
EasyScreenCast在面板上提供便捷的录屏工具

8. 在 Ubuntu 上使用 OneDrive

参考这个网站来添加 OneDrive 的源,并安装它。对于 Ubuntu 24.04,运行如下命令:

echo 'deb http://download.opensuse.org/repositories/home:/npreining:/debian-ubuntu-onedrive/xUbuntu_24.04/ /' | sudo tee /etc/apt/sources.list.d/home:npreining:debian-ubuntu-onedrive.list
curl -fsSL https://download.opensuse.org/repositories/home:npreining:debian-ubuntu-onedrive/xUbuntu_24.04/Release.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/home_npreining_debian-ubuntu-onedrive.gpg > /dev/null
sudo apt update
sudo apt install onedrive

之后,运行

onedrive --synchronize

来完成首次备份。备份之前需要完成账户验证。终端会提供一个 URL,右键选择打开链接,这会跳转到浏览器,输入您的微软账号和密码后,会载入一个空白页面,这时,复制地址栏中的 URL,粘贴到终端,回车即可完成验证

备份速度这取决于您的文件的数量和大小。可以多次终止和继续,直到完成最终同步。

完成首次同步后,可以运行

onedrive --monitor

来监视文件的变化。

要使系统自动启动 OneDrive 的 monitor 服务,运行

sudo nano /etc/systemd/system/onedrive.service

添加如下内容

[Unit]
Description=OneDrive Sync Client
After=network.target

[Service]
Type=simple
ExecStart=/usr/bin/onedrive --monitor
Restart=always
User=your_username
Group=your_groupname

[Install]
WantedBy=multi-user.target

一般情况下,User 和 Group 都是你的电脑登录账号。可以运行

whoami

echo $USER

来查看。

最后,运行

sudo systemctl daemon-reload
sudo systemctl start onedrive.service
sudo systemctl enable onedrive.service

设置成功后,重启,在监视器中搜索 onedrive,看看是否已自动启动该进程。

9.备份、还原和急救

这是重中之重。折腾 Linux 系统最容易把系统搞崩溃,复杂的配置有时候恢复起来也觉得困难。

我建议使用 Timeshift 来备份、还原和急救系统。

运行sudo apt install timeshift来安装 Timeshift。

安装之后,打开程序,会又一个极为简单明了的配置引导。这里我重点说下备份目录的筛选问题。

首先,在“设定-用户”这一栏,对于当前的用户的主目录,选择“Include Only Hidden Files”,对于 root 用户的根目录,选择“Include All Files”。

其次,在“设定-筛选”这一栏,添加主目录中需要备份和排除的目录。列表左侧的+表示包含,-表示排除。参考如下图:

timeshift setting
timeshift setting
timeshift setting
timeshift setting

务必排除云盘同步文件夹。

下面说一下还原问题。当系统正在正常运行时,使用 Timeshift 还原备份很容易,就不赘述了。

当无法正常进入系统,但可以进入 GRUB,则在 GRUB 的菜单中选择 Recovery 模式,进入后,选择“root”,之后,运行

Recovery 模式
Recovery 模式
timeshift --list

这会列出备份快照列表,要还原其中一个,则运行(例如)

timeshift --restore --snapshot '2019-07-16_16-35-42' --skip-grub

如果连 GRUB 也无法进入,则可以通过 Live USB 来启动以试用 Ubuntu。联网,并在“软件和更新”程序中将第一个菜单“Ubuntu 软件”下的第二个选项“社区维护的自由和开源软件(universe)”勾选,之后尝试运行如下命令来安装 Timeshift:

sudo apt update
sudo apt install timeshift

安装成功后,可以执行图形界面的还原操作。

此外,您可以选择将一个折腾成熟和稳定的系统版本备份到外部存储设备上。将这个设备格式化为 EXT4,插入电脑,打开 Timeshift,在备份位置菜单中可以看到这个外部存储设备。选择将其备份到这个设备上。这对于系统完全崩溃后的急救,以及重装系统非常有用。不过我还没有尝试从外部存储设备上急救过系统。可以参考这篇文章的说明。

注意,在 timeshit 设置向导种,不要勾选“停止计划任务的 cron 电子邮件”,这会使 timeshift 绑定一个 cronlab 的组件,很可能会导致在 recovery 模式下无法运行 timeshift 命令。

Footnotes

  1. 这部分的介绍主要来自 N 卡 Linux B站视频硬解-使用 nvidia-vaapi-driver这篇文章。