在 Windows 10 上安裝 Visual Studio Code EP2

前言

寫程式,設定好 IDE,可以增加自己的效率,今天來紀錄一下安裝 Visual Studio Code (又稱 VSCode),設定 C++ 的程式設計環境。

我找了個從沒有安裝過的 Windows 10 上面完成安裝的,安裝後把紀錄大致分成幾個部分。

EP 1:安裝 Visual Studio Code 主程式
EP 2:安裝 MSYS2 與 MinGW
EP 3:設定程式設計專案路徑,安裝 Visual Studio Code 語言套件與 C++ 相關套件

安裝 MSYS2 與 MinGW

  1. MSYS2 網站就有滿詳盡的說明,我基本上也是照著說明服用。
  2. 我這次是下載 msys2-x86_64-20210725.exe,安裝時就是一直「下一步」到「完成」,即使如此,也麻煩要特別注意一下 Installation Folder 這個步驟,確認一下安裝路徑,因為這個後續的環境設定會用到,我想,對於安裝與設定過其他程式設計環境的人,應該不陌生。
  3. 下 3 道命令,把 MinGW 裝起來。
    (1)pacman -Syu:這個指令是為了更新系統的核心套件,更新完會關掉視窗,請至開始功能表找到並開啟 MSYS2 MSYS。

    (2)pacman -Su:更新其他基礎套件。
    (3)pacman -S –needed base-devel mingw-w64-x86_64-toolchain:安裝 mingw-w64 GCC 與相關工具套件。
  4. 如果不想影響 Windows 的 PATH 環境變數,可以使用 MinGW 終端機,但,我想把相對應的路徑加入 PATH 環境變數,這個部分,我不常設定,其實也找了一下,這次就筆記下來,方便以後好找、好設定。
    (1)「開始功能表」→「設定」(齒輪圖示)→「Windows 設定」,再點一下「系統」。

    (2)點「關於」。

    (3)點「系統資訊」。

    (4)進入「系統內容」後,點「進階系統設定」。

    (5)點「環境變數」。

    (6)從「系統變數」欄位中,找到「Path」,點選後,再點「編輯」。

    (7)把「C:\msys64\mingw64\bin」這個路徑,新增進去吧!
  5. 有一個更快速進入「系統內容」[可以參照上述第 4 點的第 (6) 項],就是開 Windows 的 Terminal (CMD) 或是按住「Win+R」,執行 systempropertiesadvanced
  6. 如果有已開啟的 Windows Termial (CMD) 的話,關掉並重新啟動 Terminal,如果沒有,直接啟動一個新的,執行下列命令,確認安裝完成。
    g++ -v
    gdb -v

後記

我在整理自己的紀錄時,發現「安裝 MSYS2 與 MinGW」是相對比較麻煩的,未來如有參考需要時,我可能會先從這一個部分開始安裝與設定。

在 Windows 10 上安裝 Visual Studio Code EP1

前言

寫程式,設定好 IDE,可以增加自己的效率,今天來紀錄一下安裝 Visual Studio Code (又稱 VSCode),設定 C++ 的程式設計環境。

我找了個從沒有安裝過的 Windows 10 上面完成安裝的,安裝後把紀錄大致分成幾個部分。

EP 1:安裝 Visual Studio Code 主程式
EP 2:安裝 MSYS2 與 MinGW
EP 3:設定程式設計專案路徑,安裝 Visual Studio Code 語言套件與 C++ 相關套件

安裝 Visual Studio Code 主程式

  1. Running Visual Studio Code on Windows 網站就有滿詳盡的說明,我基本上也是照著說明服用。
  2. 決定是要用 User setup 或是 System setup:User setup 就是安裝給當下使用的帳號使用;System steup 就是給 All users 使用的安裝。我的電腦只有我個人在使用,我選擇安裝 System setup,我下載的檔案是 VSCodeSetup-x64-1.59.1.exe。
  3. 接下來幾乎就是「下一步」到底,我注意到,安裝過程中,提到「加入 PATH 中 (重新啟動後生效)」。
  4. 所以,我在安裝完主程式後,並沒有立馬啟動它,而是在完成後,立即重新開始,就結束這個回合。

後記

安裝 VSCode 主程式後,接下來就要「安裝 MSYS2 與 MinGW」。

[版本更新] 重點速記 ubuntu 20.04.3 LTS

前言

就在幾天前,ubuntu 20.04.3 LTS 正式釋出,主要的更新是 Linux Kernel 5.11 與 Mesa 21.0,也就是提升硬體上的支持度。

ubuntu 20.04.3 LTS

全新安裝 ubuntu 20.04.3 LTS

  1. 本次安裝使用的 ISO 檔版本是 ubuntu-20.04.3-desktop-amd64.iso。
  2. 硬體的設定:1 CPU、ICH9 晶片組、啟用 EFI、4GB Ram、128MB VRAM、20GB Vdi HDD。
  3. 安裝過程一如往常,簡單易用,目前系統帶出的更新軟體,只有跟 Firefox 與 Samba 這二個服務有關。

嘸蝦米安裝與使用上的建議

  1. 選用的順序上,我比較建議是 iBus→fcitx(4)→fcitx5。
  2. iBus:如果是全新安裝,並且有嘸蝦米輸入法之使用需求的人,我會建議服用官方的 iBus 表格檔,只要選對版本,安裝的過程是輕鬆且愉快的,詳可參考之前的貼文:在 ubuntu 20.04 安裝官方釋出的嘸蝦米表格檔 (iBus)
  3. fcitx:fcitx 是另外一個服用上的選擇,我在一個全新安裝好的 ubuntu 20.04.3 上,用 Terminal 下了 2 道指令後,比較建議急需的人安裝 fcitx 4,而不是先安裝 fcitx 5。

後記

由於我目前多半是在 VirtualBox 上執行,比較沒有什麼硬體上的要求,所以不急著更新,…而是直接安裝一個全新的 (>_<)。

安裝 Arch Linux 與嘸蝦米

前言

如果,能讓我再一次從頭開始學 Linux,我可能會選 Arch Linux。
archLinuxonVirtualBox

這篇貼文大致分成 2 個部分的筆記:「安裝 Arch Linux」、「在 Arch Linux 上安裝及使用嘸蝦米」。

安裝 Arch Linux

  1. VirtualBox 上的硬體設定:1 CPU、ICH9 晶片組、啟用 EFI、4GB Ram、128MB VRAM、20GB Vdi HDD。
  2. 下面是我下的指令:

    lsblk
    gdisk /dev/sda
    n
    Partition number: [Enter]
    First sector: [Enter]
    Last sector: +200MB
    Hex code or GUID: ef00
    n
    Partition number: [Enter]
    First sector: [Enter]
    Last sector: [Enter]
    Hex code or GUID: [Enter]
    w
    Do you want to proceed? Y
    lsblk
    mkfs.fat -F32 /dev/sda1
    mkfs.ext4 /dev/sda2
    lsblk
    mount /dev/sda2 /mnt
    mkdir -p /mnt/boot
    mount /dev/sda1 /mnt/boot
    lsblk
    pacstrap /mnt base linux linux-firmware vim
    genfstab -U /mnt >> /mnt/etc/fstab
    cat /mnt/etc/fstab
    arch-chroot /mnt
    dd if=/dev/zero of=/swapfile bs=1G count=2 status=progress
    chmod 600 /swapfile
    mkswap /swapfile
    swapon /swapfile
    vim /etc/fstab
    i
    寫入 /swapfile none swap defaults 0 0
    [Esc]
    :wq
    timedatectl set-ntp true
    timedatectl list-timezones | grep Taipei
    ln -sf /usr/share/zoneinfo/Asia/Taipei /etc/localtime
    hwclock --systohc
    vim /etc/locale.gen
    i
    找到「en_US.UTF-8 UTF-8」這一列,把最前面的「#」號刪除
    [Esc]
    :wq
    locale-gen
    echo LANG=en_US.UTF-8 >> /etc/locale.conf
    echo KEYMAP=zh >> /etc/vconsole.conf
    vim /etc/hostname
    i
    寫入 jute-archVB
    [Esc]
    :wq
    vim /etc/hosts
    i
    寫入以下訊息
    127.0.0.1   localhost
    ::1         localhost
    127.0.1.1   jute-archVB.localdomain jute-archVB
    [Esc]
    :wq
    passwd
    New password: 輸入密碼
    Retype new password: 輸入密碼
    pacman -S grub efibootmgr networkmanager network-manager-applet dialog os-prober mtools dosfstools base-devel linux-headers cups reflector openssh git xdg-utils xdg-user-dirs virtualbox-guest-utils
    Enter a selection (default=all): [Enter]
    :: Proceed with installation? [Y/n] [Enter]
    grub-install --target=x86_64-efi --efi-directory=boot --bootloader-id=GRUB
    grub-mkconfig -o /boot/grub/grub.cfg
    systemctl enable NetworkManager
    systemctl enable cups
    useradd -mG wheel <username>[<username> 要輸入自己想要設定的使用者名稱]
    passwd <username>[<username> 就是上面所輸入的使用者名稱]
    New password: 輸入密碼
    Retype new password: 輸入密碼
    EDITOR=vim visudo
    i
    找到「%wheel ALL=(ALL) NOPASSWD: ALL」這一列,把最前面的「#」號刪除
    [Esc]
    :wq
    exit
    umount -a
    reboot
    重開機進入 GRUB 選單,確認選到預設值:「*Arch Linux」後,直接按 [Enter]
    jute-archVB login: 輸入之前設定的使用者名稱後按 [Enter]
    Password: 輸密碼入後 [Enter]
    ip a
    ping jute.pw
    sudo pacman -S xf86-video-vmware xorg lightdm lightdm-gtk-greeter xfce4 xfce4-goodies firefox materia-gtk-theme papirus-icon-theme
    Enter a selection: [Enter]
    Enter a selection: [Enter]
    Enter a selection: [Enter]
    Enter a number: [Enter]
    :: Proceed with installation? [Y/n] [Enter]
    sudo systemctl enable lightdm
    reboot

    順利的話,應該就可以看到下面的畫面。

  3. 處理繁體中文化 (Localization):重開機進入系統後,啟動 Terminal (按 Ctrl+Alt+T)

    sudo vim /etc/locale.conf
    i
    把「en_US.UTF-8」改成「zh_TW.UTF-8」
    [Esc]
    :wq
    sudo pacman -S wqy-bitmapfont wqy-zenhei ttf-arphic-ukai ttf-arphic-uming opendesktop-fonts wqy-microhei wqy-microhei-lite
    :: Proceed with installation? [Y/n] [Enter]
    sudo vim /etc/locale.gen
    i
    找到「en_US.UTF-8 UTF-8」這一列,在最前面把「#」號加回去
    找到「zh_TW.UTF-8 UTF-8」這一列,把最前面的「#」號刪除
    [Esc]
    :wq
    sudo locale-gen
    reboot

在 Arch Linux 上安裝及使用嘸蝦米

  1. 這次我只安裝 Fcitx 5。
  2. 重開機進入系統後,啟動 Terminal (Ctrl+Alt+T):

    sudo pacman -S fcitx5 fcitx5-im fcitx5-chinese-addons fcitx5-configtool fcitx5-table-extra
    Enter a selection: [Enter]
    :: Proceed with installation? [Y/n] [Enter]
    sudo vim /etc/environment
    i
    GTK_IM_MODULE=fcitx
    QT_IM_MODULE=fcitx
    XMODIFIERS=@im=fcitx
    [Esc]
    :wq
    reboot
  3. 「應用程式」→「設定值」→「Fcitx 5 設定」,進入下列畫面,由於還沒有中文輸入,所以我打關鍵字:「boshi」,把嘸蝦米找出來與加入。
  4. 這次沒有安裝 LibreOffice,找個「小筆記」來試試,確認可以輸入沒有問題。

後記

  1. 本次安裝使用的 ISO 檔版本是 archlinux-2021.08.01-x86_64.iso。
  2. 僅管,我老早就知道 Arch Linux,但,這是我第一次安裝 Arch Linux,遲遲沒有安裝是因為我想用桌面環境,只想在幾個步驟,就讓安裝程式把所有的東西都安裝好,但是,隨著近日嘗試過幾支 Distro 之後,我反而對於太自動就安裝好的,不一定都能夠接受。只能說,自動有自動的好處,手動也有手動的優勢,而 Arch Linux 就是一個幾乎都要手動的 Linux,…就我所知,應該僅次於 Gentoo Linux 吧!
  3. 以一個新手而言,如果想要對 Linux 建立起較紮實的觀念,從 Arch Linux 真的可以學到很多。

安裝 Zorin OS 16 Core 與嘸蝦米

前言

Zorin OS 也是一支以 ubuntu 為基礎的 Linux Distro,幾天前釋出 Zorin OS 16 版,這一個版本立基在 ubuntu 20.04.3 LTS。

這篇貼文大致分成 2 個部分的筆記:「安裝 Zorin OS」、「在 Zorin OS 16 上安裝及使用嘸蝦米」。

安裝 Zorin OS

  1. 硬體的設定:Dual-Core CPU、ICH9 晶片組、啟用 EFI、4GB Ram、128MB VRAM、20GB Vdi HDD。
  2. 安裝的過程,可以參考下面的相簿。我的觀察是前面的安裝步驟,跟 elementary OS 5.1 有點神似:就像是 ubuntu 的安裝程式換上另外一張皮,初次進入系統,可以跟著指示走, 我是在 VirtualBox 安裝的,初進系統走 Tour 會詢問要不要安裝 zorin-virtualbox-guest-additions 套件,我安裝後出現一些錯誤訊息,後續把其他系統升級做完,錯誤訊息才消失。
    zorinOS

在 Zorin OS 16 上安裝及使用嘸蝦米

依序,我會推薦使用 iBusFcitx 4Fcitx 5

iBus

  • Zorin OS 16 預設的輸入法是 iBus,ibut-table 這支套件一開始就已經安裝好,我個人滿推薦直接服用官網的表格檔。

Fcitx 4

  1. 以往我會下 sudo apt-get install fcitx-table-boshiamy 這個指令,但,這次我觀察與來回測試之後,發現以下的指令比較穩妥:

    sudo apt-get install fcitx fcitx-m17n fcitx-table-boshiamy
    im-config -n fcitx
  2. 重開機,再進入到「設定值」→「地區和語言」→「管理安裝的語言」,確認 fcitx 已成功設定為「鍵盤輸入法系統」。

Fcitx 5

  • 可以透過 APT 安裝 Fcitx 5,但是並沒有 fcitx5-table-extra,如要使用,應該也可以像 Debian 11 一樣,借 Arch Linux 官方釋出的檔案服用之。

後記

  1. 本次安裝使用的 ISO 檔版本是 Zorin-OS-16-Core-64-bit.iso。
  2. Zorin OS 16 分為 3 個版本,分別是需要付費的 Pro 版(美金 39 元)、Core 版與 Lite 版,3 個版本都有 Zorin 外觀(皮),要簡說出不同的部分,應該是就是付費的 Pro 版包含了 Core 與 Lite 版的功能外,還有類 macOS、 Windows 11 & Classic 與 ubuntu 等幾個桌面環境、內建專業層級的 App 套件包與進階的生產力軟體等等。
  3. 立基在 ubuntu 架構與特性上的 Distro,我目前知道有 Linux Mint、elementary OS 與今天紀錄安裝過程的 Zorin OS,有一種開枝散葉的感覺。
    (1)Linux Mint:From freedom came elegance.
    (2)elementary OS:The thoughtful, capable, and ethical replacement for Windows and macOS.
    (3)Zorin OS:Make your computer better, faster, easier, more powerful, secure, and reliable.

在 Debian 11 上直接用 Fcitx 5 與嘸蝦米

前言

Fcitx 5 是 Debian 11 預先安裝好的中文輸入法,目前,無法在 Debian 11 上直接透過 apt-get install fcitx5-table-extra fcitx5-table-other 把其他的中文輸入法安裝進來。

我在 pkgs.org 找到 Arch Linux 上已經編譯好的表格與圖示檔,詳可見:Fcitx5-table-extra Download (RPM, TGZ, XBPS, XZ, ZST),觀察頁面說明的 Files 部分,判定可以直接取回服用。

服用的紀錄步驟

  1. 前言提到:「Fcitx 5 是 Debian 11 預先安裝好的中文輸入法」,因此,如果是全新安裝,可以直接「下載 fcitx5-table-extra 並放到正確的位置」(即本文的「服用的紀錄步驟」之「步驟4」),並重開機與接續後面的設定試試看。

  2. 移除之前安裝的 Fcitx 4:由於我之前為了快速使用嘸蝦米而選擇安裝 Fcitx 4,同時移除掉 Fcitx 5。現在要反過來,我會建議「先移除 Fcitx 4,再安裝 Fcitx 5」,原因是我觀察到有一些套件是安裝 Fcitx 4 與 Fcitx 5 都會被抓進來的,先安裝 Fcitx 5,再移除 Fcitx 4 的話,有可能會讓 Fcitx 5 不太靈光,甚至無法使用。但,這是我的猜測,並沒有實做,如果有伙伴嘗試「先安裝 Fcitx 5,再移除 Fcitx 4」後,可以正常使用 Fcitx 5 且沒有任何問題的話,也歡迎給我一些反饋(非常感謝)。(更新日期:2022 年 2 月 8 日)

    apt-get remove *fcitx*

  3. 把整組 Fcitx 5 安裝進來:為了省事,所以選擇整套安裝。

    apt-get install fcitx5*
  4. 下載 fcitx5-table-extra 並放到正確的位置。

    su
    wget https://eu.mirror.archlinuxarm.org/aarch64/community/fcitx5-table-extra-5.0.4-1-any.pkg.tar.xz
    //小提醒:這個下載的連結網址可能隨版本更新及任何原因而改變,更新本文時,
    //下載位置已隨著版本更新而轉變成 https://eu.mirror.archlinuxarm.org/aarch64/community/fcitx5-table-extra-5.0.8-1-any.pkg.tar.xz
    //因此,建議下指令前,先到 pkgs.org 搜尋與確認下載連結的網址。
    //更新日期:2022 年 2 月 8 日。
    
    unxz fcitx5-table-extra-5.0.4-1-any.pkg.tar.xz
    tar xvf fcitx5-table-extra-5.0.4-1-any.pkg.tar
    cp -r usr/share /usr/
  5. 重開機並且把嘸蝦米輸入法加進來。

  6. 使用上大致沒有問題。

後記

  1. 之前曾經在 Fedora 34 上面安裝 Fcitx 5,沒打幾個字,所以沒有感覺到所謂的「快」,這次在 Debian 11 是從 Fcitx 4 切換過來,感覺似乎比較快,當然,這多少有可能是心理作用。
  2. 現在主要使用的 iBus,雖然有官方表格檔支持,但是,我目前發現,有幾個常用字在部分的 Linux Distro 的拆解不是很順手,例如:「只」、「致」…等等,即使尾碼加上「v」也無法正確選到字,或是仍然要用選字的方式入字,多少有點美中不足(以下附圖,點擊可放大)。


  3. 再觀察看看 Fcitx 5 如果能夠有穩定的輸入表現,我可能會跳槽過來。

C++ 資料結構:Binary Search Tree

Binary Search Tree (二元搜尋樹),是用來存放多筆資料,並快速搜尋的資料結構。大概的原則就是,大的放右邊,小的放左邊。

新增,刪除一個值都只要O(log(N))

以下為實作範例

#include<bits/stdc++.h>
using namespace std;

template<class T>
class bst{
    private:
        struct node{
            T val;
            node* l,r;

            node(){
                l=r=nullptr;
            }
            node(T v){
                l=r=nullptr;
                val=v;
            }
        };

        bool find(node *n,T v){
            if(n->val==v){
                return true;
            }else if(n->val > v && n->r!=nullptr){
                find(n->r,v);
            }else if(n->val < v && n->l!=nullptr){
                find(n->l,v);
            }else{
                return false;
            }
        }

        void insert(node *&n,T v){
            if(n==nullptr){
                node nd=new node(v);
                n=&nd;
            }else if(n->val > v && n->r!=nullptr){
                insert(n->r,v);
            }else if(n->val < v && n->l!=nullptr){
                insert(n->l,v);
            }
        }

        void DeleteNode(node *&n){
            if(n->l==nullptr && n->r==nullptr){
                delete n;
                n=nullptr;
            }else{
                node *left,*right;
                if(n->l==nullptr){
                    right=n->r;
                    n->val=right->val;
                    n->l=right->l;
                    n->r=right->r;
                    delete right;
                }else if(n->r==nullptr){
                    left=n->l;
                    n->val=left->val;
                    n->l=left->l;
                    n->r=left->r;
                    delete left;
                }else{
                    right=n;
                    left=n->l;
                    while(left->r!=nullptr){
                        right=left;
                        left=left->l;
                    }
                    n->val=left->val;
                    if(right!=n)
                        right->r=left->l;
                    else
                        right->l=left->l;
                    delete left;
                }
            } 
        }

        void erase(node *n,T v){
            if(n->val==v){
                DeleteNode(n);
            }else if(n->val > v && n->r!=nullptr){
                erase(n->r,v);
            }else if(n->val < v && n->l!=nullptr){
                erase(n->l,v);
            }
        }

        void DeleteTree(node *n){
            if(n->l!=nullptr)
                DeleteTree(n->l);
            if(n->r!=nullptr)
                DeleteTree(n->r);
            delete n;
        }
    public:
        bst(){
            root=nullptr;
            sz=0;
        }

        ~bst(){
            if(root!=nullptr)
                DeleteTree(root);
        }

        bool find(T v){
            if(root!=nullptr)
                return find(root,v);
        }

        void insert(T v){
            if(root==nullptr){
                node n=new node(v);
                root=&n;
            }else{
                insert(root,v);
            }
            sz++;
        }

        void erase(T v){
            if(root==nullptr) return;
            erase(root,v);
            sz--;
        }

        int size(){
            return sz;
        }
    private:
        node *root;
        int sz;
};

相同的,C++都幫你做好了,就是所謂的Set & Map。

以下為使用範例

#include<bits/stdc++.h>
using namespace std;

int main(){
    vector<int> v(100);
    for(int i=0;i<100;++i){
        v[i]=i;
    }
    random_shuffle(v.begin(),v.end());

    set<int> s;
    for(auto a:v){
        s.insert(a);
    }

    random_shuffle(v.begin(),v.end());

    for(auto a:v){
        cout<<*s.lower_bound(a)<<" ";
        cout<<*s.upper_bound(a)<<"\n";
    }
    s.erase(10);
    cout<<*s.lower_bound(10);
}

我相信許多人跟我一樣,一開始不知道這些東西要用在哪?

以下我找了幾個範例

1. 在O(Nlog(26))以內找出是否有一個字母在兩個字串中均能被找到(題目連結:Two Strings | HackerRank)

string twoStrings(string s1, string s2) {
    set<char> s;
    for(auto a:s1){
        s.insert(a);
    }
    for(auto a:s2){
        if(s.count(a)){
            return "YES";
        }
    }
    return "NO";
}

2. 以O(N^3log(N))找出一個字串中無序變形子串對的數目(題目連結:Sherlock and Anagrams | HackerRank) 最重要的,就是其刪除快速的特性

int sherlockAndAnagrams(string s) {
    int ct=0,len=s.size();
    for(int i=0;i<len;i++){
        for(int j=i;j<len;j++){
            multiset<char> st,tt;
            for(int k=i;k<=j;k++){
                st.insert(s[k]);
                tt.insert(s[k]);
            }

            for(int k=i+1;k<len-(j-i);k++){
                tt.insert(s[k+(j-i)]);
                auto it=tt.find(s[k-1]);
                if(it!=tt.end()) tt.erase(it);
                if(tt==st) ct++;
            }
        }
    }
    return ct;
}

3. 最後一個是Map的應用範例,Map是以first做排序依據,second存放對應資料。最常見的就是數字與出現頻率,以下甚至還有用來存頻率的頻率的用法。(題目連結:Frequency Queries | HackerRank) m 放<數字 , 頻率>,ct 放<頻率 , 頻率的頻率>

vector<int> freqQuery(vector<vector<int>> q) {
    vector<int> ans;
    map<int,int> m,ct;
    for(auto a:q){
        if(a[0]==1){
            ct[m[a[1]]]=max(ct[m[a[1]]]-1,0);
            m[a[1]]++;
            ct[m[a[1]]]++;
        }else if(a[0]==2){
            ct[m[a[1]]]=max(ct[m[a[1]]]-1,0);
            m[a[1]]=max(m[a[1]]-1,0);
            ct[m[a[1]]]++;
        }else{
            ans.push_back(bool(ct[a[1]]));
        }
    }
    return ans;
}

下一篇心得會補 pointer (指標) 的部分,在此之前可以先Google搜尋(C++指標)。

在 Clear Linux 上安裝 VirtualBox 6.1.26

前言

我是先把 Kernel 等相關套件,以及 VirtualBox 安裝起來之後,再從錯誤訊息去嘗試排除問題,最後,終於順利讓 VirtualBox 在 Clear Linux 啟動與使用。

安裝 Kernel 等相關套件

sudo swupd search kernel
sudo swupd bundle-add kernel-lts kernel-lts-dkms

安裝 VirtualBox

curl -O https://download.virtualbox.org/virtualbox/6.1.26/VirtualBox-6.1.26-145957-Linux_amd64.run
chmod +x VirtualBox-6.1.26-145957-Linux_amd64.run
sudo ./VirtualBox-6.1.26-145957-Linux_amd64.run
VirtualBox

從錯誤訊息中補充進來的套件與相關做法

sudo /sbin/vboxconfig
sudo swupd bundle-add deprecated-python2
sudo swupd bundle-add linux-dev
sudo swupd bundle-add dev-utils-dev
sudo modprobe vboxdrv
sudo clr-boot-manager update
sudo reboot

後記

  1. 本次使用的 Clear Linux 版本是 34930。
  2. 這次比較可惜的是我還沒有把過程截圖,就執行 sudo reboot,所以,我得回過頭去看自己下了什麼指令,並且回想一下自己做了什麼。

安裝 Debian 11 與嘸蝦米

前言

Debian 也在這幾天釋出第 11 版,開發代號 bullseye,是目前的穩定 (Stable) 版本。

不久前,四處找 Distro 嘗試安裝 fcitx 而在 VirtualBox 上用過第 10.10 版,比較深的印象,大概就是順順安裝、順順用。再加上,不喜歡有的 Linux 會自動安裝 GRUB 到非我設想的硬碟上,而且幾天前才碰上 elementary OS 6.0 的老派英文安裝介面,這樣一來一往的相比之下,Debian 11 還真的很中我的味 (Hit the bullseye.)。

這篇貼文大致分成 2 個部分的筆記:「安裝 Debian 11」、「在 Debian 11 上安裝及使用嘸蝦米」。

安裝 Debian 11

  1. 原則上,我就不貼整個步驟,而是把幾個我認為還不錯的地方連文帶圖紀錄下來。首先,我是在 VirtualBox 上安裝的,硬體的設定:1 CPU、ICH9 晶片組、啟用 EFI、4GB Ram、128MB VRAM、20GB Vdi HDD。
  2. 設定檔案鏡像站並不難,後續進到系統上也可以改,但是可以在這個階段就讓使用者選擇,真的滿不錯的。
  3. 走完整個流程,可以點「返回」改動設定。

  4. 我在使用 VirtualBox 的習慣上,應該是不用再去挑選要安裝 GRUB 的硬碟或分割區,但是安裝過程帶上這個選項,對我來說,如果要安裝到實體電腦的時候,就很合用。

在 Debian 11 上安裝及使用嘸蝦米

Fcitx 5 (更新日期:2021-08-18)

  1. Fcitx 5 是 Debian 11 預先安裝好的中文輸入法,目前,無法在 Debian 11 上直接透過 apt-get install fcitx5-table-extra fcitx5-table-other 把其他的中文輸入法安裝進來。
  2. 我在 pkgs.org 找到 Arch Linux 上已經編譯好的表格與圖示檔,詳可見:Fcitx5-table-extra Download (RPM, TGZ, XBPS, XZ, ZST)(連結更新時間:2022 年 2 月 10 日),觀察頁面說明的 Files 部分,判定可以直接取回服用。
  3. 安裝整組的 Fcitx 5:下指令 apt-get install fcitx5*,由於我之前為了快速使用嘸蝦米而移除 Fcitx 5,現在要讓 Fcitx 5 回來,我為了省事,所以選擇整套安裝。
  4. 下載 fcitx5-table-extra 並放到正確的位置。

    su
    wget https://eu.mirror.archlinuxarm.org/aarch64/community/fcitx5-table-extra-5.0.4-1-any.pkg.tar.xz
    unxz fcitx5-table-extra-5.0.4-1-any.pkg.tar.xz
    tar xvf fcitx5-table-extra-5.0.4-1-any.pkg.tar
    cp -r usr/share /usr/
  5. 重開機並且把嘸蝦米輸入法加進來。
  6. 使用上大致沒有問題。

Fcitx 4

  1. 使用 APT 移除 Fcitx 5,改裝 Fcitx 4 是我個人認為相對較為輕鬆的方式,也是我一開始的做法。
  2. 先移除 Fcitx 5:

    su
    apt-get remove fcitx5*

  3. 接著安裝 fcitx-table-boshiamy,並且一併把相依套件安裝起來:

    apt-get install fcitx-table-boshiamy

  4. 從「概覽」進去,找到「輸入法」,並點進去設定(這個地方,也可以用指令處理,只是我比較習慣使用圖形介面做設定)。
    (1)↘雖然系統自帶 Fcitx 5,但我注意到系統預設的輸入法,還是 iBus。

    (2)↘順利把 Fcitx 5 砍掉的話,這裡應該只會看到 1 個 fcitx。

    (3)↘再確認一下設定是 fcitx 無誤。
  5. 接著,比較建議重新開機,因為,我試過重新登入,但 fcitx 卻讀不到嘸蝦米的表格檔。
  6. 進入系統,我開了 LibreOffice Writer,並且用 Ctrl + Space 切換輸入法。
  7. 看來是沒有問題嚕!

iBus (更新日期:2021-08-19)

  1. 同樣,為了省事,我把整組 iBus 都安裝進來。

    su
    apt-get install ibus*
  2. ↘先不要登出 root,從官網下載 iBus (適用於 ibus-table 版本 > 1.8.0),把表格、圖示檔放到該去的位置(下圖)。
  3. ↗從「概覽」進去,找到「輸入法」,並點進去設定,設定好重開機。
  4. 重開機後,再從「概覽」進去,找到「設定值」,點進去「地區和語言」,點「+」號把嘸蝦米加進來。

  5. 打「只」、「致」,測試一下有沒有發生入字、選字上的狀況,答案是沒有問題。

後記

  1. 本次安裝使用的 ISO 檔版本是 debian-11.0.0-amd64-netinst.iso。
  2. 之前使用 Debian 10.10 的時候,比較沒有注意,也已經對系統沒有什麼印象,這次發現,Debian 11 裡面的小遊戲挺多的,而且,同樣都是在 VirtualBox 上運作,Debian 11 的整體效能,帶給我的感覺是流暢的。

安裝 elementary OS 6.0 與嘸蝦米

前言

elementary OS 6.0 (以下稱 Odin) 釋出後幾天,我決定也來安裝看看,想不到沒有很順利,安裝的過程跟上一版 5.1 甚至無法相比,我在 VirtualBox 與 Mac mini 都安裝過,最後是在 VirtualBox 安裝成功。

VirtualBox 的部分

  1. 晶片組類型:ICH9、EFI:啟用。
  2. 我試了幾次的安裝,而且,無論在 Windows 或是 Linux 版的 VirtualBox 都會在同一個地方卡住。

  3. 後來,我才注意到,在安裝過程,即使切換語言到 Chinese,顯示上仍舊是 English,判定應該要用 English 介面完成安裝,事實果真如此。
  4. 不知道是該說自己學乖了,還是想要避免又失敗的無助感,安裝完成,第一次進入系統時,還會要我們挑一次語言,我,還是先選 English。
  5. 進入系統之後,再把語言調成我想要的。

Mac mini 的部分

  1. 預設似乎是要使用者砍掉一整顆硬碟,並且只安裝 Odin,…這一點對我來說,不是那麼合用。
  2. 硬碟分割的支援薄弱:
    (1)我是用外接硬碟安裝的,同樣把外接硬碟的壓縮分割,進到安裝介面後,想不到 Odin 無法自動偵測到,我只能手動去選擇,這還不打緊,重點是不但安裝不上去,還會把原本的分割表弄亂,我回到 Windows 之後,只能刪掉一大部分的分割,也因此把當時該壓縮分割臨近的 Linux 砍掉重練,所幸,離得比較遠的 Clear Linux 沒有被波及到。
    (2)另外,跟 ubuntu 20.04 一樣,都會很主動去寫內建硬碟的分割表:在硬碟一開始的地方,自動劃出 100 MB Fat32 空間,寫入 EFI/boot,這一個分割區是我接著想要安裝 Oracle Linux 時,發現其已然存在,在 macOS 內建的硬碟工具上不會顯示出來,由於目前對開機沒有太大的影響,我暫時就不去改動它。其實,這一點在 Mac Pro 或 WinPC 上應該是相對比較好處理的:開機箱,把硬碟排線直接拔掉,應該就能搞定。

安裝嘸蝦米的部分

  1. iBus:系統內建的輸入引擎,安裝的方式,可以直接參考行易有限公司官網說明。
  2. fcitx:立基於 ubuntu 20.04 的關係,可以直接在 Terminal 下一道指令:sudo apt-get install boshiamy-table-boshiamy,接著重新登入系統,就搞定。

  3. 附帶一提的是 fcitx 安裝啟用後,iBus 就會自動關閉,原本系統設計好的快捷鍵,仍會延用過來,例如:其他 Linux 要切換輸入法是 Win + Space 的組合鍵,Odin 預設用 Ctrl + Space 組合鍵切換。

後記

  1. 本次安裝使用的 ISO 檔版本是 elementaryos-6.0-stable.20210810.iso。
  2. 原本想說分享一下 Odin 的使用心得,結果變先成分享要用 English 介面完成系統安裝。印象中,以前曾經在 Fedora 遇到過,多年後再遇到,…或許是我少見多怪吧!