一. 准备

Ⅰ.下载 Win32DiskImager

Ⅱ.下载 Ubuntu 镜像,地址:https://ubuntu.com/download/raspberry-pi

Ⅲ.写入系统至TF卡中

Ⅳ.写入完成后,打开名为 system-boot 的磁盘,然后打开 config.txt 文件,修改显存 gpu_mem 参数(单位MB,推荐512)

Ⅴ.卡片插入树莓派4中,开机

补充:如果安装的是server版,可以先在system-boot磁盘中的network-config文件添加Wi-Fi,方便后面连接(默认用户密码为ubuntu),或者连接网线

二. 系统设置

注意:接下来即将进入系统引导配置界面,在这过程中踩了不少坑,一定要耐心看完!!!

2.1 引导配置

Ⅰ.选择语言:中文(简体)

Ⅱ.键盘布局:选择 Chinese - Hanyu Pinyin(altgr),这样系统会内置拼音输入法

Ⅲ.选择时区,默认 Shanghai 即可

Ⅳ.填写个人与计算机信息(选择自动登录)

2.2 进入系统后配置

注意:千万不要更换镜像源,因为此版本系统应该是Ubuntu为树莓派4(ARM架构)专门定制的,原生源软件多,下载速度也不慢,如果更换了网上其他的源会导致无法通过 apt 下载某些软件。

Ⅰ.打开设置 - Region & Language,将语言改为汉语(中国)

Ⅱ.在应用中打开 Language Support,然后会提示完整安装语言支持,点击安装即可。安装完成后,键盘输入法系统选择 IBus,点击 应用到整个系统,然后重启系统。

Ⅲ.重启完成后,你会发现系统语言已经切换为中文,然后就可以愉快地使用Ubuntu了!

2.3. 开启SSH连接

详见第三节安装openssh-server 方法。

2.4 设置镜像源

[2022/01/22 更新] 貌似ubuntu官方对20.10的支持已经结束,因此镜像源好像用不了,网上寻找后发现可更换为下面镜像源。

修改 /etc/apt/sources.list 为:

1
2
3
4
5
6
7
8
9
# 默认注释了源码仓库,如有需要可自行取消注释
deb https://mirrors.ustc.edu.cn/ubuntu-ports/ focal main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu-ports/ focal main main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu-ports/ focal-updates main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu-ports/ focal-updates main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu-ports/ focal-backports main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu-ports/ focal-backports main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu-ports/ focal-security main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu-ports/ focal-security main restricted universe multiverse

三. 某些软件的安装

安装软件前,请先执行下列命令:

1
2
sudo apt update
sudo apt-get update

3.1 SSH连接工具

请执行下列命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 安装openssh-server
sudo apt-get install openssh-server

# 开机自动启动ssh命令
sudo systemctl enable ssh

# 单次开启ssh
sudo systemctl start ssh

# 单次关闭ssh
sudo systemctl stop ssh

#查看ssh是否启动,看到Active: active (running)即表示成功
sudo systemctl status ssh

然后就可以通过SSH工具连接了!推荐:Termius(一个跨平台的SSH工具)或者 Secure CRT。

3.2 qv2ray

这是一个对v2ray做了图形化的工具,实测可以安装在 Ubuntu Desktop 20.10 树莓派上。

1
2
3
4
# 使用snap安装qv2ray
sudo snap install qv2ray
# 启动qv2ray
qv2ray

参考自:https://snapcraft.io/install/qv2ray/raspbian

3.3 温度监控组件

推荐一个效果如下的组件。

psensor插件

在安装Psensor前,你需要安装和配置lm-sensors,这是一个用于硬件监控的命令行工具。如果你想要测量磁盘温度,你还需要安装hddtemp。要安装这些工具,运行下面的这些命令。

1
sudo apt-get install lm-sensors hddtemp

接着开始检测硬件传感器:

1
sudo sensors-detect

要确保已经工作,运行下面的命令:

1
sensors

如果一切看上去没问题,使用下面的命令安装 psensor:

1
sudo apt-get install psensor

然后启动 psensor 即可。

如果想在面板中显示温度(如上图),进入 Sensor Preferences ,然后选择 Application Indicator菜单,勾选Display sensor in the label 选项即可。

如果想要开机自动启动,进入 Preferences->Startup 并选择 Launch on session startup 使每次启动时启动 psensor。

注:以上内容参考自 https://jingyan.baidu.com/article/a17d5285f043c38098c8f21d.html

开启socks代理后,可以用以下方法来使终端连接代理。

1
2
3
4
5
6
7
export http_proxy="socks5://127.0.0.1:1080"

export https_proxy="socks5://127.0.0.1:1080"

export ALL_PROXY=socks5://127.0.0.1:1080

source ~/.bashrc

3.3 安装第三方软件

点开商店应用,会发现没有什么软件可以下载,但是这个版本的系统内置了snap商店 https://snapcraft.io/ ,在命令行执行sudo snap install 软件名即可。

3.4 MongoDB安装

参考:https://andyfelong.com/2020/10/mongodb-4-4-ubuntu-20-04-on-raspberry-pi-4/

1.导入包管理系统使用的公钥

1
ubuntu@ubuntu:~$ wget -qO - https://www.mongodb.org/static/pgp/server-4.4.asc | sudo apt-key add -

2.为MongoDB创建一个列表文件

1
ubuntu@ubuntu:~$ echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/4.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list

3.重新加载本地包数据库

1
ubuntu@ubuntu:~$ sudo apt-get update

4.安装MongoDB软件包

1
ubuntu@ubuntu:~$ sudo apt-get install -y mongodb-org

5.检查安装并运行

1
ubuntu@ubuntu:~$ sudo service mongod status

6.启动mongo shell确认安装正确

1
ubuntu@ubuntu:~$ mongo

7.启动与停止服务

1
2
sudo service mongod start
sudo service mongod stop

3.5 安装NextCloud

说明

可以用于部署nas网盘,参考如下:

https://blog.csdn.net/Wanginsten/article/details/111664341

注意问题:docker貌似不能用官方脚本安装,因为镜像源已经更改,可以用snap安装。

运行docker容器会遇到一个问题:https://www.jianshu.com/p/c535e79d5836

优化

先进入容器,修改php.ini中的memory_limit限制(调大一点)。

1
sudo -u www-data php -d memory_limit=512M occ config:app:set files max_chunk_size --value 0

注意:外挂磁盘最好是ext4格式(对Ubuntu来说),实测下载速度可以达到50MB/s (老2.5机械硬盘)。如果速度不达标,请检测路由器WAN/LAN口是否为千兆,网线是否为六类/超五类,并且在路由器中将2.4G和5G信号分离开来,2.4G设置20/40MHz带宽,5G设置80MHz带宽。

3.6 磁盘速度测试

本地

1
2
sudo apt-get install hdparm
hdparm -Tt /dev/mmcblk0

四. 探索

4.1 通过网线连接电脑与树莓派

情形:Win10电脑通过WiFi上网,树莓派通过网线连接到电脑上,共享网络。

首先在控制面板->网络连接->WLAN,右键属性,点击共享选项卡,勾选允许。

然后使用网线(直连线)连接电脑与树莓派。

在cmd中通过下列命令查找树莓派IP地址。

1
arp -a

五. 一些BUG或者注意事项

目前发现的一些BUG(或者有解决方案,但是我太蠢了)和注意事项总结如下。

5.1 屏幕共享问题

Ⅰ.Ubuntu这个版本自带了屏幕分享(在设置里面),可以通过VNC连接,但是如果树莓派4在开机时没有外接显示器,是无法成功连接的。(就算树莓派4开机后,再连接实体显示器,也不能正常工作)。

Ⅱ.对于上述问题,可能有的教程会推荐安装一个 虚拟显示器插件 的方法,但是我及其不推荐(亲测不稳定,卸载插件后鼠标无法正常工作),方法在下面仅供参考。

随用户登录后,自动启动 vino server。编辑一个 vino-server.desktop 文件,如果 autostart 目录不存在,就创建一个。

1
sudo vim ~/.config/autostart/vino-server.desktop

填入下列内容:

1
2
3
4
5
[Desktop Entry]
Type=Application
Name=Vino VNC server
Exec=/usr/lib/vino/vino-server
NoDisplay=true

vino-server 不能在 console 中运行,所以需要在用户登录到桌面后用这样的方式自动启动。

安装 video-dummy

1
sudo apt install xserver-xorg-video-dummy

/etc/X11下创建 xorg.conf 文件,填写分辨率等信息:

1
sudo vim /etc/X11/xorg.conf

xorg.conf内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Section "Monitor"
Identifier "Monitor0"
HorizSync 28.0-80.0
VertRefresh 48.0-75.0
# 1024x768 @ 60.00 Hz (GTF) hsync: 47.70 kHz; pclk: 64.11 MHz
# Modeline "1024x768_60.00" 64.11 1024 1080 1184 1344 768 769 772 795 -HSync +Vsync
# 1280x720 @ 60.00 Hz (GTF) hsync: 44.76 kHz; pclk: 74.48 MHz
# Modeline "1280x720_60.00" 74.48 1280 1336 1472 1664 720 721 724 746 -HSync +Vsync
# 1368x768 @ 60.00 Hz (GTF) hsync: 47.70 kHz; pclk: 85.86 MHz
# Modeline "1368x768_60.00" 85.86 1368 1440 1584 1800 768 769 772 795 -HSync +Vsync
# 1600x900 @ 60.00 Hz (GTF) hsync: 55.92 kHz; pclk: 119.00 MHz
# Modeline "1600x900_60.00" 119.00 1600 1696 1864 2128 900 901 904 932 -HSync +Vsync
# 1920x1080 @ 60.00 Hz (GTF) hsync: 67.08 kHz; pclk: 172.80 MHz
Modeline "1920x1080_60.00" 172.80 1920 2040 2248 2576 1080 1081 1084 1118 -HSync +Vsync
EndSection

Section "Device"
Identifier "Card0"
Option "NoDDC" "true"
Option "IgnoreEDID" "true"
Driver "dummy"
EndSection

Section "Screen"
DefaultDepth 16
Identifier "Screen0"
Device "Card0"
Monitor "Monitor0"
SubSection "Display"
Depth 16
Modes "1920x1080"
EndSubSection
EndSection

配置用户自动登录桌面

查看当前用的是什么管理器:

1
cat /etc/X11/default-display-manager

我的是/usr/sbin/gdm3,那么编辑文件:

1
sudo vim /etc/gdm3/custom.conf

把下面三行的注释去掉,其中AutomaticLogin行修改成自己的用户名。

1
2
3
WaylandEnable=false
AutomaticLoginEnable = true
AutomaticLogin = username

重启电脑,就可以通过VNC登录了。

重启桌面

这样配置后,如果再次接上显示器后,显示器会黑屏,这时候,需要把/etc/X11/xorg.conf删除或者改名,比如改成/etc/X11/xorg.conf.dummy,然后重启显示管理器:

1
sudo systemctl restart display-manager

注:以上内容参考自 https://blog.deskangel.com/2020/05/02/vino-on-headless-ubuntu-desktop/

5.2 VNC无法连接问题

电脑VNC连接Ubuntu报错如下:

1
Unable to connect to VNC Server using your chosen security setting. Either upgrade VNC Server to a more recent version from RealVNC, or select a weaker level of encryption.

解决方法:

1
2
# 在Ubuntu中执行下列命令
gsettings set org.gnome.Vino require-encryption false

5.3 JDK奇怪的错误

原因:在oracle官网下载了 JDK1.8 arm64 版本,运行一个项目发现报错:NoClassDefFoundError: java.awt.Toolkit

解决方法:删除现有JDK,通过以下方式重新安装。

1
2
3
4
5
6
7
8
9
10
11
# 添加仓库源
sudo add-apt-repository ppa:openjdk-r/ppa
# 更新源
sudo apt-get update
# 安装JDK
sudo apt-get install openjdk-8-jdk
# 安装好后查看版本号
banana@pi:~$ java -version
openjdk version "1.8.0_275"
OpenJDK Runtime Environment (build 1.8.0_275-8u275-b01-0ubuntu1~20.10-b01)
OpenJDK 64-Bit Server VM (build 25.275-b01, mixed mode)

最后问题解决了,感慨arm架构坑有点多。

5.4 不要卸载python3

原因:执行命令 sudo apt remove python3 后,发现系统设置打不开了,火狐游览器等软件没了,然而命令行执行 python3 发现它依然存在。

解决方法:不要卸载!!!卸载后请按顺序执行下列命令进行抢救!

1
2
3
4
5
sudo apt install -f

sudo apt-get install python3-minimal

sudo apt-get -f install ubuntu-minimal ubuntu-standard ubuntu-desktop

5.5 Python3缺少SOCKS依赖

解决方法:先安装pip3,然后执行 pip3 install SOCKS

注意,如果执行pip3同样报这个错,执行下列命令即可解决:

1
unset all_proxy && unset ALL_PROXY