laekov 在研究如何用手机远程开关家里的台灯的时候发现了 ios 里 shortcuts 这个神奇而好用(功能上) 的东西. 于是寻思着可以用 shortcut 解决手机/iPad 和 linux 桌面机之间文件和文字传输的问题, 于是进行了一些尝试.

为什么要上 AirDrop

因为它香啊. 可以在不同设备之间快速地传输文件.

比起开个微信传 / slack 传 / telegram 传这种还要让数据去地球另一端绕一圈的传数据方法, airdrop 它不用开聊天软件, 而且速度更快.

但是 AirDrop 的局限在于只能在 apple 设备之间使用. 对于桌面工作环境, laekov 还是更喜欢 linux (debian) + KDE, 用起来更爽一些. 所以每次在 desktop 和手机之间传输消息就成了一件非常麻烦的事.

如果是台式机, 不同的台式机, 台式机和笔记本, laekov 惯用 scp 进行文件传输. 但是 ios 下不存在一个好用没广告不收钱的 scp 软件. 但是 shotcuts 支持 run script over ssh, 就可以解决这个问题了.

Run script over ssh

Shortcuts 提供的非常好的一项功能叫 run script over ssh. 这理论上只要有一台能 sshd 的主机, 就能干任何事.

当然一个问题是如果要和自己的 host p2p 地共享文件, 那就必需要知道 host 的 ip. 对于我自家的 wifi 热点, 直接改 dhcpd 的配置来获取不变的 ip 就可以了. 但是如果是在外面, 情况会变得比较麻烦. 如果电脑根本就没网咋办? 也许可以先拷到 cloud 上? 但是这样又违背了直接传输的初衷. 所以如果要买非苹果的笔记本移动起来用的话, 还是会比直接 airdrop 要麻烦一些.

因为 shortcut 定位是自己用的小程序, 所以直接把 ip 和用户名密码固定写好就可以了.

比较迷惑的是 “输入”. 其实这里的 “输入” 一项意思就是 stdin.

mobile to host

shortcut 可以作为一个分享选项出现在 ios 的分享列表里, 并把分享的东西作为输入文件. 这就非常好办了.

先把输入文件的内容 base64 encode 起来.

然后使用 run script over ssh, 把刚刚 encode 好的东西 base64 -di 写到想要的位置就可以了.

对于 handsoff, 也就是共享剪贴板, 因为文字没有 “share” 这个选项, 只能 copy, 所以要手工再加一项 share clipboard, 和之前原理一样, 只是输入变成了剪贴板.

host to mobile

目前只实现了文字(链接)从剪贴板拷到手机. 使用的是 X11 的 xclip -o, 可以直接把剪贴板上的东西拷过来.

传文件的麻烦之处在于还要选择在哪个应用里打开? laekov 思考了一下目前暂时没有把文件从电脑传到手机本地存储这样的需求, 所以就还没做. 做起来应该也不麻烦.

性能

这种把 ssh 当 scp, 从局域网走一遍的做法当然是比 wifi direct 的 airdrop 要慢的. 而且 shortcut 使用的 ssh 客户端自带几秒的延迟, 并不是很快. 但是相比之前使用 im 软件传输的方法, 从理论和实践上都是更快的.

Summary

使用 ios shortcut 里提供的 run script over ssh 可以实现局域网内的很多操作, 包括本来属于苹果独占生态的 airdrop 和 handsoff, 也可以部分地被替代. 非常令人开心.

于是 laekov 觉得下一台随身笔记本电脑买个 ryzen 本也不错? 但是还是想等 arm 的 macbook. ovo.


Historical Comments

laekov at 2021-08-26T10:18:28

这个 summary 是一个 flag. 一年多之后, laekov 依然既没有买 ryzen 的办公本, 也没有买 arm 的 macbook. ovo