XF

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

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

备份