跳至主要內容

標籤「Linux」的 12 篇文章

查看所有標籤

在 WSL 2 上安裝 Rocky Linux 8.10

· 1 分鐘閱讀

下載 WSL 2 映像檔

https://dl.rockylinux.org/pub/rocky/8/images/x86_64/Rocky-8-Container-Base.latest.x86_64.tar.xz

從這裡下載。

參考: https://docs.rockylinux.org/8/guides/interoperability/import_rocky_to_wsl/

解壓映像檔

將 tar.xz 解壓成 tar 檔。轉成 tar 後即可匯入到 WSL2。

cd ~/Downloads

xz -d Rocky-8-Container-Base.latest.x86_64.tar.xz

※Windows 上預裝的 bsdtar 無法解壓此檔。
※若沒有 xz 指令,可在 Cygwin64 安裝,或使用其他 WSL 發行版來解壓。

匯入映像至 WSL2

將映像匯入到 WSL2。

wsl --import RockyLinux-8.10 $HOME .\Rocky-8-Container-Base.latest.x86_64.tar --version 2

確認映像

wsl -l -v

新增使用者並設定預設使用者

以使用者名稱 hikari 為例:

wsl -d RockyLinux-8.10 -u root -- dnf install sudo passwd -y

wsl -d RockyLinux-8.10 -u root -- adduser hikari

wsl -d RockyLinux-8.10 -u root -- passwd -d hikari

wsl -d RockyLinux-8.10 -u root -- usermod -aG wheel hikari

wsl -d RockyLinux-8.10 -u root -- sed -i 's/^# %wheel/%wheel/' /etc/sudoers

wsl -d RockyLinux-8.10 -u root -- echo -e "[user]\\ndefault=hikari" `| tee -a /etc/wsl.conf

啟動映像

wsl -d RockyLinux-8.10

在 AlmaLinux 10 (Raspberry Pi 5 / GNOME / aarch64) 上安裝 Mozc 的方法

· 1 分鐘閱讀

下載 rpm 檔案

  • mozc
  • mozc-gui-tools
  • ibus-mozc

請搜尋上述套件,並從 rpmfind.net 下載。

確認架構是否正確。

  • Raspberry Pi 5 則為 aarch64
  • 一般 PC 則為 x86_64

rpm 檔案範例

  • mozc-2.31.5810.102-160000.1.2.aarch64.rpm
  • mozc-gui-tools-2.31.5810.102-160000.1.2.aarch64.rpm
  • ibus-mozc-2.31.5810.102-160000.1.2.aarch64.rpm

安裝

指定下載的 rpm 檔案,使用 dnf 指令安裝。

cd ~/Downloads
sudo dnf install ./mozc-2.31.5810.102-160000.1.2.aarch64.rpm ./mozc-gui-tools-2.31.5810.102-160000.1.2.aarch64.rpm ./ibus-mozc-2.31.5810.102-160000.1.2.aarch64.rpm

登出

先登出一次。

設定

打開「設定」→「鍵盤」,然後按此順序新增:

  • Japanese (Mozc)
  • Japanese

設定完成!

在 WSL 安裝 Rocky Linux 8.10

· 2 分鐘閱讀

下載 Rocky Linux 8.10 映像

$dest = Join-Path $env:TEMP "Rocky-8-Container-Base.latest.x86_64.tar.xz"
Invoke-WebRequest -Uri "https://dl.rockylinux.org/pub/rocky/8/images/x86_64/Rocky-8-Container-Base.latest.x86_64.tar.xz" -OutFile $dest

匯入

wsl --import RockyLinux-8.10 $HOME $dest

安裝 passwd

wsl -d RockyLinux-8.10 -u root dnf update -y `&`& dnf install -y passwd

建立使用者

$username = "hikari" # 設定你想要的使用者名稱
wsl -d RockyLinux-8.10 -u root useradd -mG wheel $username
wsl -d RockyLinux-8.10 -u root passwd -d $username # 清除使用者密碼

安裝 sudo

wsl -d RockyLinux-8.10 -u root dnf update -y `&`& dnf install sudo -y

設定預設使用者

$username = "hikari" # 設定你想要的使用者名稱
$uid = wsl -d RockyLinux-8.10 id $username -u
if (-not $uid) {
Write-Error "取得 UID 失敗。使用者 '$username' 可能不存在。"
exit 1
}

$basePath = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss"

$targetKey = Get-ChildItem $basePath | Where-Object {
(Get-ItemProperty $_.PSPath).DistributionName -eq "RockyLinux-8.10"
}
if (-not $targetKey) {
Write-Error "找不到 DistributionName 'RockyLinux-8.10'。"
exit 1
}

Set-ItemProperty -Path $targetKey.PSPath -Name "DefaultUid" -Value ([int]$uid)

啟用 EPEL

wsl -d RockyLinux-8.10 -u root dnf update -y `&`& dnf install -y epel-release

啟動

wsl -d RockyLinux-8.10

設為預設發行版

wsl --set-default RockyLinux-8.10

安裝 FastFetch

wsl -d RockyLinux-8.10 -u root dnf update -y `&`& dnf install fastfetch

執行 FastFetch

> wsl -d RockyLinux-8.10 -u root fastfetch
__wgliliiligw_, root@DESKTOP-MS-7C56-B550
_williiiiiiliilililw, -------------------------
_%iiiiiilililiiiiiiiiiii_ OS: Rocky Linux 8.10 x86_64
.Qliiiililiiiiiiililililiilm. Host: Windows Subsystem for Linux (2.0.14.0)
_iiiiiliiiiiililiiiiiiiiiiliil, Kernel: 5.15.133.1-microsoft-standard-WSL2
.lililiiilililiiiilililililiiiii, Uptime: 8 mins
_liiiiiiliiiiiiiliiiiiF{iiiiiilili, Packages: 285 (rpm)
jliililiiilililiiili@` ~ililiiiiiL Shell: bash 4.4.20
iiiliiiiliiiiiiili>` ~liililii Display 1: 1920x1080 @ 60Hz
liliiiliiilililii` -9liiiil Display 2: 1920x1080 @ 60Hz
iiiiiliiliiiiii~ "4lili WM: WSLg (Wayland)
4ililiiiiilil~| -w, )4lf Terminal: Windows Terminal
-liiiiililiF' _liig, )' CPU: AMD Ryzen 9 3900X (24) @ 3.800018 GHz
)iiiliii@` _QIililig, GPU: Microsoft Corporation Basic Render Driver
)iiii>` .Qliliiiililw Memory: 458.57 MiB / 62.76 GiB (0%)
)<>~ .mliiiiiliiiiiil, Disk (/): 51.72 GiB / 1007 GiB (5%)
_gllilililiililii~ Locale: C.UTF-8
giliiiiiiiiiiiiT`
-^~$ililili@~~' ████████████████████████
████████████████████████

在 RHEL 10.0 啟用 epel-release

· 1 分鐘閱讀
sudo dnf update -y
sudo subscription-manager repos --enable codeready-builder-for-rhel-10-x86_64-rpms
sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-10.noarch.rpm

在 AWS 使用官方 Rocky Linux 映像

· 5 分鐘閱讀

AMI 的選擇方式

從官方頁面取得 AMI。

https://rockylinux.org/ja-JP/download

選擇要設定給實例的架構 (ARM (aarch64)),並選擇 Cloud Images 裡的 AWS AMI。

alt text

以版本號過濾,找到符合條件的映像。

alt text

AMI ID 無法直接複製,因此點擊 Deploy 按鈕,然後從 AWS 主控台複製。

用 AMI ID 搜尋會出現如下

alt text

用擁有者過濾會比較好。

擁有者 = 792107900819

alt text

事前準備

  • 註冊 Key pair
    • 事先執行 ssh-keygen -t ed25519 指令產生公鑰,將 .ssh/id_ed25519.pub 匯入成 Key pair
  • 安裝 AWS CLI
    • 安裝 CLI
    • 設定存取金鑰 (aws configure)

建立網路

比起 NAT Gateway,使用公開 IP 比較便宜,所以建立 Elastic IP。

架構圖大概長這樣。

建立 EC2 Instance Connect 端點

alt text

建立 EC2 Instance Connect 端點後,可以從 AWS CLI 登入。

建立實例

  • 為了接受 ping 要允許 ICMP(Echo Request)(安全性群組)
  • 允許 SSH 連線(安全性群組)
  • 在孟買區域 (Mumbai) 且 arm64 比較便宜
  • 每 vCPU 需要 1.5 GiB RAM(至少 t4g.medium)

因此我用以下條件建立。

  • 區域:孟買(ap-south-1)
  • 架構:arm64
  • AMI:RHEL 8.10 (LVM, aarch64); ami-0415efd8380284dc4
  • 實例類型:t4g.medium
  • Key pair:在 PC 上建立的公鑰 (.ssh/id_ed25519.pub)
  • 網路:公共子網(關聯了到 Internet Gateway 的路由表)
  • 安全性群組:建立安全性群組(名稱為預設)
    • ssh, 0.0.0.0/0
    • 自訂 ICMP - IPv4(Echo Request), 0.0.0.0/0
  • 儲存:1x 10GiB, gp3

連線

在 PC 上打開終端機,執行以下指令。

aws ec2-instance-connect ssh --private-key-file .ssh/id_ed25519 --os-user rocky --instance-id i-*****************

安裝 Instance Connect 套件

Rocky Linux 的 AMI 映像沒有包含 Instance Connect 套件,無法從管理控制台連線。因此需要安裝套件。

參考 https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ec2-instance-connect-set-up.html 下載套件。

  • ※選擇 RHEL 的套件
  • ※注意作業系統主版本與架構不同可能無法正常運作

範例

curl https://amazon-ec2-instance-connect-us-west-2.s3.us-west-2.amazonaws.com/latest/linux_arm64/ec2-instance-connect.rhel8.rpm -o /tmp/ec2-instance-connect.rpm
curl https://amazon-ec2-instance-connect-us-west-2.s3.us-west-2.amazonaws.com/latest/linux_amd64/ec2-instance-connect-selinux.noarch.rpm -o /tmp/ec2-instance-connect-selinux.rpm
sudo dnf install -y /tmp/ec2-instance-connect.rpm /tmp/ec2-instance-connect-selinux.rpm

安裝完成後,就可以從 AWS 管理控制台存取。

alt text

CDK (typescript)

我做了 CDK 範例,放上來供參考。

請記得更改 keyName(Key pair)的名稱。

import * as cdk from 'aws-cdk-lib';
import * as ec2 from 'aws-cdk-lib/aws-ec2';

export interface RockyLinuxStackProps extends cdk.StackProps {
}

export class RockyLinuxStack extends cdk.Stack {
public constructor(scope: cdk.App, id: string, props: RockyLinuxStackProps = {}) {
super(scope, id, props);

// Resources
const ec2dhcpOptions = new ec2.CfnDHCPOptions(this, 'EC2DHCPOptions', {
domainName: 'ap-south-1.compute.internal',
domainNameServers: [
'AmazonProvidedDNS',
],
],
});
ec2dhcpOptions.cfnOptions.deletionPolicy = cdk.CfnDeletionPolicy.DELETE;

const ec2InternetGateway = new ec2.CfnInternetGateway(this, 'EC2InternetGateway', {
{
value: 'igw',
key: 'Name',
},
],
});
ec2InternetGateway.cfnOptions.deletionPolicy = cdk.CfnDeletionPolicy.DELETE;

const ec2vpc = new ec2.CfnVPC(this, 'EC2VPC', {
cidrBlock: '10.0.0.0/16',
enableDnsSupport: true,
instanceTenancy: 'default',
enableDnsHostnames: true,
{
value: 'vpc',
key: 'Name',
},
],
});
ec2vpc.cfnOptions.deletionPolicy = cdk.CfnDeletionPolicy.DELETE;

const ec2VPCGatewayAttachment = new ec2.CfnVPCGatewayAttachment(this, 'EC2VPCGatewayAttachment', {
vpcId: ec2vpc.ref,
internetGatewayId: ec2InternetGateway.ref,
});
ec2VPCGatewayAttachment.cfnOptions.deletionPolicy = cdk.CfnDeletionPolicy.DELETE;

const ec2NetworkAcl = new ec2.CfnNetworkAcl(this, 'EC2NetworkAcl', {
vpcId: ec2vpc.ref,
],
});
ec2NetworkAcl.cfnOptions.deletionPolicy = cdk.CfnDeletionPolicy.DELETE;

const ec2RouteTable = new ec2.CfnRouteTable(this, 'EC2RouteTable', {
vpcId: ec2vpc.ref,
});
ec2RouteTable.cfnOptions.deletionPolicy = cdk.CfnDeletionPolicy.DELETE;

const ec2SecurityGroup = new ec2.CfnSecurityGroup(this, 'EC2SecurityGroup', {
groupDescription: 'launch-wizard-1 created 2025-04-27T00:11:58.641Z',
groupName: 'launch-wizard-1',
vpcId: ec2vpc.ref,
securityGroupIngress: [
{
cidrIp: '0.0.0.0/0',
ipProtocol: 'tcp',
fromPort: 22,
toPort: 22,
},
{
cidrIp: '0.0.0.0/0',
ipProtocol: 'icmp',
fromPort: 8,
toPort: -1,
},
],
securityGroupEgress: [
{
cidrIp: '0.0.0.0/0',
ipProtocol: '-1',
fromPort: -1,
toPort: -1,
},
],
});
ec2SecurityGroup.cfnOptions.deletionPolicy = cdk.CfnDeletionPolicy.DELETE;

const ec2Subnet = new ec2.CfnSubnet(this, 'EC2Subnet', {
vpcId: ec2vpc.ref,
mapPublicIpOnLaunch: false,
enableDns64: false,
availabilityZoneId: 'aps1-az1',
privateDnsNameOptionsOnLaunch: {
EnableResourceNameDnsARecord: false,
HostnameType: 'ip-name',
EnableResourceNameDnsAAAARecord: false,
},
cidrBlock: '10.0.0.0/20',
ipv6Native: false,
{
value: 'subnet-public1-ap-south-1a',
key: 'Name',
},
],
});
ec2Subnet.cfnOptions.deletionPolicy = cdk.CfnDeletionPolicy.DELETE;

const ec2InstanceConnectEndpoint = new ec2.CfnInstanceConnectEndpoint(this, 'EC2InstanceConnectEndpoint', {
preserveClientIp: false,
securityGroupIds: [
ec2SecurityGroup.attrGroupId,
],
subnetId: ec2Subnet.attrSubnetId,
});
ec2InstanceConnectEndpoint.cfnOptions.deletionPolicy = cdk.CfnDeletionPolicy.DELETE;

const ec2vpcdhcpOptionsAssociation = new ec2.CfnVPCDHCPOptionsAssociation(this, 'EC2VPCDHCPOptionsAssociation', {
vpcId: ec2vpc.ref,
dhcpOptionsId: ec2dhcpOptions.ref,
});
ec2vpcdhcpOptionsAssociation.cfnOptions.deletionPolicy = cdk.CfnDeletionPolicy.DELETE;

const ec2RouteHg = new ec2.CfnRoute(this, 'EC2RouteHG', {
routeTableId: ec2RouteTable.ref,
destinationCidrBlock: '0.0.0.0/0',
gatewayId: ec2InternetGateway.ref,
});
ec2RouteHg.cfnOptions.deletionPolicy = cdk.CfnDeletionPolicy.DELETE;

const ec2SubnetNetworkAclAssociation = new ec2.CfnSubnetNetworkAclAssociation(this, 'EC2SubnetNetworkAclAssociation', {
networkAclId: ec2NetworkAcl.ref,
subnetId: ec2Subnet.ref,
});
ec2SubnetNetworkAclAssociation.cfnOptions.deletionPolicy = cdk.CfnDeletionPolicy.DELETE;

const ec2SubnetRouteTableAssociation = new ec2.CfnSubnetRouteTableAssociation(this, 'EC2SubnetRouteTableAssociation', {
routeTableId: ec2RouteTable.ref,
subnetId: ec2Subnet.ref,
});
ec2SubnetRouteTableAssociation.cfnOptions.deletionPolicy = cdk.CfnDeletionPolicy.DELETE;

const ec2Instance = new ec2.CfnInstance(this, 'EC2Instance', {
tenancy: 'default',
instanceInitiatedShutdownBehavior: 'stop',
cpuOptions: {
threadsPerCore: 1,
coreCount: 2,
},
blockDeviceMappings: [
{
ebs: {
volumeType: 'gp3',
iops: 3000,
volumeSize: 10,
encrypted: false,
deleteOnTermination: true,
},
deviceName: '/dev/sda1',
},
],
availabilityZone: 'ap-south-1a',
privateDnsNameOptions: {
enableResourceNameDnsARecord: false,
hostnameType: 'ip-name',
enableResourceNameDnsAaaaRecord: false,
},
ebsOptimized: true,
disableApiTermination: false,
keyName: 'hikari',
sourceDestCheck: true,
placementGroupName: '',
networkInterfaces: [
{
privateIpAddresses: [
{
privateIpAddress: '10.0.3.59',
primary: true,
},
],
secondaryPrivateIpAddressCount: 0,
deviceIndex: '0',
groupSet: [
ec2SecurityGroup.ref,
],
ipv6Addresses: [
],
subnetId: ec2Subnet.ref,
associatePublicIpAddress: true,
deleteOnTermination: true,
},
],
imageId: 'ami-0415efd8380284dc4',
instanceType: 't4g.medium',
monitoring: false,
],
creditSpecification: {
cpuCredits: 'unlimited',
},
});
ec2Instance.cfnOptions.deletionPolicy = cdk.CfnDeletionPolicy.DELETE;

const ec2ElasticIp = new ec2.CfnEIP(this, 'EC2ElasticIp', {
domain: 'vpc',
{
key: 'Name',
value: 'elastic-ip',
},
],
});
ec2ElasticIp.cfnOptions.deletionPolicy = cdk.CfnDeletionPolicy.DELETE;

const ec2EipAssociation = new ec2.CfnEIPAssociation(this, 'EC2EipAssociation', {
eip: ec2ElasticIp.ref,
instanceId: ec2Instance.ref,
});
ec2EipAssociation.cfnOptions.deletionPolicy = cdk.CfnDeletionPolicy.DELETE;
}
}

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

· 2 分鐘閱讀

虛擬機器設定

選擇「具名管道」,並將管道名稱設定為「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 結束。

Linux NetworkManager 備忘錄

· 4 分鐘閱讀

這篇備忘錄記錄了 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 上的日語環境設置

· 3 分鐘閱讀

這篇備忘錄記錄了在 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 字體將確保日語字符的正確顯示。