序章

中文 | English

下文將用“本書”來代指“本手冊”。

宣告

對於普通使用者來說,本專案自身沒有任何價值。
本書亦是如此。
這裡沒有輕小說中“劍與魔法”的奇幻異世界冒險歷程, 更沒有《詩經》中“墮山喬嶽,允猶翕河”般遼闊壯美的風景。
有的只是無聊透頂的內容。

對於非普通使用者來說,它的價值主要取決於使用場景。

在本章的“使用場景”中,我們將簡單介紹相關內容。

若在同一場景下,存在更優的替代品,那麼您不妨敞開胸懷,給本專案多提幾個 issues。
或許有一天,世界會變得更加美好呢!

除了 android 外,對於某些功能或工具,本專案的開發者若未將其打成包(例如 deb 包),並且未在本書中對其進行詳細解析,那麼只建議您在容器中使用。
對於 android, 請翻閱 “容器/android”。

old-version 的內容會被新版所替代,新版將會放在 dev 分支。
Trust us. 未來會更好的!

如何閱讀這本書

在閱讀本書時,您需要了解的內容。

本頁面由 mdbook 生成。

  • 左上角的三條槓 "≡"
    • 點選三條槓開啟目錄
  • 頁面最下方的評論區
    • 您可以使用 github 帳號登入,您發表的內容將與 "github discussions" 保持同步。
    • 同理,如果您在 discussions 中找到當前章節的討論頁面,並在裡面發表內容,那麼相關內容也會同步到下方的評論區。
  • 左上角的畫筆 "🖌️"
    • 先點選畫筆,再選擇主題,最後完成切換
  • 左下角的 "<" 符號
    • 點選 "<" 跳轉到上一頁
  • 右下角的 ">" 符號
    • 點選 ">" 跳轉到下一頁

如果您的網頁(螢幕)顯示空間足夠寬,那麼"<" 和 ">" 將位於中間,而不是下方。

使用場景

本專案存在的意義:

  • 在合適的場景下,您使用本專案去做一些有趣或有意義的事情。

對您來說有意義的事情,對本專案而言,亦是如此。

You can do something interesting or meaningful.

有意義與否

有意義與否並非如 bool 型別那般非 truefalse
它是相對的,而非絕對。
在這裡我們並不想深入去探求哲學問題,簡而言之,這個問題的答案因人而異,沒有絕對的標準。

問題:什麼是意義不大的事情呢?

假設存在以下兩個場景:

  • 1.您在 arm64 裝置上模擬 x64 環境,然後在上面打!遊!戲!
  • 2.您在 arm64 裝置上遠端連線到 x64 windows 裝置,然後執行 windows x64 平臺的遊戲。

前者花了一小時,而後者花了五分鐘。


主觀回答 1: 前者可能是有趣的,但是意義相較於後者而言,可能沒有那麼大。
時間是很寶貴的,我希望大家能把時間花在更有意義的事情上,而不是浪費時間。


主觀回答 2: 我既沒有電腦,也租不起 x64 虛擬專用伺服器,更玩不起雲遊戲,在手機上體驗 windows 遊戲讓我感受到了快樂,我認為這是值得的,並且是有意義的。


在下文中,我們將會假設幾個場景,您可以對其進行評價,判斷其是否有意義。

android 、圖書館與 LaTex

  • 地點:圖書館
  • 裝置:android 手機/平板 (無 root)
  • 條件:無網路,或網路狀態不佳 (網速很慢)

latex_editor

  • 描述:您在圖書館裡,帶著 android 手機/平板,在離線環境下,執行 gnome + LaTex 環境(texlive-full) + LaTex 編輯器,在上面用 LaTex 編輯器寫文章/排版。

iOS、旅館與 manjaro+goland

  • 地點:旅館、酒店、餐廳、銀行或電信營業廳(等網路良好的場所)
  • 裝置:iPhone/iPad (或其他帶有瀏覽器的裝置)
  • 條件:網路環境優秀(至少要良好)
  • 描述:您出門在外,只帶了 ios 裝置。可是您做夢都想要用 idea, cliongoland
    github 的 codespace (線上版 vscode) 可以執行不同的環境,於是您將 tmoe 的 gui 容器直接作為 codespace 的 devcontainer。 在上面跑 gui (xfce), 再跑 goland。

在 vscode 上跑 jetbrains goland, 這何嘗不是一種 PV 呢?關於 PV 的說明,詳見本章的“題外話”。

  • 教程:
    • 說明:
      • 截至 2022-06-15, github 官方並沒有提供基於 manjaro 的 xfce 環境(容器映象)。
      • 儘管 github 的 codespace (vscode)外掛自帶了生成配置的功能,但是之後本專案開發者可能會寫個類似功能的小工具。從而讓大家更省心一點。
    • 準備:
      • 您擁有一個支援 codespace 的 github 賬號
      • 若顯示區域不夠寬,則您可能需要將瀏覽器(如 safari)切換為桌面版網站(檢視)
    • 開始:
      • 成功連線到 codespace 後,開啟 vscode 內建終端,並在專案目錄下執行以下操作
mkdir -p .devcontainer
cd .devcontainer
cat >devcontainer.json<<-'EOFJSON'
// For format details, see https://aka.ms/devcontainer.json.
{
    "name": "Manjaro",
    "dockerFile": "Dockerfile",
    "runArgs": [
        "--cap-add=SYS_PTRACE",
        "--security-opt",
        "seccomp=unconfined"
    ],
    // "mounts": [
    //     "source=dind-var-lib-docker,target=/var/lib/docker,type=volume"
    // ],
    "mounts": [
        "source=/var/run/docker.sock,target=/var/run/docker.sock,type=bind"
    ],
    "overrideCommand": false,
    // Configure tool-specific properties.
    "customizations": {
        // Configure properties specific to VS Code.
        "vscode": {
            // Add the IDs of extensions you want installed when the container is created.
            "extensions": [
                // "MS-CEINTL.vscode-language-pack-zh-hans",
                "ms-azuretools.vscode-docker"
            ]
        }
    },
    // Use 'forwardPorts' to make a list of ports inside the container available locally.
    "forwardPorts": [
        5902
    ],
    // Use 'postCreateCommand' to run commands after the container is created.
    // "postCreateCommand": "docker --version",
    // Comment out to connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root.
    // "build": {
    //     "args": {
    //         "ENABLE_NONROOT_DOCKER": "false"
    //     }
    // },
    "remoteUser": "ddk"
}
EOFJSON

cat > Dockerfile<<-'EOFDKF'
# syntax=docker/dockerfile:1
#---------------------------
# FROM cake233/manjaro-zsh-amd64

FROM cake233/manjaro-xfce-amd64

# set username & group
ARG USERNAME=ddk
ARG GROUPNAME=ddk
# ARG USER_UID=1001
# ARG USER_GID=$USER_UID

# rm cn mirrorlist
RUN sed -e '/bfsu.edu.cn/d' \
    -e '/tuna.tsinghua.edu.cn/d' \
    -e '/opentuna.cn/d' \
    -i /etc/pacman.conf

# install dependencies
# live server: https://docs.microsoft.com/en-us/visualstudio/liveshare/reference/linux#install-linux-prerequisites
RUN pacman -Syu \
    --noconfirm \
    --needed \
    base \
    base-devel \
    git \
    lib32-gcc-libs \
    lib32-glibc \
    gcr \
    liburcu \
    openssl-1.0 \
    krb5 \
    icu \
    zlib \
    gnome-keyring \
    libsecret \
    desktop-file-utils \
    xorg-xprop \
    xdg-utils

# locale: Chinese Simplified (China)
ENV LANG=zh_CN.UTF-8

# add new user
RUN groupadd --force ${GROUPNAME} \
    && useradd --create-home --gid ${GROUPNAME} ${USERNAME} \
    && mkdir -p /etc/sudoers.d \
    && echo "${USERNAME} ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/ddk \
    && chmod 400 /etc/sudoers.d/ddk

WORKDIR ["/home/$USERNAME"]

# clean cache
RUN yes | pacman -Scc; \
    rm -rf /var/cache/pacman/pkg/* \
    /tmp/* \
    2>/dev/null

# command: sleep infinity
CMD [ "sleep", "inf" ]
EOFDKF

rebuild:

  • 1.按下 F1 或 Ctrl+Shift+P 或 cmd+shift+p
  • 2.搜尋 rebuild
  • 3.選擇 Codespaces: Rebuild container

您也可以手動選擇“遠端資源管理器”,再選擇 Codespace, 最後點選 rebuild container 的 圖示。
ddk 可以修改為其他使用者名稱。 關於上述命名的來源,詳見“題外話”

關於 vnc

進入了 codespace 環境後,在內建終端裡執行以下操作

  • 執行 tmoe
  • 先選擇語言環境,再選擇 tools
  • 接著選 software, 然後選 dev
  • 安裝 goland, clion 或其他 IDEs
  • 退出 tools

由於此容器映象已經預裝了 xfce, 因此您無需重複安裝。

對於網頁連線的 codespace:

  • 執行 novnc,設定密碼
  • 開啟埠轉發處的 36080 對應的 local address

對於本地 vscode 連線的 codespace:

  • 執行 startvnc
  • 開啟 vnc 客戶端,輸入本地 vnc 地址(預設是 127.0.0.1:5902)。

其他場景

序章中描述的內容是有限的,更多內容分佈於本書的其他章節。
對於其他場景,例如:您想要使用 github actions 來編譯不同架構的軟體,那麼可以去看看 “容器/docker”。

題外話

注意:
題外話對您來說,可能是沒有意義的,甚至有可能會引起您的反感
開發者建議您開啟目錄,並跳轉至其他章節。


Q: 為什麼是 ddk

A: 有個叫 ddk 的使用者,給本專案提了個與 codespace 相關的 issue, 於是他就“青史留名”了。
( ̄ ▽  ̄) 其實非本專案相關的 Issue 發在 discussions 裡會更好。

Q: 什麼是 PV

A: 這是理想氣體狀態方程。 PV=nTR

  • 解析:
    • P: 壓強
    • V: 氣體體積
    • n: 物質的量
    • T: 熱力學溫度
    • R: 氣體常數

您可能不知道的冷知識: 2moe 之前在某個漫畫網站上,看到過一本漫畫,它的標題是 《wopd ybww bwpy qmbw PV levl, soyi yeyc PV qmbwde nvpgyz》

哎呀,這孩子物理應該學得還不錯吧!

這只是標題吸引人而已,好孩子不要去看。