Ubuntu: Softwares and Configurations

Ubuntu (Desktop) 新安装之后的一些初始化配置,作为个人备忘(省略了很多细节)。

安装 (Alongside with Windows)

现在的安装向导已经很完善了,在此不赘述。

过一遍系统设置

显示设置、时间同步、登录 Ubuntu Single Sign-On 等。

时间同步

Ubuntu 默认使用 ntp.ubuntu.com 服务器,不过我的机器所在的网络(我系实验室内网)屏蔽了对外的 NTP 协议,于是无法和默认 NTP Server 同步。但内网里面有个 NTP 服务器可以用。

可以修改 /etc/systemd/timesyncd.conf 文件 [Time] 一节的 NTP= 来指定一个能够访问的 NTP 服务器。 文档: https://ubuntu.com/server/docs/network-ntp

检查专有驱动

如果有 Nvidia 显卡,检查一下是不是用的最新专有驱动,显示为 (proprietary, tested)。 (安装系统时即可以选择安装专有驱动。如果当时没选,现在也可以装)

更新系统

调整 APT 软件源(如需要)

不知为何,我虽然人在 HK,但所在的网络访问默认源 http://hk.archive.ubuntu.com 很慢。如有类似需要,可更换软件镜像源。

sudo apt update
sudo apt upgrade

JetBrains IDEs

目前我使用 snap 安装,如

snap install --classic clion

不知 JetBrains Toolbox 何时上架 snapcraft,如有,用 Toolbox 来管理 JetBrains 系 IDE 也不失为一种选择。

字体

我没有复杂的字体管理需求。偶尔有少量字体(例如配合 powerlevel10k 使用的 Nerd-Fonts)想要自行下载安装,可以用下列简易的方法(适合单用户):

mkdir ~/.fonts

将下载的字体都复制到上述文件夹中,然后刷新字体缓存

fc-cache -f -v

命令行工具

需要用到的小工具,如 vim, tmux, git, zsh, gpg, scdaemon, htop, curl 等,如果没有,自行用 apt 安装,不再赘述。

命令行工具的配置文件用自己维护的 dotfiles (托管于 GitHub),git clone 后运行里面的配置脚本即可。

SSH Server

如果没有安装 SSH Server (Ubuntu Desktop 很可能没装),先 apt install ssh 然后按自己需求修改下 /etc/ssh/sshd_config 配置文件。

用户目录下配置好 $HOME/.ssh/authorized_keys 以便远程登录。

Syncthing

添加 Syncthing 的 APT 源安装。文档:https://syncthing.net/downloads/

启动服务用 sudo systemctl start syncthing@<username> 以用户权限启动。 另外记得 enable。然后去 localhost:8384 配置一下就好。

Docker

Follow 官方文档。

添加当前用户到 docker 用户组可以免去每次操作 Docker 时的 sudo:

sudo usermod -aG docker <username>

NVIDIA-Docker

需要在 Docker containers 里面调用 NVIDIA GPU 的话,安装 NVIDIA-Docker2.

Follow this guide: NVIDIA Toolkit Install Guide - Docker

C++ 环境

构建系统我用 CMake 和 Ninja。编译器套件用 GCC 或 LLVM(Clang)。

如无特殊需求,用 apt 解决一切问题,采用默认版本(Ubuntu 20.04 默认的 GCC 是 9.x.x)。

sudo apt install build-essential cmake ninja-build

CMake 用默认版本就够了,也可以添加 Kitware 的源,装最新版。不过平时用 CLion 的时候我都是用 CLion bundled CMake。

目前 Ubuntu 20.04 LTS 官方源里的 LLVM 版本是 11,如果想装最新的可以用 LLVM 的源,或它的一键脚本:

sudo bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)"

但这一步并没有为 clang 创建快捷方式,即只有 /usr/bin/clang-12 而没有 /usr/bin/clang。如要创建快捷方式甚至将 clang 设置为默认的 cc/c++ 编译器,可以使用 update-alternatives:

sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-12 10 \
                         --slave /usr/bin/clangd clangd /usr/bin/clangd-12
sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-12 10

# 设置 clang 为默认 cc/c++ compiler. 如果不需要,跳过这步,保留 GCC 为默认。
sudo update-alternatives --install /usr/bin/cc cc /usr/bin/clang 30 \
  --slave /usr/share/man/man1/cc.1.gz cc.1.gz /usr/share/man/man1/clang-12.1.gz
sudo update-alternatives --install /usr/bin/c++ c++ /usr/bin/clang++ 30 \
  --slave /usr/share/man/man1/c++.1.gz c++.1.gz /usr/share/man/man1/clang-12.1.gz

Ref: update-alternatives-clang.sh

Visual Studio Code

官网下载 .deb 包,安装后自动添加 APT source list。

安装后登录 GitHub(或 Microsoft)账号,开启设置同步。

防火墙

可以 sudo apt install ufw.

记得如果是通过 SSH 操作,一定要先 sudo ufw allow <ssh port> 然后再 sudo ufw enable 免得把自己挡在外面。

浏览器

我习惯使用 Firefox,直接登录 Firefox account 等待同步即可。插件基本都会自动安装,但安装后都需要自行重新配置。

Mailvelope 插件 + GnuPG Backend

要使用 Mailvelope 浏览器插件并使用 GnuPG 的 Keyring,可能要自行编译安装 gpgme-json。(Ubuntu 20.10 及以后版本的 APT 官方源中似乎已经添加了 gpgme-json 包,拭目以待。20.04 LTS 我们暂时还是采取编译安装的办法)。我安装到 /opt/gpgme 目录下,以避免与其他 APT 安装的软件混淆。

sudo mkdir /opt/gpgme
sudo chown -R <username>:<groupname> /opt/gpgme

# Install dependencies (if not installed yet)
sudo apt install autoconf automake libgpg-error-dev libassuan-dev

# Get the source code
git clone https://dev.gnupg.org/source/gpgme.git
cd gpgme
./autogen.sh
./configure --prefix=/opt/gpgme
make && make install

然后根据 Mailvelope 的 GitHub Wiki 创建一个 App Manifest File 即可使用。

中文输入法

(TODO. 我习惯使用 ibus-rime)

LaTeX 环境

不需要追新的话,直接安装源里的 meta-package。最近几年 TeX Live 的发布节奏是在每年 4 月出新的 Release,与 Ubuntu 的 LTS 版本发布时间差不多,所以 Ubuntu LTS 版本通常打包的是上一年的 TeX Live 大版本。

sudo apt install texlive-full

反正如果及时跟进 Ubuntu LTS 的 dist upgrade 的话,我们安装的 TeX Live 也不会太旧。

然后需要配置一下 VS Code 和 PDF 阅读器之间的 Sync。

CUDA 相关

(待补充。这里如果使用 apt 安装 CUDA meta-package 可能导致前面提到的 Nvidia 显卡专有驱动被升级,不过没关系,最后能用就好)

Python

(待补充。可以直接用系统默认的 python3,如果有机器学习、数据处理等需要的话也可以选择 Anaconda 发行版。我个人习惯使用 pyenv。)

GDM Login Screen with Multiple Monitors

(待补充。)

系统目录结构

我们希望大致了解一个 Linux 发行版的 Directory Tree。 每个 Linux 发行版(乃至其他的类 Unix 系统)对于一些文件目录相关问题的处理方式可能有细微的差别,例如:

这里具体讨论 Ubuntu 的 Directory Tree。 Ubuntu 基本遵循 Filesystem Hierarchy Standard,官方描述文档: https://help.ubuntu.com/lts/installation-guide/armhf/apcs02.html

细节在此不赘述。一些值得留意的事项:

备份