跳至主要內容

如何透過序列埠連線到 Hyper-V 上的 Ubuntu

虛擬機器設定

選擇「具名管道」,並將管道名稱設定為「COM1」。

Hyper-V 序列埠設定

Ubuntu 設定

GRUB 設定

使用 sudo nano /etc/default/grub 開啟 GRUB 設定檔。

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash console=ttyS0,115200n8"

儲存後,執行以下指令套用 GRUB 設定:

sudo update-grub

啟用序列埠

設定服務以允許透過序列埠登入。

sudo systemctl enable [email protected]
sudo systemctl start [email protected]

連線

系統管理員身分啟動。

從 Tera Term 連線

從 Tera Term 連線到 Hyper-V 上 Ubuntu 的序列埠

從 PuTTY 連線

系統管理員身分啟動。

序列線路速率連線類型:
\.\pipe\COM1115200Serial

設定以上項目。

從 PuTTY 連線到 Hyper-V 上 Ubuntu 的序列埠

從 PuTTY 連線到 Hyper-V 上 Ubuntu 的序列埠

系統管理員身分啟動。

從 Windows Terminal 上的 plink.exe 連線到 Hyper-V 上 Ubuntu 的序列埠

[System.Console]::OutputEncoding = [System.Text.Encoding]::GetEncoding("utf-8")
[System.Console]::InputEncoding = [System.Text.Encoding]::GetEncoding("utf-8")
plink.exe -serial \\.\pipe\COM1 -sercfg 115200,8,n,1,N

按 Ctrl + C 結束。

觀察 VOICEVOX 的 API

VOICEVOX 是由編輯器、引擎與核心組成的。

參考: 整體構成

編輯器是應用程式、引擎是 HTTP 伺服器、核心則是執行語音合成處理的模組。

也就是說,編輯器對引擎呼叫 REST API(以下簡稱 API)。

因此這篇文章要觀察這個 API 的內容。

API 的擷取我使用 Wireshark。

啟動時的通訊

我用 http and tcp.port == 50021 做了過濾,結果如下:

啟動時似乎會讀取以下資訊:

  • 版本資訊 /version
  • 引擎的 manifest 資訊 /engine_manifest
  • 聲優資訊 /speakers(像是 ずんだもん 等角色名單)
  • 歌手資訊 /singers(同上)

取得 speakers 和 singers 之後,會更詳細地取得各角色的資訊(/speaker_info?speaker_uuid=xxx, /singer_info?speaker_uuid=xxx)。

合成語音請求時的通訊

接著我用 ずんだもん 發送語音合成請求,觀察 API。

語音的取得流程似乎如下:

  1. 透過 /accent_phrases 取得重音/語調資訊
  2. 透過 /synthesis?speaker=3 合成 ずんだもん 的聲音

在 (2.) 發送的請求主體看起來和 (1.) 的回應類似,像下面這樣。

因此流程是先在 (1.) 取得重音資訊,接著在 (2.) 依據這些資訊合成語音。

實際呼叫 API 試試看

我使用 httpie 這個工具來呼叫 API。

  1. 取得 speakers 資訊

可以看到 ずんだもん(Normal)的 id 是 3。

  1. 取得重音資訊

我用「ずんだもんなのだ」取得重音資訊。(與取得 speaker 不同,這是用 POST)

  1. 合成語音

建立如下的請求主體:

{
"accent_phrases": <從 /accent_phrases 取得的資料>,
"speedScale": 1,
"pitchScale": 0,
"intonationScale": 1,
"volumeScale": 1,
"prePhonemeLength": 0.1,
"postPhonemeLength": 0.1,
"outputSamplingRate": 24000,
"outputStereo": false,
"kana": ""
}

因為 httpie 好像不能處理 wav,所以改用 PowerShell 送請求。

# 定義 URL 與 JSON 資料
$url = 'http://localhost:50021/synthesis?speaker=3'
$jsonBody = @"
{
"accent_phrases": [
{
"moras": [
{
"text": "ズ",
"consonant": "z",
"consonant_length": 0.12722788751125336,
"vowel": "u",
"vowel_length": 0.11318323761224747,
"pitch": 5.773037910461426
},
{
"text": "ン",
"consonant": null,
"consonant_length": null,
"vowel": "N",
"vowel_length": 0.09306197613477707,
"pitch": 6.108947277069092
},
{
"text": "ダ",
"consonant": "d",
"consonant_length": 0.04249810427427292,
"vowel": "a",
"vowel_length": 0.09372275322675705,
"pitch": 6.09743070602417
},
{
"text": "モ",
"consonant": "m",
"consonant_length": 0.07012023776769638,
"vowel": "o",
"vowel_length": 0.1172478124499321,
"pitch": 5.932623386383057
},
{
"text": "ン",
"consonant": null,
"consonant_length": null,
"vowel": "N",
"vowel_length": 0.06496299058198929,
"pitch": 5.745952129364014
},
{
"text": "ナ",
"consonant": "n",
"consonant_length": 0.038462959229946136,
"vowel": "a",
"vowel_length": 0.08576127141714096,
"pitch": 5.5794854164123535
}
],
"accent": 1,
"pause_mora": null,
"is_interrogative": false
},
{
"moras": [
{
"text": "ノ",
"consonant": "n",
"consonant_length": 0.05504273623228073,
"vowel": "o",
"vowel_length": 0.0903041884303093,
"pitch": 5.551316261291504
},
{
"text": "ダ",
"consonant": "d",
"consonant_length": 0.05024997144937515,
"vowel": "a",
"vowel_length": 0.20450790226459503,
"pitch": 5.633930206298828
}
],
"accent": 2,
"pause_mora": null,
"is_interrogative": false
}
],
"speedScale": 1,
"pitchScale": 0,
"intonationScale": 1,
"volumeScale": 1,
"prePhonemeLength": 0.1,
"postPhonemeLength": 0.1,
"outputSamplingRate": 24000,
"outputStereo": false,
"kana": ""
}
"@

# 建立 HTTP 標頭
$headers = @{
'Content-Type' = 'application/json'
}

# 發送 POST 請求並取得回應
$response = Invoke-WebRequest -Uri $url -Method Post -Headers $headers -Body $jsonBody -OutFile "output.wav"

# 開啟並播放
start output.wav

VOICEVOX:ずんだもん

以上!

0.248 (16) 轉換成十進位分數的簡單解法 (基本資訊技術人員考試)

「16 進位的小數 0.248 轉換成十進位的分數是什麼?」的問題,我將簡單介紹解法。

重點

16 進位的問題使用 2 進位

步驟

  1. 將 16 進位轉換成 2 進位
    0.248(16) = 0.0010 0100 1000(2)

  2. 去掉小數點
    0.0010 0100 1000(2) = 0.0010 0100 1000(2) × 0010 0000 0000(2) / 0010 0000 0000(2) = 0100 1001(2) / 0010 0000 0000(2)

  3. 將 2 進位轉換成 10 進位
    0100 1001(2) / 0010 0000 0000(2) = (64 + 8 + 1) / 512
    = 73 / 512

Matplotlib (Pyplot) 常用程式碼範例

這裡介紹一些常用的程式碼和圖表範例。

目次

建立圖表

首先載入所需的函式庫。

import matplotlib.pyplot as plt
import numpy as np

單一圖表

fig, ax = plt.subplots()

2 x 3 的圖表

fig, axs = plt.subplots(2, 3)

繪製圖表

繪製拋物線

x = np.linspace(-1, 1, 201)
y = x ** 2

fig, ax = plt.subplots()
ax.plot(x, y)

用點繪製拋物線

fig, ax = plt.subplots()

x = np.linspace(-1, 1, 21)
y = x ** 2

ax.plot(x, y, 'o')

顏色設為橘色

fig, ax = plt.subplots()

x = np.linspace(-1, 1, 21)
y = x ** 2

ax.plot(x, y, color="tab:orange")

標準顏色如下:

顏色字串
tab:blue
tab:orange
tab:green
tab:red
tab:purple
tab:brown
粉紅tab:pink
tab:gray
橄欖tab:olive
tab:cyan

設定線的粗細為 4

fig, ax = plt.subplots()

x = np.linspace(-1, 1, 21)
y = x ** 2

ax.plot(x, y, lw=4)

設定標題

將標題設為 Title

fig, ax = plt.subplots()
ax.set_title("Title")

設定軸標籤

設定 x 軸標籤

將 x 軸標籤設為 Time (s)

fig, ax = plt.subplots()
ax.set_xlabel("Time (s)")

設定 y 軸標籤

將 y 軸標籤設為 Distance (m)

fig, ax = plt.subplots()
ax.set_ylabel("Distance (m)")

設定圖表的上限與下限

將上限設為 100

fig, ax = plt.subplots()
ax.set_ylim(top=100)

將下限設為 -100

fig, ax = plt.subplots()
ax.set_ylim(bottom=-100)

將上限設為 100,下限設為 -100

fig, ax = plt.subplots()
ax.set_ylim([-100, 100])

設定圖表的左邊與右邊

將左邊設為 -100

fig, ax = plt.subplots()
ax.set_xlim(left=-100)

將右邊設為 100

fig, ax = plt.subplots()
ax.set_xlim(right=100)

將左邊設為 -100,右邊設為 100

fig, ax = plt.subplots()
ax.set_xlim([-100, 100])

顯示網格

fig, ax = plt.subplots()
ax.grid()

僅顯示垂直網格

fig, ax = plt.subplots()
ax.grid(axis="x")

僅顯示水平網格

fig, ax = plt.subplots()
ax.grid(axis="y")

設定刻度

設定 x 軸刻度

fig, ax = plt.subplots()
xticks = range(6)
ax.set_xticks(xticks)

設定 x 軸刻度和刻度標籤

fig, ax = plt.subplots()
xticks = range(6)
ax.set_xticks(xticks, [f"{xtick}m" for xtick in xticks])

設定 y 軸刻度

fig, ax = plt.subplots()
yticks = [i * 20 for i in range(6)]
ax.set_yticks(yticks)

設定 y 軸刻度和刻度標籤

fig, ax = plt.subplots()
yticks = [i * 20 for i in range(6)]
ax.set_yticks(yticks, [f"{ytick}%" for ytick in yticks])

刪除刻度

刪除 x 軸刻度

fig, ax = plt.subplots()
ax.tick_params(bottom=False)

刪除 x 軸刻度標籤

fig, ax = plt.subplots()
ax.tick_params(labelbottom=False)

刪除 y 軸刻度

fig, ax = plt.subplots()
ax.tick_params(left=False)

刪除 y 軸刻度標籤

fig, ax = plt.subplots()
ax.tick_params(labelleft=False)

設定刻度顏色

將 x 軸刻度顏色設為紅色

fig, ax = plt.subplots()
ax.tick_params(axis="x", color="tab:red")

將 x 軸刻度標籤顏色設為紅色

fig, ax = plt.subplots()
ax.tick_params(axis="x", labelcolor="tab:red")

將 y 軸刻度顏色設為紅色

fig, ax = plt.subplots()
ax.tick_params(axis="y", color="tab:red")

將 y 軸刻度標籤顏色設為紅色

fig, ax = plt.subplots()
ax.tick_params(axis="y", labelcolor="tab:red")

調整圖表間距

將縱向間距設為 0.2,橫向間距設為 0.3

fig, ax = plt.subplots(3, 3)
fig.subplots_adjust(hspace=0.2, wspace=0.3)

自動設定間距

fig, ax = plt.subplots(3, 3)
fig.tight_layout()

儲存圖片

以 PNG 格式儲存

fig, ax = plt.subplots()
plt.savefig("graph.png")

以 SVG 格式儲存

fig, ax = plt.subplots()
plt.savefig("svg.png")

以 PDF 格式儲存

fig, ax = plt.subplots()
plt.savefig("svg.pdf")

graph.pdf

以 300 dpi 儲存

fig, ax = plt.subplots()
plt.savefig("graph300.png", dpi=300)

.NET CLI 備忘錄

這篇備忘錄記錄了 .NET CLI (命令行界面)。

資訊

.NET CLI 是一個跨平台的工具集,用於開發、構建、運行、發布和管理 .NET 項目。它提供了一組命令行命令,讓你可以在任何支持 .NET 的操作系統(Windows, Linux, macOS)上高效地工作,無需依賴 IDE。

1. 基本命令

A. 建立新專案

dotnet new 命令用於建立新專案、配置文件或解決方案。

dotnet new console -o MyConsoleApp # 建立一個新的控制台應用程式
dotnet new webapi -o MyWebApi # 建立一個新的 ASP.NET Core Web API 專案
dotnet new sln -n MySolution # 建立一個新的解決方案文件
  • -o:指定輸出目錄(專案名稱)。
  • -n:指定解決方案名稱。

B. 還原依賴

dotnet restore 命令還原專案的依賴項和工具。

dotnet restore

通常,dotnet builddotnet rundotnet publish 命令會隱式執行還原操作。

C. 構建專案

dotnet build 命令編譯專案及其依賴項。

dotnet build
dotnet build --configuration Release # 以 Release 配置構建

D. 運行專案

dotnet run 命令在開發環境中運行專案。它會自動構建專案,然後運行可執行文件。

dotnet run

E. 測試專案

dotnet test 命令運行專案中的單元測試。

dotnet test

F. 發布專案

dotnet publish 命令將應用程式及其依賴項打包為部署單元。

dotnet publish -c Release -o ./publish # 以 Release 配置發布到 'publish' 目錄
  • -c Release:指定 Release 配置。
  • -o ./publish:指定輸出目錄。

2. 專案管理

A. 添加專案到解決方案

dotnet sln add MyConsoleApp/MyConsoleApp.csproj

B. 添加參考 (Reference)

將一個專案參考添加到另一個專案:

cd MyWebApi
dotnet add reference ../MyConsoleApp/MyConsoleApp.csproj

C. 添加套件 (Package)

添加 NuGet 套件到專案:

dotnet add package Newtonsoft.Json

D. 移除套件

移除 NuGet 套件:

dotnet remove package Newtonsoft.Json

3. 工具命令

A. 管理全局工具

dotnet tool 命令用於安裝、列出、更新或卸載 .NET 全局工具。

dotnet tool install --global dotnet-ef # 安裝 Entity Framework Core CLI 工具
dotnet tool list --global # 列出所有全局工具
dotnet tool update --global dotnet-ef # 更新工具
dotnet tool uninstall --global dotnet-ef # 卸載工具

4. 其他常用命令

A. 清理專案

dotnet clean 命令清理專案的輸出文件。

dotnet clean

B. 查看信息

dotnet --info 顯示有關 .NET SDK 和運行時環境的詳細信息。

dotnet --info

C. 查看幫助

幾乎所有 dotnet 命令都支持 --help 選項。

dotnet new --help
dotnet build --help

總結

.NET CLI 是一個功能強大且必不可少的工具,它為 .NET 開發者提供了一個高效、跨平台的工作流。無論是從頭開始創建專案、管理依賴、構建、測試還是發布,熟練掌握 .NET CLI 命令都能極大地提高你的開發效率。

Linux NetworkManager 備忘錄

這篇備忘錄記錄了 Linux 上的 NetworkManager。

資訊

NetworkManager 是一個動態網絡配置和管理守護程式,主要用於 Linux 系統。它旨在簡化網絡配置過程,特別是對於那些經常在不同網絡環境之間切換的筆記本電腦用戶,或需要圖形界面管理網絡連接的桌面用戶。

NetworkManager 會監測網絡設備的狀態,並自動配置它們,包括有線、無線、移動寬帶等連接。

1. NetworkManager 的核心組件

  • NetworkManager 守護程式:主要的後台服務,負責管理網絡連接。
  • nmcli (NetworkManager Command Line Interface):命令行工具,用於配置和顯示 NetworkManager 的狀態。
  • nmtui (NetworkManager Text User Interface):基於文本的用戶界面工具,提供一個互動式的菜單來管理連接。
  • 圖形化前端:如 GNOME Shell 的網絡設置、KDE Plasma 的網絡管理小程式等。

2. nmcli 基本用法

nmcli 是與 NetworkManager 交互最常用的命令行工具。

A. 顯示網絡設備狀態

nmcli device status

輸出會列出所有網絡設備及其狀態(例如 ethernet wifi connected disconnected)。

B. 顯示連接信息

nmcli connection show

這會列出所有已配置的網絡連接。

C. 啟用/禁用網絡設備

nmcli device disconnect eth0 # 斷開 eth0
nmcli device connect eth0 # 連接 eth0
nmcli radio wifi off # 禁用 Wi-Fi
nmcli radio wifi on # 啟用 Wi-Fi

D. 創建新連接

創建有線連接

nmcli connection add type ethernet con-name "MyWiredConnection" ifname eth0 ip4 192.168.1.100/24 gw4 192.168.1.1 dns "8.1.1.1 8.8.4.4"
nmcli connection up "MyWiredConnection"
  • con-name:連接名稱。
  • ifname:接口名稱 (例如 eth0)。
  • ip4:IPv4 地址和子網掩碼。
  • gw4:IPv4 網關。
  • dns:DNS 服務器。

創建 Wi-Fi 連接

nmcli device wifi rescan # 掃描 Wi-Fi 網絡
nmcli device wifi list # 列出可用 Wi-Fi 網絡

nmcli connection add type wifi con-name "MyWiFi" ifname wlan0 ssid "Your_SSID"
wifi-sec.key-mgmt wpa-psk wifi-sec.psk "Your_WiFi_Password"
nmcli connection up "MyWiFi"
  • ssid:Wi-Fi 網絡名稱。
  • wifi-sec.key-mgmt wpa-psk:指定 WPA-PSK 密碼管理。
  • wifi-sec.psk:Wi-Fi 密碼。

E. 修改現有連接

nmcli connection modify "MyWiredConnection" ipv4.addresses 192.168.1.101/24
nmcli connection modify "MyWiredConnection" ipv4.gateway 192.168.1.2
nmcli connection modify "MyWiredConnection" ipv4.dns "8.8.8.8 8.8.4.4"
nmcli connection modify "MyWiredConnection" ipv4.method manual # 靜態 IP
nmcli connection modify "MyWiredConnection" ipv4.method auto # DHCP
nmcli connection up "MyWiredConnection" # 應用更改

F. 刪除連接

nmcli connection delete "MyWiredConnection"

3. nmtui 用法

nmtui 是一個基於文本的互動式工具,對於不習慣 nmcli 複雜語法的用戶來說非常方便。

sudo nmtui

它會打開一個菜單,允許你:

  • 編輯連接
  • 激活連接
  • 設置主機名

4. NetworkManager 和 systemd-networkd / netplan

在現代 Linux 發行版中,網絡配置有多種方法。

  • NetworkManager:主要針對桌面和筆記本用戶,提供豐富的自動配置和圖形界面。
  • systemd-networkd:Systemd 的網絡配置服務,更輕量,常用於伺服器環境。
  • Netplan (Ubuntu 專用):一個抽象層,用於統一管理網絡配置,底層可以是 NetworkManager 或 systemd-networkd

通常,在桌面 Ubuntu 系統中,NetworkManager 是預設的網絡管理工具。

5. 常見問題和故障排除

  • 連接失敗:檢查日誌 (journalctl -u NetworkManager) 以獲取錯誤信息。
  • 沒有網絡連接:確保 NetworkManager 服務正在運行 (sudo systemctl status NetworkManager)。
  • DNS 問題:檢查 /etc/resolv.conf 文件,它通常由 NetworkManager 管理。

總結

NetworkManager 是 Linux 系統中一個功能強大且靈活的網絡管理工具。無論是通過 nmcli 進行命令行配置,還是通過 nmtui 進行互動式配置,它都極大地簡化了網絡連接的管理,對於從普通用戶到系統管理員來說都是一個寶貴的工具。

Linux 上的日語環境設置

這篇備忘錄記錄了在 Linux 上設置日語環境的方法。

資訊

在 Linux 系統中設置日語環境(包括語言、輸入法和字體)對於需要處理日語文本或開發日語應用程式的用戶來說至關重要。這確保了系統能夠正確顯示日語字符,並允許用戶使用日語輸入法。

1. 設置區域設置 (Locale)

區域設置決定了系統使用的語言、日期時間格式、貨幣符號等。

A. 查看當前區域設置

locale

B. 生成日語區域設置

如果你的系統中沒有日語區域設置,你需要生成它。

  1. 編輯 locale.gen

    sudo vim /etc/locale.gen

    查找並取消註釋(刪除前面的 #)以下行:

    ja_JP.UTF-8 UTF-8

    保存並退出。

  2. 生成區域設置

    sudo locale-gen

C. 設置系統區域設置

你可以將系統的默認區域設置設置為日語。

sudo update-locale LANG=ja_JP.UTF-8

或者,對於基於 Systemd 的系統:

sudo localectl set-locale LANG=ja_JP.UTF-8

重啟系統或重新登錄以應用更改。

2. 安裝日語輸入法

最流行的日語輸入法是 Fcitx 和 Mozc。

A. 安裝 Fcitx 和 Mozc

  1. 安裝 Fcitx 輸入法框架

    sudo apt install fcitx fcitx-mozc fcitx-ui-classic fcitx-frontend-gtk2 fcitx-frontend-gtk3 fcitx-frontend-qt5

    (對於基於 Debian/Ubuntu 的系統)

  2. 配置 Fcitx

    • 打開「設定」 -> 「地區和語言」(或類似名稱)。
    • 在「輸入來源」中,將 Fcitx 添加為輸入法系統。
    • 重啟系統。
  3. 啟用 Mozc

    • 重新登錄後,啟動 Fcitx 配置工具 (在應用程式菜單中搜索「Fcitx Configuration」)。
    • 在「Input Method」選項卡中,點擊左下角的「+」按鈕。
    • 取消勾選「Only Show Current Language」,然後搜索「Mozc」並添加它。
    • 將 Mozc 移動到列表的頂部或你偏好的位置。
  4. 切換輸入法: 通常默認的輸入法切換快捷鍵是 Ctrl + SpaceShift + Space

B. 安裝 IBus 和 Anthy/Mozc (另一種選擇)

IBus 是另一個流行的輸入法框架。

  1. 安裝 IBus 和 Mozc/Anthy

    sudo apt install ibus ibus-mozc # 或 ibus-anthy
  2. 配置 IBus

    • 打開「設定」 -> 「地區和語言」。
    • 在「輸入來源」中,添加「日語 (Mozc)」或「日語 (Anthy)」。
    • 重啟系統。

3. 安裝日語字體

為了正確顯示日語字符,你需要安裝日語字體。

A. 安裝常見的日語字體

sudo apt install fonts-noto-cjk fonts-ipafont fonts-japanese-gothic fonts-japanese-mincho
  • fonts-noto-cjk:Google 的 Noto CJK 字體,支持中文、日文、韓文,推薦。
  • fonts-ipafont:IPA 明朝/哥特體字體。

B. 配置字體 (可選)

在 GNOME 環境中,你可以通過「設定」->「外觀」->「字體」來更改系統默認字體。或者使用 GNOME Tweaks 工具進行更細緻的調整。

4. 終端中的日語支持

A. 檢查終端編碼

大多數現代終端模擬器都支持 UTF-8 編碼,這對於顯示日語字符是必要的。

echo $LANG

確保輸出包含 UTF-8

B. 安裝日語 man page (可選)

如果你想查看日語版本的 man 手冊頁:

sudo apt install manpages-ja

5. 總結

在 Linux 上設置日語環境需要配置區域設置、安裝輸入法和字體。通過 Fcitx + Mozc 或 IBus + Mozc 的組合,你可以獲得一個功能齊全的日語輸入環境。安裝 Noto CJK 或 IPA 字體將確保日語字符的正確顯示。

Raspberry Pi 上的日語環境設置

這篇備忘錄記錄了在 Raspberry Pi 上設置日語環境的方法。

資訊

在 Raspberry Pi OS (基於 Debian) 上設置日語環境,與在其他 Debian/Ubuntu 系統上的過程類似,但需要注意資源限制和 Raspberry Pi 特有的配置。正確配置後,你可以顯示和輸入日語。

1. 設置區域設置 (Locale)

區域設置決定了系統使用的語言、日期時間格式、貨幣符號等。

A. 打開 Raspberry Pi 配置工具

這是設置區域設置最簡單的方法。

  1. 在終端中運行:
    sudo raspi-config
  2. 導航到 5 Localisation Options (本地化選項)。
  3. 選擇 L1 Locale
  4. 在列表中找到 ja_JP.UTF-8 UTF-8,按下空白鍵選中它。確保 en_GB.UTF-8en_US.UTF-8 也被選中。
  5. 在下一個屏幕中,選擇 ja_JP.UTF-8 作為系統的默認區域設置。
  6. 選擇 L2 Timezone,並將時區設置為 Asia/Tokyo
  7. 完成後,重啟 Raspberry Pi。

B. 手動配置 (如果 raspi-config 無法使用)

如果出於某種原因無法使用 raspi-config,你可以手動配置。

  1. 編輯 locale.gen

    sudo vim /etc/locale.gen

    查找並取消註釋(刪除前面的 #)以下行:

    ja_JP.UTF-8 UTF-8

    保存並退出。

  2. 生成區域設置

    sudo locale-gen
  3. 設置系統區域設置

    sudo update-locale LANG=ja_JP.UTF-8

    重啟 Raspberry Pi。

2. 安裝日語字體

為了正確顯示日語字符,你需要安裝日語字體。

sudo apt update
sudo apt install fonts-noto-cjk fonts-ipafont fonts-ipaexfont
  • fonts-noto-cjk:Google 的 Noto CJK 字體,支持中文、日文、韓文,推薦。
  • fonts-ipafont:IPA 明朝/哥特體字體。
  • fonts-ipaexfont:IPAEX 明朝/哥特體字體。

安裝後,可以通過 Raspberry Pi OS 的桌面環境中的「設定」->「外觀」或「字體」來檢查和配置。

3. 安裝日語輸入法 (Fcitx + Mozc)

Fcitx 和 Mozc 是在 Linux 環境中最常用且效果最好的日語輸入法組合。

  1. 安裝 Fcitx 和 Mozc

    sudo apt install fcitx fcitx-mozc
  2. 設置 Fcitx 為默認輸入法框架

    im-config

    在彈出的界面中,選擇 fcitx 作為默認輸入法。

  3. 配置 Fcitx

    • 重啟 Raspberry Pi。
    • 登錄後,打開 Fcitx 配置工具 (在應用程式菜單中搜索「Fcitx Configuration」或運行 fcitx-configtool)。
    • 在「Input Method」選項卡中,點擊左下角的「+」按鈕。
    • 取消勾選「Only Show Current Language」,然後搜索「Mozc」並添加它。
    • 將 Mozc 移動到列表的頂部或你偏好的位置。
  4. 切換輸入法: 通常默認的輸入法切換快捷鍵是 Ctrl + SpaceShift + Space。你可以在 Fcitx 配置工具中修改它。

4. 終端中的日語支持

確保你的終端模擬器(如 LXTerminal)使用支持 UTF-8 的字體,並且其編碼設置為 UTF-8。通常,在 Raspberry Pi OS 上,這些都是默認配置。

5. 總結

在 Raspberry Pi 上設置日語環境是一個相對簡單的過程,主要通過 raspi-config 工具來完成區域設置,然後安裝必要的字體和輸入法(Fcitx + Mozc)。完成這些步驟後,你的 Raspberry Pi 將能夠正確顯示和處理日語文本。