Konsole的优点(vs XShell/Windows Terminal):
可以随意使用我习惯的 tmux 切 window/pane 快捷键: Shift+←→/Alt+↑↓←→ (XShell 中不可用)
开 tab 连 ssh 时, 能在 tab 上显示 ssh host, 便于区分
没有以下奇怪问题
Windows Terminal 方块光标覆盖文字https://github.com/microsoft/terminal/issues/1203, 在 nvim 里仍然无效
复制完以后会取消选择 https://github.com/microsoft/terminal/issues/3884
python tqdm 中的进度条看起来正常(XShell 需要逐个将 属性-终端-将含糊的大小字符视为宽字符 的勾选去掉)
在 Windows 上安装使用 Konsole
基本思路是在 WSL(Windows Subsystem for Linux) 上跑 Konsole, 然后通过 X 转发, 在本地开一个 X Server 来显示 Konsole.
安装 WSL(Windows Subsystem for Linux)
我这里由于 Windows 10 没有 2004升级, 只能使用 WSL1, 直接在 Microsoft Store 里搜索发行版并安装即可. 由于我主要是用于 SSH, 基本与发行版无关, 就直接安装了 Ubuntu (会安装20.04 LTS).
安装配置一些常用软件, 比如 git
zsh
等. oh-my-zsh 也可以直接安装上. 顺便安装一下 powerline 的字体 sudo apt install fonts-powerline
发现 htop 无法直接使用 https://github.com/microsoft/WSL/issues/25
安装 Konsole
直接用包管理器安装就好 sudo apt install konsole
配置 X 转发
我使用的 Windows X Server 是 vcxsrv. 安装完之后开始菜单里 XLaunch 一路默认启动即可.
执行 export DISPLAY=:0.0
即可, 添加到 .zshrc
方便使用.
ref: https://medium.com/@dhanar.santika/installing-wsl-with-gui-using-vcxsrv-6f307e96fac0
启动 Konsole
在 Ubuntu 里输入 konsole
并回车, 不出意外的话, Konsole 窗口就出现了.
图标丢失问题
此时应该会发现, 不少图标都丢失了. 比如 tab 的关闭按钮, 设置里左侧栏里的图标. 这应该没有安装提供这些图标的包导致的. 由于我还想用 Dolphin 等 KDE 软件, 我直接安装了 KDE 全家桶.
sudo apt install kde-full
安装完之后图标就正常了.
Dolphin 启动不起来
在 Ubuntu 里输入 dolphin
并回车, 提示
dolphin: error while loading shared libraries: libQt5Core.so.5: cannot open shared object file: No such file or directory
解决方法: 执行 sudo strip --remove-section=.note.ABI-tag /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
即可
鼠标指针被裁剪问题
此时会发现, 鼠标指针都被裁剪掉了一部分
似乎是老问题. 暂时没有解决, 通过缩小鼠标指针来提高体验.
执行 export XCURSOR_SIZE=32
即可, 也放进 .zshrc
方便使用. 修改为32后, 仍然有部分被裁剪掉了, 不过现在被裁剪的部分较少, 而且尺寸与我使用的 Windows 的鼠标指针大小基本相同, 姑且可以接受.
让 Konsole 更 Windows
此时打开 Konsole 的流程需要从开始菜单打开 Ubuntu, 输入 konsole
回车. 而 Ubuntu 的窗口还会开着. 这很不 Windows.
使用以下 vbs 脚本来启动 Konsole
Set oShell = CreateObject ("Wscript.Shell") Dim strArgs strArgs = "wsl zsh -c 'DISPLAY=localhost:0.0 XCURSOR_SIZE=32 konsole --workdir /home/epix'" oShell.Run strArgs, 0, false
然后在 %AppData%\Microsoft\Windows\Start Menu
创建个快捷方式, 图标改成 Konsole 的图标, 就可以直接从开始菜单打开 Konsole 了.
ref: https://github.com/microsoft/WSL/issues/3404#issuecomment-408094942
仍然存在的问题
开启速度不如原生, 连接 ssh 时花费时间更多.
一些可能能够提高 SSH 体验的方法
将常用的 ssh 配置写入 .ssh/config
中, 用到时只要 ssh <Host字段>
即可.
使用 ssh-agent 来缓存解密的 ssh private key, 省去每次输入的麻烦, 方法
- 可以直接运行
eval `ssh-agent`
来启动 ssh-agent. 不能只运行ssh-agent
的原因: ssh-agent 会把启动后需要执行的设置环境变量等信息输出, 需要 eval 后生效. ref: https://stackoverflow.com/questions/17846529/could-not-open-a-connection-to-your-authentication-agent/4086756#4086756 - 可以手动指定 ssh-agent 监听地址, 然后设置环境变量. 比如
ssh-agent -a /run/shm/ssh-agent.sock export SSH_AUTH_SOCK=/run/shm/ssh-agent.sock
我使用的是方法2, 并将此内容写入 .zshrc
, 每次进 zsh 都会尝试开 ssh-agent (已启动则会启动失败), 并设置环境变量.
ssh-agent 启动并设置好环境变量之后, 可以通过以下方法缓存
- 手动执行
ssh-add <path to private key>
, 输入密码即可 - 在
.ssh/config
中设置AddKeysToAgent yes
, 解密后加入 ssh-agent. 可以放到Host *
下(对所有 Host 生效) 也可以放在某个 Host 下(只对此 Host 生效) ref:
我使用的是方法2, 每次开机后第一次连接需要输入密码, 之后只要 ssh-agent 存活就不需要再输入. (Konsole 窗口关闭后不会关闭 ssh-agent)
双重 X 转发
此时 Konsole 已经是通过 X 转发显示的了. 如果想要再将这里面 ssh 到的远程机器的 GUI 通过 X 转发回本地, 还需要一些额外设置.
- WSL 中安装 xauth
- 在
.ssh/config
中需要 X 转发的 Host 下添加
ForwardAgent yes ForwardX11 yes ForwardX11Trusted yes XauthLocation /usr/bin/xauth