> 撰寫開始時間: 2023/07
>
> 建置之硬體環境:
> * CPU: i3-12100
> * RAM: 16GB
> * Disk: 512GB SSD/4TB HDD
> * MB: ASUS PRIME B660M-K D4-CSM
> * Network: Ethernet
# 播種與施肥
> 從 USB 開機到初次重新開機。
請準備好 Arch linux 安裝印象檔並燒至 USB,插入電腦後開機,當然虛擬機也行,這部分比較基礎就不囉嗦了。
另外,如果在這個階段不小心搞錯任何操作或命令,除了被格式化的硬碟外都可以挽回,也可以嘗試重新開機並繼續用 USB 操作多次,並不是初次重開機前搞砸後就沒救了。
## (Optional) 無線網路連線
當安裝之目標電腦沒有有線網路時,需先設定 Wifi 連線,因為後續需要安裝很多東西,包含 Network Manager 等。
```
[iwd]# device list
```
確認自己網路設備的名字 (以 `wlan0` 為例) 後,啟用 scan 功能。
```
[iwd]# station wlan0 scan
```
查看可連線的無線網路。
```
[iwd]# station wlan0 get-networks
```
連線上網,假設想要連上 `Eroiko` 這個 wifi。
```
[iwd]# station wlan0 connect Eroiko
Passphrass: ******** # 叫我們輸入密碼
```
離開 `iwctl` 然後嘗試 `ip a` 以及 `ping` 一下看是否成功連上網。
## 格式化硬碟
注意,被格式化的硬碟將無法挽回,這裡務必慎重。
### 基本概念
眼下的檔案系統是 USB 的,目前還沒有掛載任何目標電腦的硬碟,所有對目標電腦檔案的修改都要等到掛載後才能使用。
現在使用 `ls /` 會看到的是 USB 中的根目錄資訊,當中會看到有個資料夾叫 `/mnt`,是掛載硬體的常用根目錄,在切換至正式的檔案系統 (`arch-chroot`) 之前,「正式的根目錄」就是 `/mnt`,比如正式的家目錄就是 `/mnt/home`,依此類推。而我們會把根目錄對應的 partition 掛載至 `/mnt` 下,家目錄對應的 partition 掛載至 `/mnt/home`。
切換至目標電腦後,檔案系統的結構就是我們熟悉的 Linux 慣用的檔案系統結構了。
### 佈局與檔案系統
以下將建立一個典型簡單的 Partition 佈局:root + home (Ext4)。
事實上各位可以選擇自己喜好的佈局方式以及 File System,比如:
* 一個 root 走天下風 (with Ext4)
* 經典款 root + home (with Ext4)
* VFS 對物理硬碟抽象
* Btrfs Raid
* ZFS Storage Pool
* ...
要不要分 swap 也是個人的自由,就算沒 swap,Linux 也會在記憶體不足時生出 tmpfs,所以也不是特別必要。
### 分割硬碟
用 `cfdisk` 點陣圖型介面互動式的快樂分割:)
> fdisk 也行,但 `cfdisk` 更簡單好用。
> 可以善用 `lsblk` 來得知可用的硬碟。
```
cfdisk <DISK_PATH>
```
### 根目錄的格式化與掛載
格式化為指定的 file system。
> 在此設為 ext4,也可以 btrfs 等等的,e.g. 用 `mkfs.btrf`,不過指令就沒那麼簡單了,請參考[Btrfs 官網](https://archive.kernel.org/oldwiki/btrfs.wiki.kernel.org/)。
```
mkfs.ext4 /dev/...
```
將根目錄掛載到格式化好的資料夾。
```
mount /dev/... /mnt
```
### EFI 磁區的掛載
(Optional) 若 EFI 磁區不存在,也就是裝在全新的硬碟上時,格式化 EFI 磁區
```
mkfs.vfat -F 32 /dev/...
```
創建 EFI 資料夾
```
mkdir /mnt/boot
```
將 EFI 磁區掛載到格式化好的資料夾
```
mount /dev/... /mnt/boot
```
### 家目錄的格式化與掛載 (optional)
`home` 資料夾也類似,不過要先創建資料夾
```
mkdir /mnt/home
mkfs.ext4 /dev/...
```
將家目錄掛載到格式化好的資料夾
```
mount /dev/... /mnt/home
```
最後可以用 `lsblk` 來確認是否根目錄、家目錄和 EFI 磁區都掛載到正確的位置。
### 建立 file system table (`fstab`)
```
mkdir /mnt/etc
genfstab -U -p /mnt >> /mnt/etc/fstab
```
透過查看 `/mnt/etc/fstab` 確認是否成功建立檔案系統表
```
cat /mnt/etc/fstab
```
應該要看到我們剛創建並掛載好的 `/` (`/mnt`)、`/home` (`/mnt/home`) 目錄,以及 `/boot` (`/mnt/boot`) 目錄與對應的相關訊息。
## 上網安裝基本模組
(Optional but recommended) 在進行安裝與下載操作之前,可以先去開啟 Arch Linux 的 package manager: `pacman` 的平行下載功能。
至 `/etc/pacman.conf` 尋找 `ParallelDownloads` 關鍵字,把下面這行反註解掉:
```txt
#ParallelDownloads = 5
```
上述修改將作用在 USB 上,之後切換 (`arch-chroot`) 到安裝中的 Arch Linux 上也推薦這樣做。
接著正是下載並安裝好基本模組,然後就可以準備切換到剛裝好基本套件的 Arch Linux 下繼續安裝了。
```
pacstrap -i /mnt base
arch-chroot /mnt
```
> 如果遇到奇怪的 key 問題,可以用以下指令來解決 (通常是因為 ISO 太舊)
>
> ```
> sudo pacman -S archlinux-keyring
> sudo pacman -Syu
> ```
>
> https://www.linuxquestions.org/questions/arch-29/neglected-upgrading-for-a-few-weeks%3B-is-this-a-problem-4175715274/
## 系統基本設定
### Arch Linux 套件管理器 Pacman 基本介紹
[pacman/Tips and tricks](https://wiki.archlinux.org/title/pacman/Tips_and_tricks)
Pacman 為 Arch Linux 的官方套件管理器,與 Debian 系中的 `apt`,最常用的指令不外乎:
```bash
sudo pacman -S <PACKAGE_NAME>
```
跟 Debian 系的 `apt` 有點像,他們有著以下的關係。
```bash
# 搜尋 local repository list 並嘗試安裝軟體
apt install <PACKAGE_NAME>
pacman -S <PACKAGE_NAME>
# 更新 local repository list
apt update
pacman -Sy
# 升級所有軟體至最新版本
apt upgrade
pacman -Su
# 更新 local repository list 並升級所有軟體
apt update && apt upgrade
pacman -Syu
```
懶人包: 一段時間沒用 Arch Linux 的話,第一個安裝指令都是
```bash
sudo pacman -Syu
```
而後續為了節省時間,會使用最快速的
```bash
sudo pacman -S
```
### 安裝基本模組
這些東西八成都會用到的,裝下去就對ㄌ >w0
```bash
pacman -S linux linux-headers linux-firmware base-devel openssh networkmanager network-manager-applet wpa_supplicant wireless_tools netctl efibootmgr dialog mtools dosfstools
```
另外至少裝一個用的順手的文字編輯器,以下是常見的兩個都裝。
```bash
pacman -S vim nano
```
### 啟用系統服務
允許啟用剛剛裝的 Network Manager 和 ssh。
> 系統服務 [`systemctl`](https://wiki.archlinux.org/title/systemd) 的常用指令如下 (當然,正常使用者都需要 `sudo`)
>
> #### 單次啟用 `SERVICE_NAME`
> 立即啟用服務。
> ```
> systemctl start <SERVICE_NAME>
> ```
> #### 允許啟用 `SERVICE_NAME`
> 在下次開機時生效。
> ```
> systemctl enable <SERVICE_NAME>
> ```
> #### 允許並立即啟用 `SERVICE_NAME`
> ```
> systemctl enable --now <SERVICE_NAME>
> ```
> #### 停止啟用 `SERVICE_NAME`
> 在下次開機時生效。
> ```
> systemctl disable <SERVICE_NAME>
> ```
> #### 查看 `SERVICE_NAME` 的狀況
> ```
> systemctl status <SERVICE_NAME>
> ```
> #### 刷新 `systemctl`
> ```
> systemctl daemon-reload
> ```
#### 啟用 network manager
```
systemctl enable NetworkManager
```
#### 啟用 ssh 服務
```
systemctl enable sshd
```
### 設定 initrd (initial ram disk)
```
mkinitcpio -p linux
```
> [mkinitcpio](https://wiki.archlinux.org/title/mkinitcpio) is a Bash script used to create an initial ramdisk environment.
### 設定密碼與使用者
#### 設定 root 密碼
```
passwd
```
#### 為 `wheel` 使用者群組設立 `sudo` 權限
> 後續將假定 `wheel` 群組擁有 `sudo` 權限
```
visudo
```
然後至 `# %wheel ALL=(ALL) ALL` 這行將其反註解。
#### 新增新使用者
> 新增使用者 `SOME_NAME` 至 `users` 群組且為其指派家資料夾 (`-m`),並將其加入可選群組 `wheel`,以便使用 sudo。
```
useradd -m -g users -G wheel SOME_NAME
```
#### 為新使用者設定密碼
> 為 `SOME_NAME` 使用者設定密碼。
```
passwd SOME_NAME
```
## 美麗的 rEFInd
安裝 [rEFInd](https://wiki.archlinux.org/title/REFInd) 套件。
```
pacman -S refind
```
接著將 rEFInd 安裝到 `/boot` 下,其安裝內容與設定檔會在 `/boot/EFI/refind` 下:
```
refind-install
```
然後去刪除 `/boot/refind_linux.conf` 裡的前兩行 (與 USB 相關的掛載點)。
這樣便完成基本設定,接下來可以去 [rEFInd theme](https://github.com/topics/refind-theme) 找好看的主題安裝 :)
安裝在 `/boot/EFI/refind/themes` 下,並去 `/boot/EFI/refind/refind.conf` 的最後一行加入:
```txt
include themes/<YOUR_THEME_FOLDER>/theme.conf
```
Ref: [rEFInd引导使用教程](https://zhuanlan.zhihu.com/p/67114559)
到此,已經完成最基本的設定,可以準備拔掉 USB 並初次重新開機。
# 成長茁壯
> 初次重新開機後的基本設定。
## (Optional) 正式連上 Wifi
[3 Ways to Connect to WiFi from the Command Line on Debian](https://linuxhint.com/3-ways-to-connect-to-wifi-from-the-command-line-on-debian/)
## 安裝 Nvidia
> 這裡務必萬分謹慎,否則可能會落到要重裝的地步...
> 安裝時請對照[官方文件](https://wiki.archlinux.org/title/NVIDIA),確認自己的 Nvidia 顯卡對應之驅動的安裝方式。
最泛用的安裝程序如下:
* 安裝套件
```bash
sudo pacman -S nvidia
```
* 關閉 `kms` hook 來避免 `initramfs` 加載 `nouveau`
去 `/etc/mkinitcpio.conf` 把 `HOOKS` 這行列表中 `kms` 去掉。
* 套用新 `initramfs` 加載設定
```bash
sudo mkinitcpio -P
```
* 重新開機
> 不要拖,直接重開來應用設定
```bash
sudo reboot
```
### 調整時區、主機、網路
這些設定不急,之後調都可以。
#### 列出時區相關資訊
```
timedatectl
```
#### 列出所有時區
```
timedatectl list-timezones
```
#### 將時區設為台北(以台北為例)
```
timedatectl set-timezone Asia/Taipei
```
#### 列出主機名稱相關資訊
```
hostnamectl
```
#### 設定主機名稱為 `SOME_NAME`
> 以下使用者都以 `SOME_NAME` 舉例,表示某使用者
```
hostnamectl hostname SOME_NAME
echo "SOME_NAME" >> /etc/hostname
```
#### 反註解自己的語言設定
```
vim /etc/locale.gen
```
#### 正式生成語言設定
```
locale-gen
```
#### 啟用時間自動同步的系統服務
```
systemctl enable systemd-timesyncd
```
## 安裝 [AUR](https://aur.archlinux.org/)
為 Arch 社群的套件庫,裏面各種五花八門的套件都有。事實上,真正使用應用程式時多數都不是使用 pacman,而是 AUR 的套件管理器: `yay`,用起來跟 pacman 一樣香。
另外注意到 `yay` 為了系統安全,不允許在管理者權限下安裝軟體,使用時應該作為一個正常使用者的情況下進行操作,而非 root。
```bash
sudo pacman -S git
git clone https://aur.archlinux.org/yay.git
cd yay
makepkg -si
```
有 `yay` 後我們可以先來補足前面缺少的一些小套件。
### (Optional) 補齊 cpio
```bash
yay -S mkinitcpio-firmware
```
### 中文支援
```bash
yay -S ibus ibus-chewing libibus libchewing
```
另外可以先安裝 `noto-fonts-cjk` 和 `noto-fonts-emoji` 預備。
### 日本語支援
> 如果前面已經裝過 `ibus` 就不用再裝了
```bash
yay -S ibus ibus-mozc
```
## tty 終端機字型調整
安裝適配原生終端機的 bitmap 字型
```
sudo pacman -S terminus-font
```
單次設定字型
```
setfont <font-name.gz>
```
`<font-name.gz>` 有哪些選擇可至 `cd /usr/share/kbd/consolefonts` 查看。
然後設定每次開機的 tty 終端機字型,去 `/etc/vconsole.conf` 裡面加入 `FONT=<font-name.gz>`
[How to Change Linux Console Fonts using Arch Linux - Change the font to actually see it!! (2021)](https://www.youtube.com/watch?v=nxUTnZVdS64)
## 優雅強大的終端機設定 `oh my zsh`
> ~~提升開發效率 X, 心情愉快 O~~
> oh my zsh 算效能比較低的,不過簡單好設定 OwO
### 建置目標
#### 主體
| | Target | Feature|
| ------------- | ----------- |--|
| Shell | [`zsh`](https://zh.wikipedia.org/zh-tw/Z_shell) | 比起 `bash` 有更多開箱即用的功能,能輕鬆客製化 |
| Framework | [`oh my zsh`](https://ohmyz.sh/) | 能裝很多主題、外掛的 `zsh` 框架 |
| Theme| [`powerlevel10k`](https://github.com/romkatv/powerlevel10k) | 極其美妙的終端機主題,內建可調整許多美觀與呈現資訊設定 |
#### 外掛
* [`zsh completion`](https://github.com/zsh-users/zsh-completions): 根據當前的輸入自動補全命令。
* [`auto suggestion`](https://github.com/zsh-users/zsh-autosuggestions): 根據過往的命令與當前的輸入自動建議輸入。輸入時在背後會浮現淺色的提示。
* [`syntax highlighting`](https://github.com/zsh-users/zsh-syntax-highlighting): 對命令加上顏色標註。合法的命令顯示綠色、不合法的為紅色、字串為黃色...
### 下載並安裝必要套件
先安裝等等要用到的套件...
```bash
sudo pacman -S git curl vim neofetch zsh
```
然後安裝 `oh my zsh`,接著下載 `zsh` 相關外掛於 `oh my zsh` 內。
> 使用 ZSH 變數將外掛放入 `oh my zsh` 內管理的命令自動化。
```bash
# install oh my zsh and zsh plugins
yes | sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
# zsh-completion
git clone https://github.com/zsh-users/zsh-completions ${ZSH_CUSTOM:-${ZSH:-~/.oh-my-zsh}/custom}/plugins/zsh-completions
# zsh-autosuggestions
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
# zsh-syntax-highlighting
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
# powerlevel10k
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k
# after this, go into zsh
zsh
```
(以下為讓 `powerlevel10k` 能大展身手的等寬字型的安裝,非必要。)
由 [powerlevel10k 官方](https://github.com/romkatv/powerlevel10k#fonts)建議,使用 `Meslo Nerd Font` 連體字型最合適,該網站列敘該如何安裝此字型,並在終端機中使用。
### 調整 `zsh` 客製化設定
接著進入 `zsh` 設定檔 `~/.zshrc`。
> 請使用 `vim`, `nano`, `emacs`, `gedit` 之類的文字編輯器,依照前面的命令的話,應該已經裝好 `vim` 了。
1. 將 `powerlevel10k` 主題加入設定
找到 `ZSH_THEME` 參數,修改設定。
```bash
# Set name of the theme to load --- if set to "random", it will
# load a random theme each time oh-my-zsh is loaded, in which case,
# to know which specific one was loaded, run: echo $RANDOM_THEME
# See https://github.com/ohmyzsh/ohmyzsh/wiki/Themes
ZSH_THEME="powerlevel10k/powerlevel10k"
```
2. 將前面 clone 進來的外掛程式庫加入設定
注意 `zsh complition` 不應該直接加入 `plugins` 列表中。詳見 [issue 603](https://github.com/zsh-users/zsh-completions/issues/603#issuecomment-967116106)。
```bash
# auto suggestion, syntax highlighting
plugins=(git zsh-autosuggestions zsh-syntax-highlighting)
# zsh completion
fpath+=${ZSH_CUSTOM:-${ZSH:-~/.oh-my-zsh}/custom}/plugins/zsh-completions/src
```
另外,以上設定必須在 `source $ZSH/oh-my-zsh.sh` 這行以前,因為該行即是啟動 `oh my zsh` 與其管理之所有外掛。
3. 啟用 `powerlevel10k` 主題
儲存對 `~./zshrc` 的修改,並用以下命令使其生效。
```bash
source ~/.zshrc
```
此時 `powerlevel10k` 會根據當前終端機的字型提示我們跟如何完成此主題的快速調整。若對調整的結果不滿意,可使用 `powerlevel10k` 內建命令 `p10k configure` 來啟動快速設定程式。
4. (Optional) 使用 `neofetch`
將 `neofetch` 加入 `.zshrc` 的第一行,即可在每次開啟終端機時印出系統基本訊息。
# 開花結果
> 邁入圖形介面 Gnome
以 Gnome 為例,安裝只要一句就好,就是要稍等一下。
```
sudo pacman -S gnome
```
接著會問很多問題,無腦 Enter 是一個選擇,只是 Gnome 就會裝一堆你可能不想要的套件,最好可以查查那些套件都在做啥。
下面列出比較重要的幾個套件:
* baobab: 硬碟空間分析
* gdm: Gnome display manager
* gnome-backgrounds
* gnome-characters
* gnome-color-manager
* [gnome-connections](https://apps.gnome.org/zh-TW/app/org.gnome.Connections/): 遠端連線
* gnome-console: 陽春終端機... (拿來裝 gnome-terminal 後就可以忽視了)
* gnome-control-center: 設定
* gnome-disk-utility: 基礎易用的硬碟管理
* gnome-font-viewer
* gnome-keyring: 密碼管理器 (鑰匙圈)
* gnome-logs
* gnome-menus: 如其名,menu,也就是檢視所有軟體的軟體
* gnome-remote-desktop
* gnome-session
* gnome-setting-daemon
* gnome-shell
* gnome-shell-extensions
* gnome-software... 就是軟體商店...但真的沒多好用 0.0
* gnome-system-monitor
* gnome-user-docs ?!
* gnome-user-share
* [grilo-plugins](https://gitlab.gnome.org/GNOME/grilo-plugins)
* [gvfs](https://zh.wikipedia.org/zh-tw/GNOME%E8%99%9A%E6%8B%9F%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F)
* `gvfs-*` 都是輔助軟體
* [malcontent](https://gitlab.gnome.org/GNOME/gnome-software/-/merge_requests/190)
* mautilus: gnome 的檔案總管
* [Orca](https://help.gnome.org/users/orca/stable/)
然後啟用系統服務。
```bash
sudo systemctl enable gdm # enable gdm, will start service when next boot
sudo systemctl start gdm # start gdm, switch to gnome immediately
```
## Gnome 的基本設定與外掛
安裝 Gnome tweaks、gnome extension (根據不同版本的 Gnome 方法有異,就不記錄了)。
Gnome extensions 中建議安裝:
* dash to dock: 讓工作列變得像 macOS
* blur my shell: 讓頂端變的透明,像是 macOS
* clipboard indicator: 顯示歷史複製文字列表
* freon: 安裝第二個,有圖示的那個
* net speed simplified: 顯示網速
* alphabetical app grid
* just perfection
* AppIndicator and KStatusNotifierItem Support: 顯示 CPU 等的性能數據
## GUI 下好用軟體安裝紀錄
* [Vscode](https://wiki.archlinux.org/title/Visual_Studio_Code)
> 以上官方推薦的三個都行,我是選 Microsoft 官方版。
> ~~不要裝 Gnome software store 或者野雞版的,保證會讓你失望,功能東缺一塊西缺一塊。~~
```bash
yay -S visual-studio-code-bin
```
* Discord + better discord
```
yay -S discord
```
在 Linux 上裝 better discord 可見[官網](https://gist.github.com/ObserverOfTime/d7e60eb9aa7fe837545c8cb77cf31172)。
注意 better discord 的 themes 和 plugins 路徑為 `~/.config/BetterDiscord/{themes,plugins}`。
# 遠端作業
作為伺服器的 Arch Linux,需要確保能順暢遠端操作。
## Wake On LAN 網路喚醒
### WOL (Wake On LAN) 介紹
原理是特殊的網卡在電腦關機時,仍能接收 Magic Packet (魔法封包),接收到時透過 PCI 通知主機板開機。默認接收 Magic Packet 的 Port 為 `9` 或 `7`。
### 魔法封包
魔法封包的內容為 6 bytes 的 `F` 和 96 bytes 的目標網卡 MAC 地址 (48 bits) 重複 16 遍。故封包大小為
$$
6 + \dfrac{48}{8 \rm{bit}} \times 16 = 102 \ (\rm{bytes})
$$
> 魔法封包的細節原文,引自[維基百科](https://en.wikipedia.org/wiki/Wake-on-LAN)。
>
> The magic packet is a frame that is most often sent as a broadcast and that contains anywhere within its payload 6 bytes of all 255 (FF FF FF FF FF FF in hexadecimal), followed by sixteen repetitions of the target computer's 48-bit MAC address, for a total of 102 bytes.
### 設定 WOL
有三方面的設定要完成。
1. 硬體
首先確認**主機板**與**網卡**是否支援 WOL (當今網卡基本上都支援)。
接著進 BIOS,依照各個主機板不同的方式開啟 WOL 功能。
:::success
比如[本主機板](https://www.asus.com/tw/motherboards-components/motherboards/prime/prime-b660m-k-d4-csm/techspec/),[華碩官網](https://www.asus.com/tw/support/FAQ/1045950/)說要啟動 Power On By PCI-E 選項。
:::
2. OS 端
以下簡單說明作法。
1. 確認 `ethtool` 是否已安裝
```bash
sudo pacman -S ethtool
```
2. 確認乙太網設備名稱
```bash
ip a # 列出所有網路設備與相應的連線資訊
```
找到狀態為 `UP` 的乙太網卡,其名稱通常以 `e` 開頭,比如 `ethX`, `enpXsY` (`X`, `Y` 為某數字)。找到後,以下暫稱該乙太網卡為 `ethX`。
3. 確認乙太網設備狀態
```bash
sudo ethtool ethX
```
會列出 `ethX` 的一系列狀態,其中 `g` 表有啟用 WOL;`d` 表未啟用。若只想單次設置 WOL,用以下命令即可。
```bash
sudo ethtool -s ethX wol g # 設定 ethX 的 wol 項目為 g (enable)
```
4. 為網路介面設定自動啟用 `WOL`
* 以 yay 安裝 `wol-systemd`
```bash
yay -S wol-systemd
```
* 啟動系統服務
> `@` 後面為監視 WOL 的網路介面
```bash
sudo systemctl enable wol@enp4s0
```
以上方法即可一勞永逸。
另外無線網卡的情況較複雜,而且 NAS 比較建議是走乙太網才較穩定且高速,故不特別介紹,有興趣者可參見[本網站](https://www.cyberciti.biz/faq/configure-wireless-wake-on-lan-for-linux-wifi-wowlan-card/)。
3. 啟動
此時 server 已經準備好被喚醒。我們需將 Magic Packet 送至網卡所在之主機的 Port `9` (or `7`)。
可以使用手機、電腦等喚醒。比如 Andriod 手機的 [WolOn](https://play.google.com/store/apps/details?id=com.bitklog.wolon&hl=zh_TW&gl=US)、Linux/macOS 的 `wakeonlan` 套件 (macOS 可使用 `brew` 下載使用)。
不過我也寫了個簡單的 Python 腳本可完成區域網路、網際網路 (IP/Domain name),請參考 [wakeonlan](https://github.com/Shiritai/wakeonlan) 腳本
* 區域網路喚醒
以 `wakeonlan` 套件為例。預設會將 `MAC_ADDRESS` 發送至 `255.255.255.255:9` (也就是 braodcast)。套件使用細節可用 `wakeonlan` 命令查詢。
```bash
wakeonlan MAC_ADDRESS
```
* 網際網路喚醒
除了要知道 MAC 地址,還需要知道 IP 位置。
:::warning
只要扯上網際網路,一切就麻煩起來了 :p
:::
為此要解決兩個問題:
* 家用環境下,可能會遇到浮動 IP 的議題,此時可使用 DDNS 服務,或者將 IP 轉為固定 IP。
* 要調整 Port Forwarding,將封包傳遞至正確的 LAN IP + Port。(常見是 External Port `9` 傳遞至`Host_LAN_IP:9`)
## `SSH` 設定
> ssh 方便我們在遠端控制電腦,可依此使用 `SSHFS`, `VSCode remote service` 等方便功能。
* 安裝
> 其實前面已經做過這件事了。
```bash
sudo pacman -S openssh
```
* 啟用
```bash
sudo systemctl enable sshd # enable ssh server
```
* 確認伺服器端狀態是否正常
```bash
sudo systemctl status sshd # you should see
```
應該看到類似以下結果。確認 `ssh.service` 和 `vendor preset` 為 `enable`,前者表當前是否啟用服務,後者表啟動時是否自動啟用本服務 (`ssh`)。
```bash
● sshd.service - OpenBSD Secure Shell server
Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
Active: active (running) since ...
```
* (Optional) 將本地 ssh 公鑰加入伺服器
```bash
ssh-copy-id IP_OF_SERVER
```
## Anydesk 遠端工作
```bash
yay -S anydesk-bin
```
目前 anydesk 只支援 x-window GUI,wayland 這種比較新的不行,可用以下指令確認:
```bash
echo $XDG_SESSION_TYPE
```
如果出現 `x11` 表 ok,`wayland` 的話目前不行,可以 sign out 後在輸入密碼處右下角選擇 `gnome-xorg` 便可。
然後設定無人值守功能,這樣就不用每次連線時都需要在 host 點確認。
另外 Anydesk 實際上整合了 WOL 功能,>w0 很好用ㄉ
## Hyprland
為基於 Wayland 的 GUI,以高效絢麗著稱。
首先安裝 Hyprland...
```bash
sudo pacman -S hyprland
```
然後安裝 Hyprland 小工具
```bash
yay -S kitty waybar-hyprland otf-font-awesome network-manager-applet brightnessctl pw-volume hyprshot power-profiles-daemon wofi hyprpaper swayidle swaylock wlogout dunst cliphist pipewire pipewire-pulse wireplumber pavucontrol xorg xorg-xwayland xdg-desktop-portal-hyprland xdg-desktop-portal-gtk polkit-kde-agent qt5-wayland qt6-wayland qt5ct nwg-look udiskie greetd greetd-tuigreet chezmoi fcitx5-im fcitx5-chewing fcitx5-qt fcitx5-gtk fcitx5-chinese-addons
```