Arch Linux 使用指南
详细介绍日常使用 Arch Linux 时的各种问题与解决方案,例如 Arch 安装、常用软件推荐、系统优化等
零、Install Arch
-
Download Arch Linux ISO
-
U 盘 ventoy 准备
略
选择
Arch Linux install medium (x86_64, UEFI)
启动安装环境进入
root@archiso
后,需要设置互联网,推荐使用网线连接检查网络接口是否已经启用
ip link
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 ...
尖括号内的“UP”,表示接口已经启用,否则使用以下命令:
ip link set enp0s3 up
请使用 ping 命令测试网络:
ping www.baidu.com
-
更新系统时钟: 在互联网连接之后,systemd-timesyncd 服务将自动校准系统时间,便于安装软件包时验证签名
1
timedatectl
-
分区设置
1 2 3 4 5 6 7 8 9 10
mkfs.ext4 /dev/nvme1n1p7 #用作根分区,挂载到 / # mkfs.fat -F32 /dev/nvme1n1p3 #用作EFI分区 ,挂载到 /boot/efi # 如果安装Windows时已经有个EFI分区,就把上面的/dev/sda1换成已有的EFI分区 mkfs.ext4 /dev/nvme1n1p8 # 挂载到 /home 目录 # mount mount /dev/nvme1n1p7 /mnt #挂载根目录 mkdir -p /mnt/boot/efi #EFI分区的挂载点 mount /dev/nvme1n1p1 /mnt/boot/efi #挂载EFI分区 mount --mkdir /dev/nvme1n1p8 /mnt/home
-
选择软件镜像仓库
手动修改
/etc/pacman.d/mirrorlist
1 2 3 4 5 6 7 8
vim /etc/pacman.d/mirrorlist --- Server = https://mirrors.ustc.edu.cn/archlinux/$repo/os/$arch Server = https://mirrors.tuna.tsinghua.edu.cn/archlinux/$repo/os/$arch --- pacman -Sy archlinuxcn-keyring pacman -Syyu
-
安装基础包
1 2 3 4
pacstrap /mnt bash base base-devel linux linux-headers linux-firmware neovim xsel // fstab genfstab -U -p /mnt >> /mnt/etc/fstab
-
chroot
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 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
arch-chroot /mnt # 时区 ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime hwclock --systohc # hostname vim /etc/hostname --- 键入:`arch` --- # 设置 locale vim /etc/locale.conf --- 键入:`LANG_en_US.UTF-8` --- vim /etc/locale.gen --- 取消注释:`#en_US.UTF-8 UTF-8` 取消注释:`#zh_CN.UTF-8 UTF-8` --- locale-gen # 网络管理器,蓝牙 pacman -S networkmanager bluez bluez-utils pulseaudio-bluetooth alsa-utils pulseaudio pulseaudio-alsa sof-firmware systemctl enable NetworkManager.service systemctl enable bluetooth.service # root password passwd --- 键入密码:xxxxxx --- # ucode cat /proc/cpuinfo | grep "model name" pacman -S intel-ucode # amd-ucode # 安装引导加载程序 pacman -S grub efibootmgr os-prober grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=GRUB # 配置 os-prober vim /etc/default/grub --- 取消注释:`GRUB_DISABLE_OS_PROBER=false` --- grub-mkconfig -o /boot/grub/grub.cfg # Create user and usergroup useradd -m -G wheel kyden passwd kyden --- 键入密码 --- # 修改权限 pacman -S sudo man-pages man-db vim /etc/sudoers --- 取消注释:`%wheel ALL=(ALL:ALL) ALL` --- su - kyden # KDE sudo pacman -S plasma xorg nvidia dolphin konsole fish noto-fonts-cjk noto-fonts-emoji sudo systemctl enable sddm # reboot exit swapoff /mnt/swapfile umount -R /mnt reboot
一、内核更换
-
Install The Desired Kernel
sudo pacman -S linux-lts linux-lts-headers
-
Editing GRUB Config File
1 2 3 4 5 6
sudo vim /etc/default/grub # --- `GRUB_DISABLE_SUBMENU=y` # disables the GRUB submenu, i.e., it enables all the available kernels to be listed on the main GRUB Menu itself instead of the “Advanced option for Arch Linux” option. `GRUB_DEFAULT=saved` # saves the last kernel used `GRUB_SAVEDEFAULT=true` # makes sure that grub uses the last selected kernel is used as default
-
Re-Generate GRUB Configuration file
sudo grub-mkconfig -o /boot/grub/grub.cfg
-
Choose Kernel From GRUB During Boot
二、Software
Check NetworkManager
|
|
pacman 镜像修改
|
|
常见通用软件
|
|
输入法
|
|
|
|
- gpick: 可以从桌面任何地方取色,并且它还提供一些其它的高级特性
- SpeedCrunch: 一个漂亮,开源,高精度的科学计算器
- Snipaste: 截图工具,如不可用可选用
spectacle
- drawio-desktop: Security-first diagramming for teams
- crow-translate:翻译工具
- zeal:离线文档浏览器
office
|
|
远程工具 - Remmina
-
$ yay -S remmina freerdp
-
安装
freerdp
插件后,可以走 RDP 协议远程 Win10(Win10 不需要其他任何设置)
Git
配置git
-
设置
user.name
和user.emal
1 2 3 4 5
git config --global user.name "KydenLu" git config --global user.email xxxx@gmail.com # check git config --list
-
生成密钥
1
ssh-keygen -t rsa -C 'xxxx@gmail.com'
上述代码执行完成后,要求多次输入密码,请不要输入密码
-
github配置 SSH Keys
-
打开生成的
Key
文件/.ssh/id_rsa.pub
-
复制全部内容,在 Key 中粘贴
-
Git 常用命令
git status
git clone
git pull
git push
git commit -m 'commits'
orgit commit -m 'commits' xxx.fileType
git add .
orgit xxx.fileType
git reflog
Git实现从本地添加项目到远程仓库
Steps:
- 创建一个新的远程仓库 -
Create a new repo
Create repository
- 创建并初始化本地仓库 -
git init
- 可添加待上传到远程仓库的项目文件
- 远程仓库和本地仓库关联 -
git remote add origin git@github.com:lutianen/<repository name>
- 项目文件添加、提交、推送
git add file
git commit -m '<commit statements>' file
git push -u origin master
- *由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来
- 在以后的推送或者拉取时就可以简化命令
Golang
|
|
-
GOROOT
,设置 Golang 的安装位置 -
GOBIN
,执行go install
后生成可执行文件的目录 -
GOPATH
,工作目录,一般设置到用户目录下1 2 3 4 5
# Go 工作目录结构 ├── bin # 存放 `go install` 命令生成的可执行文件,且可把 `$GOBIN` 路径加入到 `PATH` 环境变量中,这样就可以直接在终端中使用 go 开发生成的程序 ├── pkg # 存放 go 编译生成的文件 ├── readme.md └── src # 存放 go 源码,不同工程项目的代码以包名区分
MySQL
很多linux发行版都放弃了对mysql的支持(原因自行 Google)转而支持mariadb(mysql的另一个分支),Archlinux就是其中之一,mariadb具有和mysql一模一样的操作命令,所以完全不用考虑迁移兼容的问题
-
安装mariadb:
sudo pacman -Sy mariadb
-
配置mariadb命令,创建数据库都在/var/lib/mysql/目录下面:
sudo mysql_install_db --user=mysql --basedir=/usr --datadir=/var/lib/mysql
-
开启mariadb 服务:
systemctl start mariadb
-
初始化密码,期间有让你设置密码的选项,设置你自己的密码就行了,然后根据自己理解y/n就可,因为很多后面可以再修改:
sudo /usr/bin/mysql_secure_installation
-
登录mariadb 和mysql命令是一样的:
mysql -u root -p
-
设置开机自启动服务:
systemctl enable mariadb #开机自启动
you-get
命令行程序,提供便利的方式来下载网络上的媒体信息。
|
|
- 下载流行网站之音视频,例如YouTube, Youku, Niconico,以及更多
- 于您心仪的媒体播放器中观看在线视频,脱离浏览器与广告
- 下载您喜欢的网页上的图片
- 下载任何非HTML内容,例如二进制文件
挂载其他硬盘分区
|
|
<device>
描述要挂载的特定块设备或远程文件系统<dir>
描述挂载目录<type>
文件系统类型<options>
相关的挂载选项<dump>
会被 dump(8) 工具检查。该字段通常设置为 0, 以禁用检查<fsck>
设置引导时文件系统检查的顺序; 对于 root 设备该字段应该设置为 1。对于其它分区该字段应该设置为 2,或设置为 0 以禁用检查
我使用 TYPE 为 ntfs
时导致启动失败,修改为 ntfs3
后成功挂载
Present Windows
scp
文件上传、下载
- 上传
scp ./cifar-10-python.tar.gz kyden@<ip>:/home/kyden/
- 下载
scp kyden@<ip>:/var/tmp/a.txt /var
picgo
picgo-core 【Recommend】
-
Download and Install PigGo-Core
-
Get token with GitHub
-
Configure
config.json
NOTE:When using
~/.picgo/config.json
, delete the comments to avoid unnecessary trouble(使用时,将注释删掉,以免产生不必要的麻烦)1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
{ "picBed": { "current": "github", "github": { "repo": "<userName>/PicBed", // 设定仓库名:上文在 GitHub 创建的仓库 `<userName>/PicBed` "branch": "master", // 设定分支名:`master` "token": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", // 设定 Token:上文生成的 toke "path": "", // 指定存储路径:为空的话会上传到根目录,也可以指定路径 "customUrl": "" // 设定自定义域名:可以为空 }, "uploader": "github", "transformer": "path" }, "picgoPlugins": { "picgo-plugin-github-plus": true } }
picgo app 【Not Recommend】
略
VirtualBox
|
|
CUDA & cuDNN
|
|
Arch Linux 会将 CUDA 相关档案安装至 /opt/cuda
,有需要的话可以将 CUDA 的 PATH
加到 ~/bashrc
,此路径永远指向最新版CUDA
|
|
wireguard
|
|
wg0.conf
/etc/wireguard/wg0.conf
|
|
配置步骤如下
|
|
- WARP 密钥获取:Telegram 中 Warp+ Bot 获取
2.配置文件生成:https://replit.com/@misaka-blog/wgcf-profile-generator?v=1
https://replit.com/@tianenxd/wgcf-profile-generator,需要登陆
3.优选IP ==warp-yxip==
|
|
Clash Verge 解决DNS泄露问题
DNS 泄露其实并没有一个明确的定义,也不存在一个官方解释。
大概就是说你访问YouTube等黑名单网站的时候,使用中国大陆的DNS服务器进行了解析,这可能导致隐私问题的。
如果在 DNS Leak Test 、ipleak这种网站的列表中看到了中国国旗,就要意识到可能发生了DNS泄露。 虽然没有人知道具体的探测机制是什么,但很可能是从网络层面获取的。在一般的家庭网络拓扑中,wireshark可以看到什么内容,运营商就能看见什么内容,所以你使用114.114.114.114、223.5.5.5这样的DNS解析去访问了什么网站是很清晰的。
Clash开启TUN模式,关闭系统代理去使用:与普通的系统代理模式区别在于,TUN模式下Clash会创建一张虚拟网卡,从网络层面接管所有的网络流量。
Step 1: 开启TUN模式
Step 2: 使用稳定的DNS
DNS这部分有人会教使用运营商的DNS,运营商的DNS只适合小白用户,因为他可能连反诈,所以建议使用国内大厂的。
-
[Optional] 关闭浏览器的QUIC, 中国大陆的isp是限速udp的, 所以导致QUIC这个优秀的协议, 到了中国大陆的网络下成了个负面增益效果。
about://flags/#enable-quic
设置为Disabled
(点下方弹出的重启浏览器生效) -
关闭浏览器中的“安全DNS”
chrome://settings/security
-
在Clash Verge的【Profiles】中,点右上角的"NEW" -> Type选择"Script" -> Name随意填写(例如,“修改DNS”)
-
右击新建的文件,然后"Edit File",输入以下内容后启用:
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 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
function main(content) { const isObject = (value) => { return value !== null && typeof value === 'object' } const mergeConfig = (existingConfig, newConfig) => { if (!isObject(existingConfig)) { existingConfig = {} } if (!isObject(newConfig)) { return existingConfig } return { ...existingConfig, ...newConfig } } const cnDnsList = [ 'tls://223.5.5.5', 'tls://1.12.12.12', ] const trustDnsList = [ 'https://doh.apad.pro/dns-query', 'https://dns.cooluc.com/dns-query', 'https://1.0.0.1/dns-query', ] const notionDns = 'tls://dns.jerryw.cn' const notionUrls = [ 'http-inputs-notion.splunkcloud.com', '+.notion-static.com', '+.notion.com', '+.notion.new', '+.notion.site', '+.notion.so', ] const combinedUrls = notionUrls.join(','); const dnsOptions = { 'enable': true, 'default-nameserver': cnDnsList, // 用于解析DNS服务器 的域名, 必须为IP, 可为加密DNS 'nameserver-policy': { [combinedUrls]: notionDns, 'geosite:geolocation-!cn': trustDnsList, }, 'nameserver': trustDnsList, // 默认的域名解析服务器, 如不配置fallback/proxy-server-nameserver, 则所有域名都由nameserver解析 } // GitHub加速前缀 const githubPrefix = 'https://ghproxy.lainbo.com/' // GEO数据GitHub资源原始下载地址 const rawGeoxURLs = { geoip: 'https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geoip-lite.dat', geosite: 'https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geosite.dat', mmdb: 'https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/country-lite.mmdb', } // 生成带有加速前缀的GEO数据资源对象 const accelURLs = Object.fromEntries( Object.entries(rawGeoxURLs).map(([key, githubUrl]) => [key, `${githubPrefix}${githubUrl}`]), ) const otherOptions = { 'unified-delay': true, 'tcp-concurrent': true, 'profile': { 'store-selected': true, 'store-fake-ip': true, }, 'sniffer': { enable: true, sniff: { TLS: { ports: [443, 8443], }, HTTP: { 'ports': [80, '8080-8880'], 'override-destination': true, }, }, }, 'geodata-mode': true, 'geox-url': accelURLs, } content.dns = mergeConfig(content.dns, dnsOptions) return { ...content, ...otherOptions } }
-
设置完成后,验证DNS解析结果是否都是来自国外的Cloudflare和Google的DNS, 这时节点服务器不管拿到了你传过去的真ip还是假ip地址, 他都会再去请求一次Cloudflare/Google的DNS服务, 确保解析的正确性。 重要的是没有中国大陆的DNS服务器了,如果还是有,那你应该往当前设备的更上层寻找问题所在,比如路由器的设置等。
Clash Verge 解决 GEOIP,CN问题
目前市面上绝大多数的代理工具都依赖于 GeoIP2 数据库判断地址所属地。它们的规则结尾部分一般都会有一条类似 GEOIP, CN
,用来查询目的 IP 地址是否属于中国大陆,从而判断是否直连。
这些代理工具通常使用的 GeoIP2 数据库是来自于 MaxMind 的 GeoLite2 免费数据库。这个数据库目前存在一下几个问题:
-
获取不便:从 2019 年 12 月 30 日起,必须注册后才能下载
-
数据量大:数据库庞大,包含全球的 IP 地址段,约 10 MB
-
准确度低:对中国大陆的 IP 地址判定不准,如:香港阿里云的 IP 被判定为新加坡、中国大陆等。
庞大的数据量对于大多数中国大陆的用户来说是没有意义的,因为只仅需要去判断 IP 的地理位置是否属于中国大陆境内,其他国家的 IP 一律代理/直连。过多的数据量会增加载入时间,降低查询效率。
我们在之前创建的Script中已经包含了下载更精简合适中国大陆的IP数据库链接, 现在只需要手动操作下载和替换即可:
- Update GeoData: Clash Verge Rev的
设置
菜单中点击Update GeoData
- 验证下载: 打开Clash Verge托盘中的
APP Dir
,找到geoip.dat
文件,验证其大小是否为几百KB - 重启Clash Verge:确保数据库被正确应用
三、System optimization
SSD 优化
TRIM, 会帮助清理SSD中的块,从而延长SSD的使用寿命
|
|
SWAP 设置
https://wiki.archlinux.org/title/Swap#Swappiness
-
查看 swap 使用率,一般是 60 ,意思是 60% 的概率将内存整理到 swap:
cat /proc/sys/vm/swappiness
-
修改 swap 使用策略为 10%,即 10% 的概率将内存整理到 swap:
sudo sysctl -w vm.swappiness=10
-
修改配置文件:
sudo vim /etc/sysctl.d/99-swappiness.conf
在文件末尾加上下面这行内容:vm.swappiness=10
-
重启后可查看 swappiness 的值
Systemd journal size limit
控制日志最大可使用多少磁盘空间,修改/etc/systemd/journald.conf
中的SystemMaxUse
参数 SystemMaxUse=50M
四、Games
- sdl-ball:
yay -S sdl-ball
五、Problem And Solution
1. clear
command - terminals database is inaccessible
1 2 3
~ echo $CONDA_PREFIX (base) /opt/miniconda sudo mv $CONDA_PREFIX/bin/clear $CONDA_PREFIX/bin/clear_old
2. tput: unknown terminal "xterm-256color"
解决方案:setenv TERMINFO /usr/lib/terminfo
wps
3. 更新内核后,双屏显示时,某一个屏幕黑屏,但鼠标能够移动过去并显示,另一屏幕正常
解决方案:xrandr --output HDMI-1-0 --right-of eDP1 --auto
命令解释:配置 HDMI-1-0
输出,使其位于 eDP1
输出的右侧,并自动选择最佳的分辨率和刷新率设置
1 2 3 4 5
$ xrandr --listmonitors Monitors: 2 0: +*eDP1 2560/360x1440/200+0+0 eDP1 1: +HDMI-1-0 1920/479x1080/260+2560+0 HDMI-1-0 $ xrandr --output HDMI-1-0 --right-of eDP1 --auto
4. zip 压缩包解压乱码
产生这种情况的原因是,zip 格式本身的缺陷导致的:**zip 格式没有指定文件名的编码格式,因此在压缩和解压时都会采用OS本地编码,而 Window 下简体中文采用的是 GBK
/GB312
编码,Linux 则采用的是 UTF-8
编码,两者不一致导致了乱码的产生。
解决方案: unzip -O GBK xxx.zip
5. wps-office大部分字体粗体出现过粗无法正常显示问题
问题: freetype2更新至2.13.0以上版本后出现的问题。导致wps-office 文档编辑文字大部分字体设置粗体出现过粗无法正常显示。
解决方案:freetype2 降级至 2.13.0
- Downloadfreetype2.13.0
- 降级
sudo pacman -U freetype2-2.13.0-1-x86_64.pkg.tar.zst
- 修改
/etc/pacman.conf
->IgnorePkg = freetype2
,排除掉这个包(不让它更新)freetype2: ignoring package upgrade (2.13.0-1 => 2.13.2-1)
env LD_LIBRARY_PATH=/usr/local/freetype2-2.13.0-1-x86_64/usr/lib
`update-desktop-database ~/.local/share/applications
6. wpspdf 无法打开 PDF 文件
wpspdf 依赖于 libtiff5.so.5 以支撑其 PDF 功能。而系统更新后,Arch Linux 提供的是 libtiff.so.6 或更新版本,导致其无法正常工作。
解决方案:安装 libtiff5
7. WPS 无法输入中文
wpp
wpspdf
wpp
et
8. lx-music 数据同步失败
- 确保PC端的同步服务已启用成功: 若连接码、同步服务地址没有内容,则证明服务启动失败,此时看启用同步功能复选框后面的错误信息自行解决
- 在手机浏览器地址栏输入http://x.x.x.x:5963/hello后回车,若此地址可以打开并显示 Hello~::^-^::
v4,则证明移动端与PC端网络已互通,- 若移动端无法打开第2步的地址,则在PC端的浏览器地址栏输入并打开该地址,若可以打开,则可能性如下:
- LX Music PC端被电脑防火墙拦截
- PC端与移动端不在同一个网络下,
- 路由器开启了AP隔离(一般在公共网络下会出现这种情况)
- 要验证双方是否在同一个网络或是否开启AP隔离,可以在电脑打开cmd使用ping命令ping移动端显示的ip地址,若可以通则说明网络正常
9. fatal: unable to access 'https://github.com/xxxxxxx.git/': Failed to connect to github.com port 443: Timed out
问题:代理出问题
解决方案:
|
|
10. fatal: unable to access 'https://github.com/xxxx.git/': gnutls_handshake() failed: The TLS connection was non-properly terminated.
解决方案:
|
|