最近使用guacamole 连接VNC,发现其剪切板乱码,查阅官方文档可以设置其编码。经过尝试,对开源VNC支持都不友好,UltraVNC 1.3.8.1、TigerVNC 1.12.0 、 TightVNC 等都试过了,各种编码组合都试过了,都乱码,经过查看VNC协议,发现VNC原生不支持UTF-8编码,是通过扩展协议支持的。但是guacamole使用的libVNC 是通过默认的协议发送的,就是不过使用什么编码都乱码,查阅UVNC、TigerVNC等源码,发现各家都有自己的实现,基本不会兼容其他家的VNC。
剪切板传输过程
前端发送剪切板数据(utf8数据)到-------guacd-server端(编码转换 utf8 转设置的编码(默认utf8-ISO 8859-1 (Latin-1)))--- VNC server收到数据 设置到系统(tigerVNC ISO 8859-1转 utf-8 设置到系统;UVNC ISO 8859-1 设置到系统;tightVNC ISO 8859-1设置到系统)
从这个流程来看 tigerVNC 应该能不用修改源码能支持中文。但是实际上不行。经过研究 ,最终通过修改VNC源码支持,guacamole 设置成UTF8 编码,tigervnc收到数据后 不需要进行转换,直接设置的系统,将转换代码屏蔽就可以了。
其他VNC都一样