Ubuntu22.04配置流程

安装一些基本工具

sudo update && apt install curl net-tools

网络配置

我一般给虚拟机配置两张网卡,一个用于NAT连接互联网,一个用于局域网内固定IP通信,在你希望做网络隔离的时候,只需要把NAT的网络关了就行,局域网内的环境用另一个网卡通信就行了。

如下图,1号是NAT,2号是仅主机的一个桥接网络

网络就配置完毕了。

终端初始化

因为习惯用zsh的命令补全了,还可以使用一些终端的主题,所以写了一个脚本,可以帮我自动安装。init.sh脚本如下,可以帮助安装zsh和相关代码补全插件。

因为在中国的网络环境,不能直接访问github安装zsh,需要走代理,在脚本中配置正确的代理地址,然后测试能否访问google后,将开始安装omz等。

#!/bin/bash

# 请更换脚本中的代理
MY_PROXY="http://10.0.0.1:23333"

# 命令检查函数
check_command() {
    local command_name="$1"

    if command -v $command_name &>/dev/null; then
        return 0
    else
        return 1
    fi
}

# 目录检查函数
check_directory() {
    local directory_name="$1"

    if [ -d $directory_name ]; then
        return 0
    else
        return 1
    fi
}


# 安装软件函数
install_package() {
    local package_name="$1"

    echo "Installing $package_name..."

    # 判断当前系统类型
    if [ -x "$(command -v apt-get)" ]; then
        # Ubuntu 或 Debian
        sudo apt-get update
        sudo apt-get install -y $package_name
    elif [ -x "$(command -v yum)" ]; then
        # CentOS 或 RHEL
        sudo yum install -y $package_name
    elif [ -x "$(command -v pacman)" ]; then
        # Arch Linux
        sudo pacman -Sy $package_name --noconfirm
    elif [ -x "$(command -v zypper)" ]; then
        # openSUSE
        sudo zypper install -y $package_name
    else
        echo "Unsupported Linux distribution. Please install $package_name manually."
        exit 1
    fi
}

# Function to test connection with Google
test_connection() {
    echo "Testing connection with Google..."
    if curl -I -s -m 3 www.google.com | grep -q "200 OK"; then
        echo "Connection successful!"
    else
        echo "Connection timeout. Setting proxy..."
        export http_proxy=$MY_PROXY
        export https_proxy=$MY_PROXY
        source ${HOME}/.zshrc
        echo "Testing connection with Google using proxy..."
        if curl -I -s -m 3 www.google.com | grep -q "200 OK"; then
            echo "Connection successful using proxy!"
        else
            echo "Connection still timeout. Exiting..."
            exit 1
        fi
    fi
}

# zsh not found
if ! check_command "zsh" ; then
    install_package "zsh"
    # change default shell to zsh
    echo "Changing default shell to zsh..."
    sudo chsh -s $(which zsh) $USER
fi

# git not found
if ! check_command "git" ; then
    install_package "git"
fi

# 切换到 zsh
if [ -z "$ZSH_VERSION" ] ; then
    echo "Switching to zsh..."
    exec zsh "$0" "$@"
    exit
fi

# 网络没有问题
test_connection



# oh-my-zsh
if ! check_directory ${HOME}"/.oh-my-zsh";then  
  echo "oh-my-zsh installing..."
  sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
fi
# zsh-autosuggestions
if ! check_directory ${HOME}"/.oh-my-zsh/custom/plugins/zsh-autosuggestions";then
  echo "zsh-autosuggestions installing..."
  git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
fi

# zsh-syntax-highlighting
if ! check_directory ${HOME}"/.oh-my-zsh/custom/plugins/zsh-syntax-highlighting";then
  echo "zsh-syntax-highlighting installing..."
  git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
fi

echo "export LANG=zh_CN.UTF-8
export LC_ALL=zh_CN.UTF-8
export ZSH=\"${HOME}/.oh-my-zsh\"
alias vim=\"nvim\"
alias c=\"clear\"
alias pythpn=\"python3\"

local proxy_url=${MY_PROXY}
proxy () {
  export http_proxy=\"\$proxy_url\"
  export https_proxy=\"\$proxy_url\"
  echo \"HTTP Proxy on\"
}
noproxy () {
  unset http_proxy
  unset https_proxy
  echo \"HTTP Proxy off\"
}



ZSH_THEME=\"tjkirch\"
# ZSH_THEME=\"robbyrussell\"
# ZSH_THEME=powerlevel10k/powerlevel10k

plugins=(
  git
  zsh-autosuggestions
  zsh-syntax-highlighting
)
source \$ZSH/oh-my-zsh.sh
">${HOME}/.zshrc

source ${HOME}/.zshrc

echo "Zsh installation and configuration complete. Exiting script."

先在bash中,给予脚本可执行的权限,然后执行。

如果网络没问题,就可以正常安装了

然后成功进入zsh

再执行一遍改脚本,安装插件,替换zsh文件

安装字体

先安装支持中文比较好的字体

sudo apt update
sudo apt install fonts-noto-cjk fonts-noto-color-emoji

然后我们使用Nerd Fonts里的字体,Nerd Font是一组经过特殊处理的字体集合,它们在常规字体的基础上添加了大量的符号、图标和其他字符。这些额外的字符来自许多不同的开源字体和图标集,如Font Awesome、Octicons、Powerline Symbols、Devicons等。Nerd Font的主要目的是为开发者和系统管理员提供一种在终端和代码编辑器中使用丰富图标的方便方式。

Fira Code Nerd Font 和 Fira Code 的区别

  • Fira Code:Fira Code是一种流行的编程字体,它具有连字(ligatures)功能,可以将常见的代码符号组合显示为更容易辨识的单个字符符号(如===>!=等)。它的设计目的是提高代码的可读性和美观性。

  • Fira Code Nerd Font:Fira Code Nerd Font是在Fira Code的基础上添加了Nerd Font符号的版本。这意味着它不仅具有Fira Code的所有连字功能,还包含了大量额外的图标和符号,可以用于终端提示符、代码编辑器和其他需要这些符号的地方。

sudo apt install fonts-firacode

要快速安装Nerd Fonts,你可以将字体文件复制到系统的字体目录中。以下是具体步骤:

安装字体

在用户级别安装字体通常会将字体文件复制到~/.local/share/fonts目录。你可以在终端中运行以下命令来创建该目录(如果它不存在):

mkdir -p ~/.local/share/fonts
cp FiraCodeNerdFont*.ttf ~/.local/share/fonts/

在复制完成后,更新字体缓存以确保新安装的字体可用:

fc-cache -fv

可以通过以下命令来验证字体是否成功安装:

fc-list | grep "FiraCode"

如果看到输出包含FiraCodeNerdFont,则说明字体安装成功。

设置系统默认字体(用户级别)

创建或编辑用户级别的字体配置文件~/.config/fontconfig/fonts.conf。如果文件不存在,可以新建该文件:

mkdir -p ~/.config/fontconfig
nano ~/.config/fontconfig/fonts.conf

在文件中添加以下内容,以设置Fira Code Nerd Font为默认字体:

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
    <!-- 设置无衬线字体为 Fira Code Nerd Font -->
    <alias>
        <family>sans-serif</family>
        <prefer>
            <family>Fira Code Nerd Font</family>
        </prefer>
    </alias>
    <!-- 设置有衬线字体为 Fira Code Nerd Font -->
    <alias>
        <family>serif</family>
        <prefer>
            <family>Fira Code Nerd Font</family>
        </prefer>
    </alias>
    <!-- 设置等宽字体为 Fira Code Nerd Font -->
    <alias>
        <family>monospace</family>
        <prefer>
            <family>Fira Code Nerd Font</family>
        </prefer>
    </alias>

    <!-- 设置简体中文字体为 Noto Sans CJK SC -->
    <match>
        <test name="lang">
            <string>zh-cn</string>
        </test>
        <edit mode="prepend" name="family">
            <string>Noto Sans CJK SC</string>
        </edit>
    </match>
    <match>
        <test name="lang">
            <string>zh-sg</string>
        </test>
        <edit mode="prepend" name="family">
            <string>Noto Sans CJK SC</string>
        </edit>
    </match>

    <!-- 设置繁体中文字体为 Noto Sans CJK TC -->
    <match>
        <test name="lang">
            <string>zh-tw</string>
        </test>
        <edit mode="prepend" name="family">
            <string>Noto Sans CJK TC</string>
        </edit>
    </match>
    <match>
        <test name="lang">
            <string>zh-hk</string>
        </test>
        <edit mode="prepend" name="family">
            <string>Noto Sans CJK TC</string>
        </edit>
    </match>
    <match>
        <test name="lang">
            <string>zh-mo</string>
        </test>
        <edit mode="prepend" name="family">
            <string>Noto Sans CJK TC</string>
        </edit>
    </match>

    <!-- 设置Emoji字体为 Noto Color Emoji -->
    <match>
        <edit mode="prepend" name="family">
            <string>Noto Color Emoji</string>
        </edit>
    </match>
</fontconfig>

保存并关闭文件。

验证字体设置

可以通过以下命令验证字体设置:

fc-match sans-serif
fc-match serif
fc-match monospace

这些命令应该返回Fira Code Nerd Font

安装kitty

Kitty 终端是一个现代化、功能丰富的终端模拟器,特别适合在 Linux 系统上使用

主要功能

  1. GPU 加速:利用 GPU 进行渲染,提供更快的性能和低延迟。

  2. 多种布局:支持分屏和多标签页,方便用户组织和管理多个终端会话。

  3. 远程控制:可以通过 SSH 在远程机器上启动并控制终端会话。

  4. 可配置:支持高度自定义,包括键绑定、配色方案和布局设置。

  5. 图形化:支持显示图像和其他图形内容,适用于需要图形输出的应用。

  6. Unicode 和 Emoji 支持:全面支持 Unicode 和多种字体,包括 emoji。

优点

  1. 高性能:由于使用 GPU 加速渲染,相比其他终端模拟器,Kitty 提供更流畅和快速的体验。

  2. 可扩展性:支持插件和脚本,用户可以根据需求扩展终端功能。

  3. 便捷的分屏功能:内置的分屏功能使得在同一窗口中管理多个终端会话更加方便。

  4. 易于配置:通过简单的配置文件,用户可以轻松定制 Kitty 的外观和行为。

  5. 开源:作为开源软件,Kitty 具有活跃的社区支持,用户可以自由地报告问题、贡献代码和建议新功能。

  6. 远程支持:强大的远程控制功能,使其在远程开发和运维场景中非常有用。

在 Ubuntu 中的安装

为了安装更新的版本,我们选择Kitty官方提供的方法

curl -L https://sw.kovidgoyal.net/kitty/installer.sh | sh /dev/stdin

kitty配置文件位于~/.config/kitty/kitty.conf

创建kitty应用程序

要将 Kitty 添加到 Ubuntu 的应用程序菜单中,你可以创建一个 .desktop 文件,然后将其放置在合适的位置。这样做可以让 Kitty 在应用程序菜单中显示,并能通过图形界面启动。

以下是创建和安装 Kitty 到应用程序菜单的步骤:

1. 创建 .desktop 文件

打开文本编辑器(比如 geditnano),并输入以下内容:

[Desktop Entry]
Version=1.0
Type=Application
Name=Kitty Terminal
Comment=Fast, feature-rich terminal emulator
Exec=/home/edward/.local/kitty.app/bin/kitty
Icon=/home/edward/.local/kitty.app/share/icons/hicolor/256x256/apps/kitty.png
Terminal=false
Categories=Utility;TerminalEmulator;

请注意以下几点:

  • Name:显示在应用程序菜单中的名称。

  • Comment:对 Kitty 的简短描述。

  • Exec:Kitty 可执行文件的完整路径。

  • Icon:Kitty 的图标文件路径。确保替换为实际的路径。

  • Terminal:是否在终端中运行。对于终端仿真器应用程序,通常设为 false

  • Categories:指定应用程序所属的类别,这里是终端仿真器。

2. 保存 .desktop 文件

将上面的内容保存为 kitty.desktop 文件。可以选择将文件保存在 ~/.local/share/applications/ 目录下,或者 /usr/share/applications/ 目录下。前者对当前用户可见,后者对所有用户可见。

3. 设置文件权限(如果需要)

确保 .desktop 文件具有执行权限,执行以下命令:

chmod +x ~/.local/share/applications/kitty.desktop

4. 更新应用程序缓存

如果将文件保存到 /usr/share/applications/ 目录下,可以使用以下命令更新应用程序缓存:

sudo update-desktop-database

配置成功后,kitty会正常显示图标

安装starship

➜  ~ curl -sS https://starship.rs/install.sh | sh

  Configuration
> Bin directory: /usr/local/bin
> Platform:      unknown-linux-musl
> Arch:          x86_64

> Tarball URL: https://github.com/starship/starship/releases/latest/download/starship-x86_64-unknown-linux-musl.tar.gz
? Install Starship latest to /usr/local/bin? [y/N] y
! Escalated permissions are required to install to /usr/local/bin
> Installing Starship as root, please wait…
✓ Starship latest installed

> Please follow the steps for your shell to complete the installation:
  bash
  Add the following to the end of ~/.bashrc:

    eval "$(starship init bash)"

  zsh
  Add the following to the end of ~/.zshrc:

    eval "$(starship init zsh)"

  ion
  Add the following to the end of ~/.config/ion/initrc:

    eval $(starship init ion)

  tcsh
  Add the following to the end of ~/.tcshrc:

    eval `starship init tcsh`

  xonsh
  Add the following to the end of ~/.xonshrc:

    execx($(starship init xonsh))

  fish
  Add the following to the end of ~/.config/fish/config.fish:

    starship init fish | source

  elvish
  Warning Only elvish v0.17 or higher is supported.
  And add the following to the end of ~/.elvish/rc.elv:

    eval (starship init elvish)

  nushell
  Warning This will change in the future.
  Only Nushell v0.78 or higher is supported.
  Add the following to the end of your Nushell env file (find it by running $nu.env-path in Nushell):

    mkdir ~/.cache/starship
    starship init nu | save -f ~/.cache/starship/init.nu
  And add the following to the end of your nu config file (find it by running $nu.config-path in Nushell):

    use ~/.cache/starship/init.nu

  PowerShell
  Add the following to the end of Microsoft.PowerShell_profile.ps1:
  You can check the location of this file by querying the $PROFILE variable in PowerShell.
  Typically the path is ~\Documents\PowerShell\Microsoft.PowerShell_profile.ps1 or ~/.config/powershell/Microsoft.PowerShell_profile.ps1 on -Nix.

    Invoke-Expression (&starship init powershell)

  Cmd
  You need to use Clink (v1.2.30+) with Cmd. Add the following to a file starship.lua and place this file in Clink scripts directory:

    load(io.popen('starship init cmd'):read("*a"))()


➜  ~

配置SSHD

sudo apt install openssh-server
  • 打开或创建 ~/.ssh/authorized_keys 文件:
nano ~/.ssh/authorized_keys