0%

一、前言

这是我在若干次重装 Ubuntu-22.04-LTS 时遇到的普遍性问题,遂志之。

二、配置

1. 无法连接校园网的问题

在重装完系统之后出现无法连接校园网,但却可以连接手机热点的问题。

原因是 iwlwifi 驱动未加载,查看:

1
$ lsmod | grep iwlwifi

发现并无输出,说明驱动并没有启动。重新加载模块:

1
$ sudo modprobe iwlwifi

加载后即可顺利连接校园网。

2. 修改配置文件后无法进入系统的问题

在修改完配置后无法顺利进入系统,黑屏仅右上角有光标闪烁。

开机选择 ubuntu develop 模式启动,选择 root,输入密码后即可以 root 进入命令行模式,定位错误信息修改后即可。

3. 开机自动挂载硬盘

因为我 Ubuntu 和 Windows 系统会共用一些文件(没错就是这个 blog),每次开机需要打开磁盘挂载,比较麻烦,所以需要实现开机自动挂载。

手动挂载后,查看分区信息:

1
2
3
4
5
6
7
8
$ df - h

文件系统 大小 已用 可用 已用% 挂载点
tmpfs 1.4G 2.4M 1.4G 1% /run
/dev/nvme1n1p8 73G 25G 45G 36% /
...
/dev/nvme0n1p1 806G 482G 325G 60% /media/lg/新加卷

可以看见最后一个就是目标挂载盘。查询挂载盘 UUID:

1
2
3
4
$ sudo blkid /dev/nvme0n1p1 

/dev/nvme0n1p1: LABEL="M-fM-^VM-0M-eM-^JM- M-eM-^MM-7" BLOCK_SIZE="512" UUID="1210A22E10A218AD" TYPE="ntfs" PARTUUID="50ec242e-01"

打开文件 /etc/fstab 文件:

1
$ sudo vim /etc/fstab

添加挂载条目:

1
2
3
4
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
...
# /dev/nvme0n1p1
UUID=1210A22E10A218AD /media/lg/新加卷 ntfs defaults 0 2

第一个数字:0表示开机不检查磁盘,1表示开机检查磁盘;
第二个数字:0表示交换分区,1代表启动分区(Linux),2表示普通分区

4. IDEA 运行内存设置

这几天在系统运行过程中,出现了三种卡顿情况:Webstorm 崩溃,IDEA 崩溃,以及输入框崩溃。经过内存监听,初步推断是内存问题。新买的两根 16G 的内存条还没发货,先看看能不能从软件层面入手。

顶部菜单 > help > Edit Custom VM options,输入

1
2
3
4
-Xmx5000m  最大堆内存大小为 5000MB
-Xms1000m //初始堆内存大小,随着应用程序的需求逐渐增加堆内存大小,最终不会超过 -Xmx 指定的最大值.
-XX:ReservedCodeCacheSize=512m 设置保留代码缓存的大小为 512MB。代码缓存用于存储已编译的代码,以提高程序的执行效率。
-XX:+UseG1GC 指示 JVM 使用 G1 (Garbage-First) 垃圾收集器

顺便清除下 IDEA 的缓存。

顶部菜单 > Invalidate Caches > 二三项 > Invalidate and Restart.

5. 更换输入源

经过调查,发现了输入区集体严重延迟的源头是 ibus-pinyin 输入法。

由于读取 sqlite 词库时有大量的IO操作,ibus-pinyin 在系统高负载时输入时有卡住的现象。

查找到的解决方法几乎全部都是治标不治本,遂决定更换输入法。

目前没有找到特别合适的替代,暂时先更新原输入法吧,崩溃后再继续折腾。

1
2
3
$ sudo apt update
$ sudo apt install --reinstall ibus ibus-gtk ibus-gtk3 ibus-clutter ibus-pinyin
$ ibus restart

最终解决办法是重新更换 fcitx5 输入法,更换皮肤后使用体验极佳。

image-20240422133508858

6. 系统容灾备份 (Clonezilla)

设备准备:2 枚 U盘,一枚作为引导盘(容量 4G 即可),一枚作为备份盘(需要较大容量,视备份数据量而定,我使用的是 64GB U盘)。其中引导盘需要先格式化(可以选择任意设备通用),并在其上建立一个分区。

在 Clonezilla 官网上下载 zip 包,并解压到引导盘。

1
2
3
4
5
$ sudo lsblk
$ sudo unzip clonezilla-live-20240116-mantic-amd64.zip -d /usb-boot

$ cd /usb-boot/utils/linux/
$ sudo bash makeboot.sh /dev/sdaX

这里的 /dev/sdaX 是引导盘,注意不能填错!!!

然后插入引导盘,进入 BIOS 界面设备选择将其置顶,再启动即可进入 Clonezilla 界面。

备份的操作逻辑比较简单,这里就不多讲了。

7. 系统异常时

到目前为止系统异常甚至崩溃的原因有如下几点:

  • nvidia 驱动:解决方案是通过 liveCD / 旧版内核,选择附加驱动安装推荐选项。(未尝试过 liveCD)
  • 分区挂载异常:livdCD 启动,挂在原系统根目录后修改 /etc/fstab 文件。
  • 引导程序异常:liveCD 启动,使用 boot-repair 推荐选项修复引导。
8. fuse 安装

Ubuntu 22.04 及以上版本直接使用 apt install fuse 会导致与 gnome 冲突,删除相关包甚至影响系统。因此需要更改安装命令,对于 Ubuntu ($\geq 22.04$),以下命令可安全安装 fuse

1
2
sudo add-apt-repository universe
sudo apt install libfuse2
9. 代理配置

目前订阅的是 SpeedCat 的配置,支持链接导入 Clash。

根据学长的文章(见参考资料)安装 clash-linux 并成功导入配置。

更好的图形界面支持?

Release Clash Verge v1.3.8 · zzzgydi/clash-verge

以后有时间打算自建节点,采用 Shadowsocks 部署服务器,因此需要一个方便配置 shadowsocks 的客户端。

目前计划 windows 和 ubuntu 采用 Qv2ray。

Release Qv2ray 2.7.0 - The End · Qv2ray/Qv2ray

Android 采用 v2rayNG。(Google Play 里可以直接下载)

IOS 和 IPad OS 采用 Quantumult X。(App Store 10 刀)

10. figlet

一个很有意思的小玩具,可以输出终端横幅。安装很方便

1
2
$ sudo apt update
$ sudo apt install figlet

查看所含字体

1
$ ls /usr/share/figlet

推荐直接到官网预览

FIGlet - hosted by PLiG

可以使用 -c 选项来居中文本,并使用 -f 选项指定字体。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
lg@ubuntu:~$ figlet -c -f isometric3 "Hello World!"
___ ___ ___
/__/\ / /\ / /\
\ \:\ / /:/_ / /::\
\__\:\ / /:/ /\ ___ ___ ___ ___ / /:/\:\
___ / /::\ / /:/ /:/_ /__/\ / /\ /__/\ / /\ / /:/ \:\
/__/\ /:/\:\ /__/:/ /:/ /\ \ \:\ / /:/ \ \:\ / /:/ /__/:/ \__\:\
\ \:\/:/__\/ \ \:\/:/ /:/ \ \:\ /:/ \ \:\ /:/ \ \:\ / /:/
\ \::/ \ \::/ /:/ \ \:\/:/ \ \:\/:/ \ \:\ /:/
\ \:\ \ \:\/:/ \ \::/ \ \::/ \ \:\/:/
\ \:\ \ \::/ \__\/ \__\/ \ \::/
\__\/ \__\/ \__\/
___ ___ ___ _____
/__/\ / /\ / /\ / /::\
_\_ \:\ / /::\ / /::\ / /:/\:\
/__/\ \:\ / /:/\:\ / /:/\:\ ___ ___ / /:/ \:\
_\_ \:\ \:\ / /:/ \:\ / /:/~/:/ /__/\ / /\ /__/:/ \__\:|
/__/\ \:\ \:\ /__/:/ \__\:\ /__/:/ /:/___ \ \:\ / /:/ \ \:\ / /:/
\ \:\ \:\/:/ \ \:\ / /:/ \ \:\/:::::/ \ \:\ /:/ \ \:\ /:/
\ \:\ \::/ \ \:\ /:/ \ \::/~~~~ \ \:\/:/ \ \:\/:/
\ \:\/:/ \ \:\/:/ \ \:\ \ \::/ \ \::/
\ \::/ \ \::/ \ \:\ \__\/ \__\/
\__\/ \__\/ \__\/

11. Conky 安装与配置
12. 隐藏 grub 引导

由于没有找到很好的办法来随时调出 grub,因此已弃用。

在启动时跳过 grub 选择系统界面,修改 /etc/default/grub

1
2
3
4
5
6
7
8
9
$ sudo vim /etc/default/grub

# GRUB_DISABLE_OS_PROBER=false
GRUB_DISABLE_OS_PROBER=true #值为true时,开机时忽略ubuntu外其他系统
# GRUB_TIMEOUT=10
GRUB_TIMEOUT=0 #grub等待时间设为0
:wq

$ sudo update-grub # 更新grub引导
13. 配置 grub 主题

参考链接:Linux Grub引导界面(启动界面)美化 - 知乎

三、参考资料

Ubuntu 磁盘挂载——开机自动挂载_ubuntu2204如何设置开机挂载硬盘-CSDN博客

ubuntu之制作再生龙(Clonezilla)启动盘_再生龙压缩包-CSDN博客

FUSE · AppImage/AppImageKit Wiki

Ubuntu 22.04 安装 Clash | EagleBear2002 的博客

一、 MySQL 安装与密码配置

1. MySQL 安装

MySQL 安装比较方便,运行如下命令:

1
2
$ sudo apt update
$ sudo apt install mysql-server

安装完成后,MySQL 服务将自动启动。验证 MySQL 服务器运行情况,输入:

1
$ sudo systemctl status mysql

输出显示服务正在运行:

1
2
3
4
5
6
7
8
9
10
11
12
● mysql.service - MySQL Community Server
Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2024-04-04 00:35:37 CST; 45min ago
Process: 15355 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=exited, status=0/SUCCESS)
Main PID: 15363 (mysqld)
Status: "Server is operational"
Tasks: 38 (limit: 16491)
Memory: 366.4M
CPU: 17.785s
CGroup: /system.slice/mysql.service
└─15363 /usr/sbin/mysqld
...
2. 以 root 用户登陆

刚安装完的 MySQL 是没有登陆密码的,以 root 身份登陆 MySQL,输入:

1
$ sudo mysql

顺利进入 MySQL:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 16
Server version: 8.0.36-0ubuntu0.22.04.1 (Ubuntu)

Copyright (c) 2000, 2024, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.


mysql>
3. 初始化密码

初始化 root 密码,键入如下指令,将 MyPassword 替换为自己的密码即可:

1
mysql> ALTER USER'root'@'localhost'IDENTIFIED BY 'MyPassword';

重新加载授权表并退出,使最近对授权进行的更改生效:

1
2
3
mysql> flush privileges;
mysql> quit;
Bye

重新进入 MySQL:

1
2
$ sudo mysql -uroot -p
Enter password:

然后输入密码即可。

二、权限相关问题与解决

以上过程证明了 MySQL 的安装是顺利的,以及密码设置也无误。但我去掉 sudo 运行,却出现如下情况:

1
2
3
$ mysql -uroot -p
Enter password:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

一开始以为是密码输入错误,但由于 sudo 状态下能顺利登入。

接下来检查权限,先以 root 用户登入服务器。

1
2
3
4
5
6
7
8
9
10
11
12
13
mysql> use mysql;
mysql> select user,host,plugin from user;
+------------------+-----------+-----------------------+
| user | host | plugin |
+------------------+-----------+-----------------------+
| debian-sys-maint | localhost | caching_sha2_password |
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session | localhost | caching_sha2_password |
| mysql.sys | localhost | caching_sha2_password |
| root | localhost | mysql_native_password |
+------------------+-----------+-----------------------+
5 rows in set (0.00 sec)

若 root 的 plugin 是 auth_socket,更换为 mysql_native_password 即可解决问题。

1
2
mysql> update user set plugin = 'mysql_native_password';
mysql> flush privileges;

错误只能在 socket '/tmp/mysql.sock' (2) 这里了。打开 /tmp 目录却发现并没有 mysql.sock 这个文件。

尝试查询

1
$ sudo find / -name mysql.sock

发现其在 /var/lib/mysql 目录下,创建软链接即可解决:

1
$ ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock

但是我整个系统都不存在 mysql.sock 文件。

上网检索后发现可能是系统运行一个 cron 任务删除了 /tmp 下的临时文件。

重启 MySQL 服务:

1
$ sudo service mysql restart

再次查询,没有任何变化。

mysql.sock 这个文件有什么用?

连接 localhost 通常通过一个 Unix 域套接字文件进行,一般是 /tmp/mysql.sock。如果套接字文件被删除了,本地客户就不能连接。这可能发生在你的系统运行一个 cron 任务删除了 /tmp 下的临时文件。

通过 TCP/IP 连接进入 MySQL:

1
$ mysql -uroot -h 127.0.0.1 -p 

可以顺利进入。

现在解决办法变为,重新指定一个不同的套接字,也就是生成 mysql.sock 或寻找替代。

On Unix, you can connect to the mysqld server by using two different ways: a Unix socket file (for example, /var/run/mysqld/mysqld.sock), or by using TCP/IP (for example, 127.0.0.1:3306).

/var/run/mysqld/mysqld.sock 这个文件就是我们所需要的。查询发现确实有这个文件。

接下来就是配置,查询到的配置方法如下:

img

打开 /etc/mysql/my.cnf 配置文件。

1
$ sudo vim /etc/mysql/my.cnf

image-20240404015837864

发现不太一样,可以看到有效信息只有两行,这两行配置告诉MySQL服务器去两个指定目录查找 .cnf 配置文件,并将它们包含到主配置文件中。

继续查询,/etc/mysql/conf.d//etc/mysql/mysql.conf.d/ 目录下一共四个配置文件,一一查看后发现并没有 [client] 条目。

创建 client 配置文件:

1
2
$ cd /etc/mysql/mysql.conf.d
sudo vim client.cnf

写入:

1
2
3
[client]
port = 3306
socket = /var/run/mysqld/mysqld.sock # change the socket source

然后以普通用户启动 MySQL:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 18
Server version: 8.0.36-0ubuntu0.22.04.1 (Ubuntu)

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

启动成功。

三、参考文档

ubuntu18.04下mysql必须要sudo权限才能打开-CSDN博客

Create a MySQL data source using unix sockets | DataGrip Documentation

亲测有效,解决Can ‘t connect to local MySQL server through socket ‘/tmp/mysql.sock ‘(2) “;_can’t connect to local mysql server through socket-CSDN博客