พิมพ์ภาษาไทย: 2 ชั้นที่ต้องผ่าน
debug ทีละชั้น: layout คีย์บอร์ด → ฟอนต์ที่วาดตัวไทย
Two-layer debugging of Thai input in kitty
ใช้ทำอะไร (Purpose)
กด Alt+Shift ─► [ชั้น 1: layout มี th] ─► [ชั้น 2: มีฟอนต์วาดตัวไทย] ─► เห็นตัวไทย
setxkbmap / localectl fontconfig / kitty symbol_map| อาการ | ชั้นที่พัง |
|---|---|
| ยังเป็นตัวอังกฤษ | 1 layout |
| กล่อง □ หรือไม่ขึ้นอะไร | 2 ฟอนต์ |
ขั้นตอน debug จริง (ตามลำดับที่เกิด)
1. ไม่มีฟอนต์ไทยเลย
fc-list :lang=th family # ว่าง
sudo pacman -S noto-fontsต้นเหตุ: ttf-sarabun ถูกตัดเพราะอยู่ AUR (ถูกตามหลัก) แต่ ไม่ได้ถามว่ามันทำหน้าที่อะไร
2. ติดตั้ง yay + ฟอนต์จาก AUR
pacman -Ss tlwg # ไม่มีใน repo ทางการ (เจอแค่ texlive)
cd ~ && git clone https://aur.archlinux.org/yay-bin.git && cd yay-bin && less PKGBUILD
makepkg -si
yay -S ttf-sarabun ttf-tlwg⚠️ AUR ใครก็อัปโหลดได้ → ตรวจ source= ใน PKGBUILD ทุกครั้ง (typosquatting แบบโดเมนปลอม)
3. ชั้น layout ไม่ทำงาน
setxkbmap -query # layout: us (ไม่มี th) → บรรทัดใน i3 config ไม่มีผล
setxkbmap -layout th # บังคับไทยล้วน เพื่อแยกสมมติฐานพิมพ์แล้วได้ “ทดสอบ” (copy ออกมาอ่านได้) แต่ kitty แสดงเป็นกล่อง → ชั้น 2 ก็พังด้วย
แก้ถาวรระดับ Xorg (ไม่ขึ้นกับ i3):
sudo localectl set-x11-keymap us,th pc105 "" grp:alt_shift_toggleเขียน /etc/X11/xorg.conf.d/00-keyboard.conf = ย้ายจาก config ระดับ interface เป็นค่า global
4. ชั้นฟอนต์ใน kitty
kitty --debug-font-fallbackผล: Symbol map fonts: NotoSansMono-Regular → kitty ได้ฟอนต์ผิดตัว
สาเหตุจริง: kitty.conf ใน repo มี symbol_map U+0E00-U+0E7F Bai Jamjuree แต่ P15 ไม่มีฟอนต์นี้ → fontconfig ส่ง “ตัวใกล้เคียง” (Noto Sans Mono, ไม่มีตัวไทย) มาเงียบๆ (เหมือน DNS ตอบ record ใกล้เคียงแทน NXDOMAIN)
ทดสอบโดยไม่แก้ไฟล์:
kitty -o 'symbol_map U+0E00-U+0E7F Tlwg Mono' --debug-font-fallback # TlwgMono ✓แก้ถาวรแบบไม่กระทบเครื่องอื่น (local.conf):
sed -i '/^symbol_map U+0E00-U+0E7F/d' ~/dotfiles/kitty/.config/kitty/kitty.conf
# เปลี่ยนเป็นบรรทัดสุดท้าย: globinclude local.conf
echo 'symbol_map U+0E00-U+0E7F Tlwg Mono' > ~/.config/kitty/local.conf
echo '**/local.conf' >> ~/dotfiles/.gitignoreทดสอบว่าใช้ได้ (Verification)
setxkbmap -query→layout: us,th+options: grp:alt_shift_togglekitty --debug-font-fallback(ไม่มี -o) →TlwgMono= มาจาก local.conf จริง- Alt+Shift พิมพ์ไทยใน kitty หน้าต่างใหม่ได้
ทำไม Tlwg Mono
ฟอนต์ไทยแบบ monospace → ตัวไทยตรงแนวกับตัวอังกฤษใน terminal และชื่อตรงตัว จับคู่ได้แน่นอน
ปัญหาที่เคยเจอ & สิ่งที่ทายผิด (Troubleshooting)
| เหตุการณ์ | บทเรียน |
|---|---|
ทาย ttf-tlwg อยู่ใน repo | อยู่ AUR → ค้นด้วย pacman -Ss ก่อน ไม่เดาชื่อ |
| วิเคราะห์ว่า “บรรทัด Noto Sans Thai ชนะ” | ผมอ่าน kitty.conf ของ MSI (ที่มีการแก้ค้างไม่ได้ commit) ไม่ใช่ของ P15 |
| สมมติฐาน “kitty ชอบ monospace” | ไม่ได้รับการพิสูจน์ สาเหตุจริงคือฟอนต์ที่ขอไม่มีในเครื่อง |
| commit ลบไป 1 บรรทัด (ทายว่า 3) | ตัวเลข diff เผยว่า MSI มีการแก้ค้าง → ต้อง restore ก่อน pull |
glfw error ... Notify | ไม่มี notification daemon (แก้ด้วย dunst ในไฟล์ 09) |
คำถามชวนคิด
- ทำไมการ “บังคับไทยล้วน” (
setxkbmap -layout th) จึงแยกสองชั้นออกจากกันได้ในการทดสอบเดียว - fontconfig ส่งฟอนต์ใกล้เคียงแทนการบอกว่าไม่มี — พฤติกรรมแบบนี้มีข้อดีอะไร และอันตรายอย่างไรต่อการ debug
- ถ้าลูกทีมใช้ desktop อื่น (ไม่ใช่ i3) แนวทาง localectl ยังใช้ได้ไหม เพราะอะไร