Typeless Linux 版在 Omarchy 上貼不進終端機:坑我踩完了,gist 直接丟給你的 AI
本篇另有 English 版本 → Typeless for Linux won't paste into a terminal on Omarchy: I hit the potholes, here's a gist for your AI
我最近把主力開發環境換到 Omarchy,又剛好是 Typeless 的訂戶,它九月底才推出 Linux 版,想當然耳要裝來用。結果第一天就撞到兩個坑:語音輸入在 Chrome 正常,在 kitty 裡一個字都貼不出來;聽寫時那個小浮動視窗,換個 workspace 就不見了。坑踩完了,修法是兩條 Hyprland 設定,先給你。
TL;DR
如果你也在 Omarchy(或任何 Hyprland 0.56+ 加 Fcitx5)上用 Typeless,把這份 gist 整個貼給你的 AI 助理,請它套到你的設定裡:
gist:Typeless 2.2.0 on Omarchy / Hyprland 修法
它做兩件事,都在 compositor 層,不動 Typeless 也不動 kitty:
- 只攔 Typeless 那把虛擬鍵盤送出的
Ctrl+V,在終端機改送Shift+Insert,其他視窗照舊。你自己的鍵盤不受影響。 - 把聽寫浮動視窗
pin到所有 workspace。
坑一:終端機裡一個字都沒有
Typeless 在 Linux 上的設計是先透過輸入法引擎把字送進去,失敗才退回剪貼簿。它的安裝目錄裡有 Fcitx5 addon 的設定檔,有 IBus 用的引擎,就是沒有 Fcitx5 addon 本體 typeless-voice.so。註冊腳本對這件事的處理方式是:
if [[ ! -f "${addon_so}" ]]; then
echo "Fcitx5 VoiceIME addon not built; skipping Fcitx5 registration."
return 0
fi
安靜跳過,回傳成功。官方 .deb 裡也沒有這個檔案,不是 AUR 打包漏掉。所以在我的機器上,每一次聽寫 log 都長這樣:
[VoiceIme] status=failed stage=switch-engine target=typeless-voice
[TextInjection] backend=fcitx status=skipped reason=no-ibus-compensation
[insertText] backend=clipboard-paste status=succeeded clipboardRestoreDelayMs=500
退回剪貼簿之後,Typeless 用一把自己建的虛擬鍵盤 Typeless InputHelper Virtual Keyboard 送出 Ctrl+V。這在 Chrome、Teams 都沒問題,因為 GUI 把 Ctrl+V 當貼上。kitty 不是:它的貼上鍵是 Ctrl+Shift+V 和 Shift+Insert,Ctrl+V 原樣交給 shell,在 bash 和 zsh 裡那是 quoted-insert,畫面上什麼都不會有。
最諷刺的是那把虛擬鍵盤的能力表只有六個鍵:Backspace、LeftCtrl、LeftShift、C、V、Insert。它有 Shift,也有 Insert,只是從來沒用過。
坑二:浮動視窗不是不見,是在 workspace 1
聽寫時 Typeless 會開一個小浮動視窗顯示狀態。我原本回報給客服的是「焦點在 Chromium 原生 Wayland 視窗時不出現」,這個描述是錯的。hyprctl clients -j 一看,那個 Status 視窗是普通浮動視窗,pinned=false,就留在它第一次出現的 workspace 1。把 Chrome 搬到 workspace 1,它就在。
Typeless 自己沒辦法把視窗 pin 住,在 Hyprland 這是 compositor 用 window rule 決定的事。Omarchy 自己的 picture-in-picture 規則就是這樣寫的。
修法
不要在 kitty 加 map ctrl+v paste_from_clipboard。我一度想這樣做,代價是 shell 的 quoted-insert 和 herdr 的貼圖片快捷鍵全被攔走,每天都會撞到。
能改的地方是 compositor。Hyprland 的綁定可以限定只對特定輸入裝置生效(wiki 的 Per-Device Binds,查核 2026-10),所以我在 ~/.config/hypr/bindings.lua 加了一條只認 typeless-inputhelper-virtual-keyboard 的 Ctrl+V。判斷終端機的方式照抄 Omarchy 的 Super+V:看視窗有沒有 terminal tag。
local function typeless_send_once(mods, key)
hl.dispatch(hl.dsp.send_key_state({ mods = mods, key = key, state = "down" }))
hl.timer(function()
hl.dispatch(hl.dsp.send_key_state({ mods = mods, key = key, state = "up" }))
end, { timeout = 50, type = "oneshot" })
end
hl.bind("CTRL + V", function()
local window = hl.get_active_window()
for _, tag in ipairs((window and window.tags) or {}) do
if tag:gsub("%*$", "") == "terminal" then
return typeless_send_once("SHIFT", "Insert")
end
end
typeless_send_once("CTRL", "V")
end, {
description = "Typeless paste (terminal-aware)",
device = { inclusive = true, list = { "typeless-inputhelper-virtual-keyboard" } },
})
device.inclusive = true 表示只有清單裡的裝置能觸發這條綁定。裝置名稱用 hyprctl devices 查。
浮動視窗那邊是一條 window rule,在 ~/.config/hypr/hyprland.lua:
o.window({ class = "^Typeless$", title = "^Status$" }, {
float = true,
pin = true,
no_focus = true,
border_size = 0,
})
hyprctl reload 後 hyprctl configerrors 沒有輸出,kitty 可以貼上,Chrome 照常,浮動視窗跟著我切 workspace。gist 裡有驗證指令和非 Omarchy 的改法。
附錄:我怎麼繞了兩天
這段跟修法無關,純粹是自首。
一開始症狀不穩定,herdr 貼進去是空白,純 kitty 有時好有時壞。log 每次都說成功,所以我把注意力放在「貼上之後」:我猜過 herdr 在遠端讀錯剪貼簿,猜過它非同步讀取撞上 Typeless 500 ms 後的還原,猜過 helper 子程序死了。三個都查了,三個都錯。
第二個我信了最久。剪貼簿一出現聽寫文字,16 ms 後 herdr 就記了一行 clipboard image paste trigger received, but local clipboard has no image,怎麼看都像它讀太慢、剪貼簿已經被還原。事後才懂,那行根本就是答案:herdr 收到了一個它認定為貼圖片的按鍵。
後來是對照組救了我。GUI 都正常,只有終端機不行,那問題就在「貼上」那一個動作;而 kitty 自己就有工具可以看它收到什麼:
kitty +kitten show_key -m kitty
開著它聽寫一次,印出來的是 ctrl+v PRESS。兩天的時序推論,一個指令就結束了。
更尷尬的是坑二。在搞清楚浮動視窗只是在別的 workspace 之前,我以為它在 Wayland 下根本不會正常顯示,花了半天寫了一個 Omarchy 狀態列 plugin,用 PipeWire 串流和 Typeless 的 SQLite 去推它是不是在聽寫。它能動,解的是一個不存在的問題。讓我回頭重看的是客服一句追問:「是每次都不出現,還是偶爾?」要回答就得重新觀察,一觀察它就在那裡。
教訓兩條:在 Wayland 下遇到「注入的文字沒出現」,先用目標程式自己的工具看它收到什麼按鍵,別猜時序;「看不到」要先分清楚是不存在還是不在眼前,再決定要不要做替代方案。
誠實邊界
- 驗過的:實體鍵盤的
Ctrl+V不受新綁定影響(在 kitty 按Ctrl+V再按Tab,出現^I);herdr 收到Shift+Insert後正常貼上;重啟 Typeless 後,浮動視窗由 window rule 自動 pin,不用手動。 - 沒驗的:gist 裡非 Omarchy 的改法是照 Hyprland wiki 的語法推的,我沒有在沒裝 Omarchy 的 Hyprland 上試過。
- 沒修的:剪貼簿那條路有個副作用,Omarchy 的剪貼簿歷史記下了每一次聽寫內容。500 ms 後還原擋不住剪貼簿管理器。這個我沒修,已經回報給 Typeless,連同「Linux 版請附上 Fcitx5 addon」和「對終端機改送 Shift+Insert,你們的虛擬鍵盤本來就有那兩個鍵」。
更新
2026-10-08:Typeless 客服回覆,問題與建議已記錄並轉交團隊調查。沒有時程。有新版我會回來補。
本文由作者規劃與撰寫,AI(Claude)協助草稿整理與查證;技術內容與觀點由作者確認並負責。