版本亮点
6.6.5 有哪些更新
新特性
- 许可证绑定账户,登录即激活: 注册码和 Alithon 账户此前互不相识——注册码只认机器码,账户只认设备和订单,于是每换一台机器都得重新去翻交付邮件。现在结账时勾选「将许可证绑定到我的 Alithon 账户」(个人版默认勾选,企业版默认不勾),密钥就记在买家邮箱名下;之后在软件里用该邮箱登录,你所在的那台电脑会自动激活,退出登录时自动释放。已经装好密钥的机器,首次登录时会问一次要不要绑定;「许可证管理」对话框里也有「同时绑定到我的账户」勾选。一个密钥只能绑定一个账户且之后无法更改,因此每个入口都会先说明并要求确认
- 激活需要登录账户: 「许可证管理」里的激活现在先登录再激活,这样服务端才知道是谁在激活——也正因如此,这里输入的密钥之后才能跟着账户走到下一台机器。已绑定的密钥不再接受旧版本的匿名激活,会提示升级并登录
- 取消三次转移限制: 个人版密钥此前是一次激活加三次转移、用掉就没了——重装四次 Windows 授权就到头了。现在未绑定的密钥最多可同时用于三台机器,停用其中一台即刻释放名额;绑定到账户的密钥则完全没有设备数限制——它只在主人登录的地方生效
- 无界面机器也能这样激活:
spu login --email you@example.com登录成功后会自动领取账户名下的许可证并激活本机,--bind-license可顺带把本机已装的密钥绑定到该账户 - Live Sync 全版本可用: RFC 2217 服务器、实时终端、实时中继、实时分享——以及「远端串口 (RFC 2217)」端口类型——不再要求 SPU Pro;免费版全部可用,无界面的
spu --invite也一样。Pro 授权改变的只是每月云流量额度:免费账号每方向 10 MB,Pro 1 GiB,用完后消耗购买的流量包。额度现已真正执行——实时终端或实时中继会话超出额度后以quota_exceeded停止,而不是继续跑。没有 Pro 的副本启动时只恢复 RFC 2217 快捷分享这一类桥接链路,其余链路原样保存、等授权到位再恢复 - 实时分享(Live Share)——把串口分享给没有账号的同事: 实时中继此前要求两台机器登录同一个账号。现在可以为一个已打开的串口签发一张有时限的邀请码:在"云 > 分享串口给访客…"里选有效期(1/4/12/24 小时,默认 12 小时)、可选口令和一句标签,把
XXXX-XXXX-XXXX或那条链接发给同事,他在自己的软件里选"远端串口 (实时中继)"、在"用邀请码加入"里粘贴即可——不需要注册、不需要订阅、不需要绑定设备,流量记在分享方。它与"实时中继"互不隐含:那个开关管的是你自己名下的其他机器,邀请码管的是拿着这张码的这个人、这个口、这段时间。分享随端口关闭、实时终端关闭、退出登录或程序退出而结束;口令连续错 5 次会烧掉这张码;到期的码不再接受新的加入,但不会切断正在进行的会话 - 状态栏的 Live Sync 状态: 状态栏的 Live Sync 格子在空闲时只是入口,一旦本机有任何一项在跑,它就把名字让给状态本身:琥珀色的已分享表示门开着还没人进来(RFC 2217 在监听、邀请码已签发、实时终端或实时中继已开启),橙色加粗的使用中表示有人正在驱动你的串口(只有一位时直接写出是谁,如「访客:张三」或「远端操作者」),红色的未在监听表示 RFC 2217 服务器要的 TCP 端口被占用、这条链路其实没在工作——这种情况此前只有一闪而过的一条提示,之后就再无声息。RFC 2217 服务器现在也算在内:此前状态栏只统计云端的分享与中继,本机开着 RFC 2217 服务器、甚至远端客户端正在占用串口时,状态栏都毫无表示。悬停可看四项各自的状态(哪个端口、哪个监听端口、哪位访客、什么时候接入),点击弹出的菜单上半段列出正在跑的每一项并给出对应的管理入口,下半段仍然是那四项开关
- 无界面机器也能签发:
spu -D /dev/ttyUSB0 --invite直接打印邀请码与链接,--invite-ttl接受30m/4h/1d,--invite-passcode-stdin从管道读口令,Ctrl-C 退出时自动撤销 - 状态栏一键分享——把本地串口变成 RFC 2217 服务器: 此前要把一个串口暴露为 RFC 2217 服务器得走三个对话框:先占一格网格给 TCP 服务端面板、再开"工具 > 桥接"、再在五页编辑器里逐项核对默认值。现在状态栏多了一个 Live Sync(实时同步)入口,点击后三选一:分享为 RFC 2217 服务器、开关实时终端,或分享给访客(Live Share)。选 RFC 2217 只需回答一个问题——监听哪个 TCP 端口(自动建议空闲值),可选地限定允许连接的地址或网段;其余按安全默认值建链。网络端由桥接内置的监听器承担,不再占用网格里的端口位,也不受 16 个端口上限约束;在"工具 > 桥接"里它显示为
TCP :2217(内置),可以像其他链路一样改监听端口、看流量与状态 - 浏览器访客——同事不装软件也能看这个口: 签发邀请码时可以定这张码在浏览器里能做什么:不开放、只看、看并发送、看并发送且可改串口参数(默认只看);另一个开关决定它是否还能在桌面端开一条实时中继(默认可以)。链接点开是一个说明页:这是哪台机器的哪个口、主人在不在线、是不是已经有人在上面、要不要口令;填个名字就进去,进去是一个只属于这个口的终端。无界面用
--invite-web与--invite-no-relay指定同样这两件事。分享对话框与管理列表里会标出谁正从浏览器看 - 一处管完所有访客分享: "云 > 管理访客分享…"列出账户名下每台机器上仍然有效的分享,按机器分组,写明每张码开的是哪个口、谁在上面,只有一个动作:停止。这张列表来自服务器而不是本进程,所以另一间屋子的笔记本上签发的码也在这里,在这里停掉它那边就真的停了。它只要求登录:授权过期的主人依然可以停掉自己开出去的分享;它不签发任何东西
界面改进
- 统一命名: 状态栏 Live Sync(实时同步)入口下四项平级:RFC 2217 服务器、Live Console(实时终端,原云控制台)、Live Relay(实时中继,原云中继)、Live Share(实时分享,原远程协助)。云菜单里的「云控制台」「允许云中继」、端口列表里的「远端串口 (云中继)」随之改名;功能、设置与账号数据不变
- 桥接角标可以直接关掉桥接: 接收区上方那条淡蓝色(有客户端接入时琥珀色)的桥接角标,右端新增关闭按钮:默认不显示,点一下角标才出现,再点它就移除这个端口参与的全部桥接链路并在状态栏说明——"注意到这个口被桥接了"和"把桥接拆掉"是两次分开的点击,不会误触。这也是快捷分享的"停止分享"入口
- 状态栏显示用户名: 状态栏最右边的账户格此前显示登录邮箱,现在显示用户名——那才是账户的名字,也不必把邮箱地址一直摆在别人能看见的地方。点开的账户菜单和无界面的
spu login一并跟随;「我的账户」对话框里邮箱与用户名照旧都列出。用户名为空的老账户仍回落到邮箱 - 许可证窗口重做: "许可证管理"里那张二维码去掉了——它编码的正是旁边按钮已经打开的同一个网址,而那个网址在手机上是死路:下单页给回的是扫码付款的图,没人能用扫过来的那台手机再扫它一次;英文界面还会被硬塞一张微信码。腾出来的地方给了购买入口:一条分隔线、"还没有许可证?"和一个蓝色的"购买许可证…"按钮。默认尺寸也从 606×364 改到 820×520(布局本来就要 755×481),数值列跟着面板伸缩,不再为一张没有内容可滚的表格挂一条横向滚动条
- 购买链接指向 Alithon 自己的下单页: "立即注册"与"许可证管理"里的购买入口此前把非中文用户送到旧的 shareit 商店;现在中文界面走微信支付下单页、其余走 PayPal 下单页
- 状态栏的消息会自己消失,账户格可以点开: 状态栏最左边那条消息此前写上去就不走了——"设置已同步"会在那儿坐一整场,还被每次定时同步重写一遍;这个格子又排在最前面且宽度为零,每说一句话就把端口状态往右推一次。现在每条消息都带类型(信息、警告、错误,决定颜色)和超时,格子挪到端口与流量之后且不再影响其他格子的位置,放不下就省略、完整内容在悬停提示里。同步结果也归到它该在的地方:定时同步成功不再出声,点开账户格就能看到谁登录着、上次同步是什么时候、最近几条消息,以及账户相关的操作
- 收发字节数合并为一格: 主窗口与每个端口的状态栏把 Rx 与 Tx 的计数合并显示在一格里
修复
- 中继错误此前到不了调用方: 服务端的中继错误(端口已被占用、设备未就绪等)与实时终端的错误同形,原来一律被送进设备代理静默丢弃,操作端只能一直等——现在按请求来源分发,失败会立刻显示原因
- 桥接的串口在无人接入时会失聪: 把一个串口对外提供为 RFC 2217 服务器(或桥接到 TCP 服务端)之后,只要还没有客户端连进来,这个串口就再也收不到东西了——键入照样发得出去,设备的回应却永远不显示,只有拆掉桥接才恢复。设备发来的第一个字节就足以触发:它进入出口队列,而向零个客户端广播写出的是零字节,桥接把这个零读成"传输层拒收",于是留住这一帧并给源端加限流——而限流会让整条读取路径停摆,接收区与桥接抽头都走这条路。现在"开着但没人连"与"写失败"被区分开来:无人接入时该帧计入丢弃,而不是把队列卡死等一个可能永远不来的客户端,链路状态也会写明"运行中,暂无客户端连接"。另外,没有 RTS/CTS 的串口本就无法真正限流,这类限流现在会被拒绝——不读串口并不能让设备慢下来,只会把字节丢在驱动缓冲里
- 文件传输结束后"发送文件…/接收文件…"一直灰着: 一次传输之后——无论成功、失败还是取消——"连接"菜单里的发送文件与接收文件始终不可用、"取消传输"始终可用,只有重启程序才能恢复。菜单原先只在传输开始时刷新一次,现在跟随每个端口的传输状态与键盘焦点:传输一结束即恢复,某个端口传输中也不会把另一个端口的发送文件一并灰掉
- 许可证窗口说了假话,也收不下从发票里粘来的密钥: 没装许可证的安装被告知自己持有"个人版"——判断只看了企业版标志,而没有许可证时它本来就是否,从没问过到底有没有许可证;现在写"未激活",并新增一行"状态",直接回答人们打开这个窗口想问的问题:已激活、试用中还剩几天、还是已过期。此前也没有任何办法卸掉一个许可证:卸载按钮的槽函数从 2017 年起就在等一个 .ui 里根本不存在的控件,现在按钮真的有了。密钥输入框则在拒收合法的密钥:长度检查只认 29 位带横杠的写法(而校验本来就先去横杠)、密钥字母表是大写且区分大小写、只裁两端所以邮件客户端带来的换行是致命的——现在统一归一化并回显被接受的写法,两句还会拒绝的提示也改成说清哪里不对(其中一句从来没被 tr() 包住,中文界面会显示英文,还带着拼错的 "licnese")
- 中继来的按键在主人屏幕上一字一行、还带重影: 实时中继把远端操作者的键入一次一帧地送过来,而每一帧都走了 TX 回显、每个 TX 帧另起一行——于是访客敲的每个字符在主人这边独占一行;遇到会回显的设备(任何交互式控制台)还各出现两次,一句 uptime 读起来是六行叠字。中继写入现在交给"本地回显"这个本来就是为按键准备的开关:默认只显示设备回的内容,与访客自己屏幕上看到的一致;想看访客敲了什么,把本地回显打开即可。端口在别人手里这件事本来就有接管提示在说
- macOS 上连接设置最底下一行被切掉: Aqua 控件会画到布局给它的格子之外,而堆叠页面被贴着尺寸提示零边距压紧,最底下那行复选框于是丢了字母的下伸部分——在实时中继与 RFC 2217 页面上表现为"沿用远端串口的现有配置"被削掉一截。现在向样式查询这部分外溢并计入页面下边距,没有外溢的样式不受影响
- 接收设置页的标题被挤成半截: "Tx 时间格式"的标题被压到只剩六分之一行宽、显示成 "Tx Time Forma",两个输入框差了 40 px;自动换行那一行的六个控件想要 740 px 而页面只开 538 px,于是最宽的四个各被裁到 96 px,标题读作 "Auto feed"、"Minimal I"、"Line Mode"。两块都改成网格布局、共用标题列,把页面拉宽或缩到最小都保持完整
- 账户对话框在等待应答时可以被反复点击(其中一种应答还会崩溃): 登录要往服务器跑一个来回,慢链路上好几秒屏幕上没有任何反应,于是被再点一次,而每一次都是一个新的登录请求。现在按下任一按钮,三个按钮一起置灰,页面写明正在做什么("正在登录…""正在发送验证码…""正在创建账户…"),应答或错误到达时恢复;20 秒看门狗兜住那种谁也收不到的应答。另外,在网络应答的处理函数里直接弹消息框是一次 use-after-free——Qt 还在收尾,而模态框跑的嵌套事件循环会删掉那个已交给 deleteLater 的 reply,关掉消息框时必崩——现在所有由应答触发的消息框都推迟到事件循环的下一轮
- 状态栏弹出菜单会把状态提示留在栏里: 点开 Live Sync 格子、指针从"实时终端"移到弹出菜单自己的条目上,Qt 把清除提示发给了弹窗——它是一个独立的窗口,主窗口收不到,那句提示就在状态栏里留一整场,端口状态与流量计数一直被它盖住。现在这类提示统一转发到主窗口的状态栏