You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

通过SSH获取远程主机Locale/输入语言/键盘布局并在tmux状态栏显示

在tmux状态栏显示Mac本地输入法(SSH连接Linux服务器场景)

这是个超实用的需求!毕竟远程会话里不小心切到中文输入法打命令真的很头疼😂 咱们来一步步解决这个问题:

核心问题:SSH会话能直接获取Mac本地输入法吗?

默认情况下不行。因为SSH是远程终端会话,你的Mac终端(比如Terminal.app/iTerm2)只会把按键的编码发送给Linux服务器,服务器完全不知道你本地切换了输入法——除非你主动把这个信息同步到服务器上。

解决方案:实时同步Mac输入法到服务器,再让tmux显示

1. 在Mac上监听输入法切换,同步到服务器

我们需要做个小自动化,每次你切换输入法时,自动把当前输入法名称发送到Linux服务器的临时文件里。

方法1:用Hammerspoon(推荐,更稳定)

Hammerspoon是Mac上的自动化工具,能轻松监听输入法切换事件。先安装Hammerspoon,然后修改~/.hammerspoon/init.lua

-- 监听输入法切换事件
hs.keycodes.inputSourceChanged(function()
    -- 获取当前输入法名称
    local inputMethodName = hs.keycodes.currentSourceName()
    -- 替换成你的服务器地址、用户名,把输入法名称写入服务器的临时文件
    local sshCmd = string.format("ssh your_username@your_server_ip 'echo \"%s\" > ~/.current_input_method'", inputMethodName)
    os.execute(sshCmd)
end)

保存后重启Hammerspoon,以后每次切换输入法,都会自动把名称同步到服务器的~/.current_input_method文件里。

方法2:用AppleScript+Automator(无需额外工具)

如果你不想装第三方工具,用系统自带的Automator就能搞定:

  1. 打开Automator,创建一个「快速操作」
  2. 设置触发条件为「没有输入」,然后添加「运行AppleScript」动作,输入以下代码:
tell application "System Events"
    set currentInput to name of current input source
end tell
do shell script "ssh your_username@your_server_ip 'echo " & quoted form of currentInput & " > ~/.current_input_method'"
  1. 保存后,在系统设置的「键盘-快捷键-服务」里给这个快速操作绑定快捷键(或者配置成输入法切换时自动触发)。

2. 让tmux读取同步的输入法信息,显示在状态栏

修改Linux服务器上的~/.tmux.conf,在状态栏配置里加入读取临时文件的内容。比如把status-right改成:

set -g status-right "#[fg=white,bg=cyan] Input: #(cat ~/.current_input_method 2>/dev/null || echo 'Unknown') #[fg=white,bg=black] %H:%M:%S | %d %b"

配置里的#[fg=white,bg=cyan]是颜色设置,你可以根据自己的喜好调整。

修改完后,重新加载tmux配置:

tmux source ~/.tmux.conf

现在你的tmux状态栏就会实时显示当前Mac上的输入法了!

关于locale/服务器键盘布局的补充

服务器端的locale(比如echo $LANG)是会话级的环境变量,和你Mac本地的输入法没有直接关系——它决定的是服务器端程序的字符编码和语言显示,不能用来判断你当前在Mac上用的是中文还是英文输入法,所以这个方向走不通哦。

内容的提问来源于stack exchange,提问作者grundic

火山引擎 最新活动