<!--{%hackmd theme-dark %}-->
###### tags: `Linux`
# Arch Linux 安裝與問題紀錄
**Windows10 + Arch Linux 雙系統**
資工系學生必備 Linux 系統,我是兩顆硬碟一個裝 Linux 另一個裝 Windows10,兩個系統裝在同一顆硬碟也行。
官方資料最正確 [Arch Linux Wiki](https://wiki.archlinux.org/title/Installation_guide_(%E6%AD%A3%E9%AB%94%E4%B8%AD%E6%96%87))
詳細的中文安裝教學 https://hackmd.io/@PIFOPlfSS3W_CehLxS3hBQ/r1xrYth9V
雙系統 https://wusyong.github.io/posts/arch-dual-boot/
裝這個還蠻複雜的,新手最好有個大佬代比較好
## 目錄
[TOC]
## 流程統整
1. 灌系統到 USB 裡
2. 開機 BOIS 切換到 USB 的系統善
3. 硬碟分割
4. 格式化磁碟區
5. 掛載磁區
6. 連 wifi
7. 安裝 + 建立 fstab
**作業系統安裝完畢**
8. 更換到新系統
9. 設定 Bootloader
10. 裝網路設定
11. 設定 root 密碼
**到這就完成了可以重開機**
12. 其他設定
13. 裝 GUI (我用KDE)
14. KDE 設定
## 系統安裝
### USB設置
上面三個連結都有教學
用 [Rufus](https://rufus.ie/en/) 裝映像檔,[交大Archlinux ios](http://linux.cs.nctu.edu.tw/archlinux/iso/)
**燒入前將選項 MBR 換成 GPT**
重新開機,打開 BIOS 用 USB 開啟
### 硬碟分割
`fdisk -l` 查看所有硬碟狀態
```cmd=
Disk /dev/nvme0n1: 476.94 GiB, 512110190592 bytes, 1000215216 sectors
Disk model: KINGSTON OM8PCP3512F-AB
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 0C6319EF-F744-49A4-B73D-911286E7D53E
Device Start End Sectors Size Type
/dev/nvme0n1p1 2048 534527 532480 260M EFI System
/dev/nvme0n1p2 534528 567295 32768 16M Microsoft reserved
/dev/nvme0n1p3 567296 706179726 705612431 336.5G Microsoft basic data
/dev/nvme0n1p4 706181120 962181119 256000000 122.1G Microsoft basic data
/dev/nvme0n1p5 962183168 963514367 1331200 650M Windows recovery environment
/dev/nvme0n1p6 963514368 1000214527 36700160 17.5G Microsoft basic data
Disk /dev/sda: 476.94 GiB, 512110190592 bytes, 1000215216 sectors
Disk model: SPCC Solid State
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 0344BB27-6BE2-4470-B6A1-740D0529DD45
Device Start End Sectors Size Type
/dev/sda1 34 32767 32734 16M Microsoft reserved
/dev/sda2 32768 1159167 1126400 550M EFI System
/dev/sda3 1159168 34713599 33554432 16G Linux swap
/dev/sda4 34713600 286371839 251658240 120G Linux root (x86-64)
/dev/sda5 286371840 705802239 419430400 200G Linux home
/dev/sda6 705802240 1000215182 294412943 140.4G Linux filesystem
```
> 這是我已經裝完 linux 的狀態,可以看到一個是 Windows 一個是 Linux
> 還未裝的會看到另一個是空的
我有兩顆硬碟,一個是`nvme0p1`一個是`sda`,選擇要裝硬碟打`cfdisk /dev/(硬碟路徑)`,我選sda打`cfdisk /dev/sda`
把磁碟區清乾淨後,移到 free memory 按 New,打需要的記憶體大小 Enter 後按 Type 選擇磁碟區類形
需要 EFI、Swap、root、home
**註1:如果是單顆硬碟不要格式化整個硬碟,Windows系統會不見**
**註2:如果有 Windows 雙系統,記得 Windows 的 EFI 和 Linux 的 EFI 要分開,不要放同一個**
```terminal=
Device Start End Sectors Size Type
>> /dev/sda1 34 32767 32734 16M Microsoft reserved
/dev/sda2 32768 1159167 1126400 550M EFI System
/dev/sda3 1159168 34713599 33554432 16G Linux swap
/dev/sda4 34713600 286371839 251658240 120G Linux root (x86-64)
/dev/sda5 286371840 705802239 419430400 200G Linux home
/dev/sda6 705802240 1000215182 294412943 140.4G Linux filesystem
```
root 和 home 給大一點,之後還要裝桌面,swap 是虛擬記憶體我的是 16G 或 8G 也可以,EFI 只要給 550M 就好
多出來的記憶體我用 Linux filrsystem 當備份,也可以就放著 free memory
**磁碟分割好後要按 `Write` 然後打 yes,沒有 Write 的話就要重分了**
### 格式化磁碟區
```
$ mkfs.vfat /dev/sda2 <-EFI partion
$ mkswap /dev/sda3 <-swap
$ mkfs.ext4 /dev/sda4 <-root
$ mkfs.ext4 /dev/sda5 <-home
$ mkfs.ext4 /dev/sda6 <-filesystem(沒有設的話就不用)
```
#### 掛載磁碟區
```
$ mount /dev/sda4 /mnt
```
可以用`df`來看有沒有掛載成功
### Wifi連線
安裝前一定要有網路才能下載(廢話)
如果是有線網路的話插上 LAN 就有了,wifi 會比較麻煩
`ping www.google.com` 測試網路狀態
連上後ctrl+c退掉就行
#### 方法一: wifi-menu
```
$ wifi-menu
````
會有一個圖形話的網路界面就可以連了
如果這個方法不能用就用方法二
#### 方法二: iwctl
1. 打`iwctl` 進入網路設置
2. `device list` 看網卡的名子,我的是wlan0
3. `station wlan0 scan` 掃描周圍wifi
4. `station wlan0 get-network` 找尋要連的wifi
5. `station wlan0 connet [wifi名]` 連上wifi,然後打密碼
6. `exit` 退出
最後`ping www.google.com` 看一下有沒有連上
### 安裝
`pacstrap /mnt base` 安裝 base、base-devel、linux、linux-firmware、linux、linux-headers
可以一起裝
```
$ pacstrap /mnt base base-devel linux linux-firmware linux linux-headers
```
### 掛載磁碟區
把剩下的目錄掛載起來
```
$ mount /dev/sda5 /mnt/home
$ mkdir /mnt/boot/efi
$ mount /dev/sda5 /mnt/boot/efi
```
一樣用 `df` 檢查一下
**建立Fstab**
Fstab 是什麼可以自己去 Google 一下
```
$ genfstab -U /mnt >> /mnt/etc/fstab
```
這樣系統就安裝完成了
## 新系統
### 更換到新系統
輸入`arch-choot /mnt`就可以到掛載的目錄安裝新系統
**但這時還不能關機,也不能拔 USB,不然會爆炸(並沒有)**
還沒有安裝網路設置和 Grab,我沒裝網路設置就 reboot 之後會連不上網路,就不能下載網路驅動,然後就只能重灌QQ
### 設定 Bootloader 安裝 Grub
Grub 可以讓你在開機時選系統(可以不裝)
```
$ pacman -S grub efibootmgr os-prober
```
安裝Grub
```
$ grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=GRUB
```
#### Windows 雙系統
沒有裝雙系統可以跳過
將 Windows 的 EFI `mount`到`/mnt`隨便一個地方
我的 Windows的EFI在nvme0n1p1裡
```
$ mkdir /mnt/windows10
$ mount /dev/nvme0n1p1 /mnt/windows10
$ os-prober
```
讓os-prober掃到Windows
#### 產生 grub 設定檔
回來繼續裝Grub,如果雙系統一定要執行上方指令
```cmd
$ grub-mkconfig -o /boot/grub/grub.cfg
```
這樣就好了
**grub 掃不到 Windows**
如果出現`Warning: os-prober will not be executed to detect other bootable partitions`
或之後重開沒有Windows的選項可以試試將`GRUB_DISABLE_OS_PROBER=false`加入
`/etc/default/grub`
*註:記的先裝 vim
```cmd
$ vim /etc/default/grub
```
然後在重複一次
```
$ os-prober
$ grub-mkconfig -o /boot/grub/grub.cfg
```
#### 建立 initial ramdisk
```
$ mkinitcpio -p linux
```
### 安裝 wifi 設置和網路設置
安裝網路工具
dialog 是 wifi-menu 一定要載
```cmd
$ pacman -S dialog
$ pacman -S netctl
$ pacman -S net-tools
$ pacman -S dhclient
$ pacman -S dhcpcd
$ pacman -S dhcp
$ pacman -S wpa_supplicant
$ pacman -S wireless_tools
$ pacman -S networkmanager
$ systemctl enable dhcpcd
```
連上網路wifi:
```cmd
$ wifi-menu
```
用 LAN:
```cmd
$ systemctl enable dhcpcd@enp0s31f6.service
```
`dhcpcd@` 後面要輸入的是你的 interface name,你可以用 `ip link` 或 `ls /sys/class/net` 查到:
```
$ ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group def
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp0s31f6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAult qlen 1000
link/ether 4c:cc:6a:ba:86:bb brd ff:ff:ff:ff:ff:ff
```
**LAN 開機時會自動連線,如果沒有差網路線開機會變慢可以用`systemctl disable dhcpcd@enp0s31f6.service` 關掉**
### 建立 root 密碼
```cmd
$ passwd
```
這樣就可以重開機了
```cm
$ reboot //重新啟動
$ shutdown -h now //關機
```
可以拔掉 USB 了
## 啟用Archlinux
用 root 登入後繼續設置
```
archlinux login: root
passwd:
```
連上網路
有線網路會自動連上
```cmd
// wifi 連線
$ wifi-menu
// 測試網路
$ ping www.google.com
```
### 其他設定
#### 更改 mirror list
各個地區的 mirror list: https://archlinux.org/mirrorlist/all/
把 mirror list 改到台灣這樣在下載東西時跑得比較快
打開`/etc/pacman.d/mirrorlist`在上方加入
`Server = http://free.nchc.org.tw/arch/$repo/os/$arch
Server = http://mirror.archlinux.tw/ArchLinux/$repo/os/$arch
`
```
$ vim /etc/pacman.d/mirrorlist
Server = http://free.nchc.org.tw/arch/$repo/os/$arch
Server = http://mirror.archlinux.tw/ArchLinux/$repo/os/$arch
```
#### 設定時區
```ccmd
$ ln -s /usr/share/zoneinfo/Asia/Taipei /etc/localtime
$ hwclock --systohc
```
#### 設定語言
```cm
$ echo "en_US.UTF-8 UTF-8" > /etc/locale.gen;
$ echo "zh_TW.UTF-8 UTF-8" >> /etc/locale.gen;
$ echo "LANG=en_US.UTF-8" > /etc/locale.conf;
$ locale-gen
```
#### 設定主機名稱
```cmd
$ echo "your-pc-name" > /etc/hostname
```
#### 安裝常用套件
```cmd
$ pacman -S vim sudo git pkgfile bash-completion
```
#### 建立新使用者
```cmd
$ useradd -m -g users -G wheel,storage,power -s /bin/bash "yourusername"
$ passwd "yourusername"
```
設定 sudo 群組,打開 sudoer file 並將`%wheel ALL=(ALL)`前面註解(#)拿掉
```cmd
$ EDITOR=vim visudo
```
#### 安裝顯卡驅動
*注意: 這邊的顯卡驅動的安裝較舊,容易出錯,以官方文件為主*
Intel:https://wiki.archlinux.org/title/intel_graphics
NVIDIA: https://wiki.archlinux.org/title/NVIDIA
Intel
```
$ pacman -S xf86-video-intel
```
NVIDIA:
```
$ pacman -S nvidia
```
`nvidia-smi`查看顯卡
### 安裝桌面
我用的是 KDE
```cmd
$ pacman -S xorg-server plasma konsole
```
裝完後
```
$ systemctl enable sddm.service
```
如果顯示沒有sddm的話安裝sddm
```
$ pacman -S sddm
```
## KDE設定
登入後按 Ctrl+tab+T,打開 Konsole,輸入`sudo wifi-menu`連線
konsole 忘記安裝的話使用 `F2` 登入後 `sudo pacman -S konsole`
### yay
有了 yay 載東西就很方便
```
git clone https://aur.archlinux.org/yay.git
cd yay
makepkg -si
```
### Shell (可裝可不裝)
預設會是 Bash,想改成用 zsh
#### zsh
[教學](https://ithelp.ithome.com.tw/articles/10192899)
安裝
```
$ yay -S zsh
```
將預設的 Shell 改成 zsh
```
$ sudo chsh -s $(which zsh) $(whoami)
```
插件: [zplug](https://www.jkg.tw/p2965/) (大家都說oh-my-zsh太大 見仁見智)
主題: [powerlevel10k](https://github.com/romkatv/powerlevel10k.git) (記得載字體)
### 輸入法&字體
#### 輸入法
```
$ yay -S fcitx5
$ yay -S fcitx5-configtool
$ yay -S fcitx5-chewing
```
設定(system setting) -> Regional Settings -> Input Method -> Add Input Method -> chewing
#### 字體 Consolas 安裝
Consolas 有個 Aur
https://aur.archlinux.org/packages/consolas-font/
但我不會 aur 用所以我手動安裝
點下面下載
https://github.com/pensnarik/consolas-font/raw/master/consolas-fonts-tts.tar.bz2
把檔案放入`/usr/share/fonts` 然後解壓縮,然後安裝
```
$ sudo mkdir /usr/share/fonts/consolas
$ sudo cp consolas-fonts-tts.tar.bz2 /usr/share/fonts/consolas
$ cd /usr/share/fonts/consolas
$ sudo tar jxvf consolas-fonts-tts.tar.bz2
$ sudo mkfontscale
$ sudo mkfontdir
$ sudo fc-cache -fv
```
這樣就行了
其他字體也是放入 `/usr/share/fonts` 後執行下方三行更新已有字體就行了
**註:** 如果顯示`mkfontscale command not found`要載 xorg, oxrg-app
```
$ sudo pacman -S xorg xorg-app
```
#### 中文字體
```
$ yay noto-fonts-cjk
```
### 其他應用程式
**註:** 除了 root 以外的 user pacman都要加 sudo
**filemanager**
檔案管理員,有這個很方便
```
$ yay dolphin
```
**Timeshift**
幫系統備份
Arch 常常更新到自己抽筋(程式不相容,導致有些東西不能用),Timeshit 可以在危機時拯救你
註: 有雙系統的,Restore 後 Grub 那邊的 mount window 要在用一次
```
$ yay -S timeshift-bin
```
**Spectacle**
螢幕節圖
```
$ sudo pacman -S spectacle
```
**Network manager GUI**
字面上的意思,網路管理 GUI
```
$ yay nm-connection-editor
$ systemctl enable NetworkManager.service
```
**註:** `nmcli`可以測試 NetworkManager 有沒有啟動,如果沒有
```
$ sudo /usr/bin/NetworkManager start
或是
$ sudo /etc/init.d/network-manager start
```
**文字編輯器**
Atom (現在不支援了)
```
$ yay atom-editor-bin
```
如果有裝在 gcc-make-run
設定裡Terminal start command那格改成`konsole -e /bin/bash -i -e`
VSCode
選有bin的那個
```
$ yay visual-studio-code
```
**風扇驅動**
nvidia-dkms
我的風扇是 nvidia
```
$yay nvidia-dkms
```
**遠端桌面連線**
別的地方連到自己
https://blog.xzr.moe/archives/237/
KRDC
自己往外連(KDE)
```
sudo pacman -S krdc
```
出現問題
Could not start "xfreerdp"; make sure xfreerdp is properly installed
https://www.linuxquestions.org/questions/slackware-14/slackware-current-krdc-rdp-error-missing-xfreerdp-4175666569/#google_vignette
```
$ yay Freerdp
```
**工作管理員**
system Monitor
```
$ yay plasma-systemmonitor
```
### 其他設定
**yay colors**
```
$ sudo vim /etc/pacman.conf
```
找到 `# Color` 把 `#` 刪掉
```
#UseSyslog
Color
#TotalDownload
CheckSpace
#VerbosePkgLists
```
**指令大小寫忽視(大小寫敏感)**
```
$ vim ~/.inputrc
```
輸入
```vim
set completion-ignore-case on
```
## 問題處理
### 使用Chrome經常當掉(畫面卡住)
常常用Chrome開太多分頁時直接當掉KDE整個不能用,也不能按Ctrl+Alt+F4,但 RAM 並沒有使用多少。
開啟動態配置 RAM
```
yay systemd-swap
sudo vim /etc/systemd/swap.conf
```
加入`swapfu_enabled=1`然後存檔退出,重開機就行了
### 用到一半面當掉
我用了動態配置記憶體後依然沒用,到很久後才發現是沒裝風扇驅動所以才過熱當掉==
### 系統更新後 許多功能損壞
這時我們偉大的 TimeShift 就發揮他的效用了。
### discord 不給更新又打不開
新版本剛出的話 aur 沒有跟上版本所以 yay 沒有新版本,打開 discord 會叫你更新但又更不了==
解決方法:
https://youtu.be/0xVQ1bzqz5k
簡而言之:
到 `/opt/discord/resources` 更改 `build_info.json`
(`sudo vim /opt/discord/resources/build_info.json`)
將 version 改成最新版
還是沒有用的話就更新系統
```
$ sudo pacman -Syu
```
### 更新系統時 key 出問題
```
Import PGP key B8AC08600F108CDF, "Jan Alexander Steffens (heftig) <heftig@archlinux.org>"? [Y/n]
:: Import PGP key F6D84143496F6680, "Campbell Jones <serebit@archlinux.org>"? [Y/n]
(478/478) checking package integrity [###########################################] 100%
error: zlib: signature from "Levente Polyak (anthraxx) <levente@leventepolyak.net>" is unknown trust
:: File /var/cache/pacman/pkg/zlib-1:1.3-2-x86_64.pkg.tar.zst is corrupted (invalid or corrupted package (PGP signature)).
Do you want to delete it? [Y/n]
```
把 keyring 更新就好
`$ sudo pacman -S archlinux-keyring`