Hey, Siri! 帮我关下电脑 – 使用 Siri语音通过 SSH 远程执行指令

2018-10-18 22:04:17 10点赞 97收藏 4评论

1、谈谈 Siri Shortcut 的前世今生

作为以主打优化设备性能为主的 iOS 12,除了一系列看不见摸不着的神经计算能力强化和ARKit API 更新以外,看得见摸得着的,除了旧设备速度提升,最让人兴奋的恐怕就是Siri shortcut了。

Shortcut 有一个中文名字叫做捷径,它并非是 Apple 发明的一套玩法,其 App继承了早先收购的 WorkFlow自动化数据流处理的大部分功能,原本的 WorkFlow允许用户通过调用 iOS 内置的 URL和一些功能接口实现一些繁琐事务的自动化,大大提高了使用iOS 的效率。不过我个人对于手动在手机上执行一连串预先规定好的动作不是很感兴趣,并且自从有了 3D Touch 后,各种快捷操作还算用的舒服,因此没怎么使用 WorkFlow。

但是,我对 Siri 集成 WorkFlow却十分的关注,因为自己一直使用 Apple Watch 上的Siri 开始跑步,十分方便(相比较小米运动需要点开一个带有启动广告的APP,等待超时或者手动点击比一粒米还小的跳过按钮,然后再点击一个比小拇指头还小的图标来到跑步界面,再点击一个硕大的开始而言)。最新版本的watchOS 5 甚至可以自动检测运动状态并且自动开始跑步记录。Siri 用来快速添加闹钟、打电话、添加提醒事项、日程都很方便。这些项目(提醒和日程)通过 Microsoft 的 Exchange 服务可以无缝的和 Windows 8 及以上的 带有 Microsoft 账户的 PC 结合,将你的日程自动显示在锁屏界面,将你的联系人自动同步到“人脉”应用。升级到 iOS12 后,甚至可以直接创建 Things 的 TODO。在之前,必须要通过 Siri 添加提醒事项到默认的提醒事项 APP,然后让 Things 从中导入事项。可以说,继承了 WorkFlow 衣襟的 Shortcut 更加强大和好用了。

2、Siri 更适合于执行快捷方式

我的很多朋友很喜欢使用 iOS,但是却非常讨厌 Siri。他们往往认为和语音助手说话是一件很尴尬的行为。我个人对于语音助手的理解是,它和你按下键盘的快捷键,使用alias 或者 shell/python script 执行一项命令很类似,或者说,语音助手非常适合用来简化这些快捷指令的操作。但是,对于聊天,问问题这种事情,任何脑袋正常的人都不应该假定语音识别背后的机器学习技术在近5年内通过图灵测验。在我的理解中, Siri 并不是一个所谓的语音助手,充其量就是一个能解析语音的随时随地监控麦克风输入流的 Switf/Obj-C 程序以及其背后作为支持的机器学习决策模型而已。

如果按照这种思路看来,Siri 和 WorkFlow真的很搭配,一个是脚本,一个是执行脚本的快捷方式,对于手机这种载体,使用键盘敲 alias 远不如hey,siri 来的自然和方便。自然,你也可以添加捷径到桌面上,手动执行。所以说,自从 WWDC 公布 Siri 和 WorkFlow集成以来,大家都对这个功能保佑很高期望的原因。不过话说回来,捷径毕竟还是一种稍微高阶的操作方法,并且也不是不可替代(多点几下屏幕),最后的结果很有可能搞成3D Touch 那样,没有用过的人觉得不过如此,但是一旦用过并养成习惯后,觉得这东西真的不错(类似的还有 ThinkPad 的小红点,进行大批量文字编辑或者修改代码的时候,Home、End 还有那一堆的快捷键和小红点的效率看起来差不多,都比鼠标高不只一个量级)。

3、使用 Siri 执行 SSH 指令以控制 Windows 电脑

Shortcut 我最喜欢的功能有两个,其一是语音控制开始一项捷径,其二是SSH远程执行命令。SSH 这个不得了,就相当于你可以控制一台功能完备的计算机,然后轻松执行任何脚本和不需要交互的指令。当然,为了用的舒服,你需要能随时连接上这台电脑,也就是这台被控制的电脑要有可用的稳定的公网的IP地址。

毕竟是 Siri,需要 苹果家的设备,手表或者手机或者平板均可,不过考虑到便携性,这里推荐使用手机和手表,Mac 也行:

Apple Watch Series 4智能手表(GPS款 40毫米金色铝金属表壳 粉砂色运动型表带 MU682CH/A)3199元京东去购买

Watch 4

Apple iPhone 8 Plus (A1864) 64GB 深空灰色 移动联通电信4G手机5699元京东去购买

iPhone

控制电脑很简单,如果是传输文件,登录了 QQ 的远程文件助手甚至可以随便扒你磁盘中的文件。如果是为了监控电脑,安全领域的 PulseWay 可以轻松的获取电脑的硬件状态,并且执行 CMD/BASH 命令(免费版可以控制2台设备, Bilibili 视频链接)。

但是,如果要通过 “Hey, Siri,帮我关下电脑“ 这样的方式来完成关闭电脑的动作,这些现有的方案解决就不太灵光了。

因为让被控制的电脑具有一台稳定的公网IP实在是一个困难的事情,退而求其次,让这些电脑默认开机在后台执行一个程序,这个程序每隔几秒自动去服务器查询是否有给自己的命令,如果有就执行,并且报告执行状态这个方法,虽然很笨,但是却很容易实现,只需要这台电脑能够连接到服务器(能上网)即可。

实现的方案也很简单,要么是通过 Web,要么是通过 Socket 底层协议。为了方便,我直接给了客户端(需要控制的电脑)一个数据库连接,让它每隔10s自动到数据库查询是否有需要它执行的命令,如果有,那么就去执行。如果执行完毕,则上报执行状态。

那么如何告诉这台电脑需要关机呢?很简单,因为 Siri shortcut 的 SSH 支持在一台 Linux 设备上执行命令,当 Siri 执行捷径的时候,自动调用这条命令,然后服务端程序自动的向数据库写入指令即可。只要等待10s后,客户端查询到数据表的这行需要自己执行的代码,就去执行即可。这样就完成了 Siri控制电脑远程关机的动作。

大致就是这个样子。实现起来需要一个服务器端的程序和客户端的程序,以及一台带有 MySQL的具有公网 IP 的 Linux 服务器。Linux 服务器很容易获得,某中国人不要隐私云,以及某电信189云、某企鹅云都有学生优惠。某自营最大电商云曾经搞过,现在没了。某最大国内Java厂的云今年甚至搞了一个只要是28岁以下自动算作学生的学生优惠,算下来不到10元一个月,1核2G。U开头的某云每天打电话推销说自己面向所有用户都有10元/月的优惠,不论是不是学生。

客户端和服务端软件我写好了,一个程序,不同命令来调用。Java 程序,需要 Java 1.8 及以上的 JRE 支持,使用了 C3P0 数据源提供长时间的数据库连接保持。使用的话,只需要改改程序同目录路径下的配置文件就好。详细的使用步骤参考

按理说,不论你用 Linux 还是Windows 服务器都可以,只要能跑 Java SE,开了MySQL 的通信端口即可。

一个不折腾的方式:买台1核2G的服务器,安装 Ubuntu 16 64位,到 bt.cn 下载安装宝塔面板,按照步骤,几分钟就搞定了,注意各家云厂商开端口的设置,需要在各家云的管理平台设置,此外要在宝塔安全选项卡设置。之后在宝塔启用 MySQL,新建一个网站,然后创建一个数据库用户名和密码,这样你的ip、username、passwd都有了。

系统上需要拷贝程序到某方便的目录下,方便 ssh 执行。此外,需要下载安装 JRE,对于 Ubuntu 来说,sudoapt-get install open-jre-8 即可。之后在某个数据库下创建一张表,输入一条命令即可,具体参见 github 的说明。之后环境部署就结束了。

在服务端执行 java -jar Siri.jar"shutdown /s /t 300" 即可发送命令。在客户端执行 java -cp Siri.jarcom.mazhangjing.shortcut.dbkiller.Killer 即可检测远程更改。

客户端程序大概占用 60 – 70 Mb的内存空间,主要是 C3P0 和 MySQL 数据库交互占用的,CPU 消耗几乎为 0。

4、iOS 端创建一个捷径以提交命令

Siri 捷径我写好了一个Demo 如下:


效果如下:

Hey, Siri! 帮我关下电脑 – 使用 Siri语音通过 SSH 远程执行指令

Hey, Siri! 帮我关下电脑 – 使用 Siri语音通过 SSH 远程执行指令


在 watch 端的效果如下:

Hey, Siri! 帮我关下电脑 – 使用 Siri语音通过 SSH 远程执行指令

Hey, Siri! 帮我关下电脑 – 使用 Siri语音通过 SSH 远程执行指令

5、使用 Siri shortcut 控制 DSM 关机

最近才上了 J3455 + MS04 的车,组了一台 8T 软RAID1的NAS。装的是黑晖,部署在 Ubuntu 下的 VMWare Workstation 中,千兆网络 Linux 的 SMB/CIFS 读写最高可达 110 MB/S,虚拟机里的群晖因为接的是 RAID1 的直通盘,速度稍慢,CIFS 读写最高只有 80 MB/S。

迎广 MS04 - 淘宝搜索s.taobao.com去看看

因为每次关闭 Ubuntu的时候,DSM那边都会提示经历了非正常关机,因此关机的时候还要到 DSM 的SSH 下手动 sudo 输入密码后执行 poweroff,然后回到 Ubuntu,再执行 shutdown,太麻烦,因此使用了 Siri 捷径来同时关闭虚拟机和服务器。

因为两台都是 Linux 内核,因此关机也不用像 Windows 那样麻烦,直接 SSH 一波走起即可。捷径分享如下,使用时只用替换服务器地址和 DSM 地址,服务器登录名和密码以及 DSM 登录名和密码即可。

Siri 捷径分享如下:

Ps. 程序里还试着通过 JavaRMI 远程方法调用来进行通信,有残留代码。RMI在本机上跑的好好的,但是一到外网就找不到对方,不论开或者不开通信和数据端口,如果有大佬能够帮助解决这个问题就太好了。

PPS. 其实这种方案有暴露数据库用户名和密码的危险,因为客户端保有这些凭证。其实更应该使用 Tomcat 搞一个 Web 服务,使用 Spring、SpringMVC 和 Hibernate搭一个程序,进行鉴权和查询,以及保存命令。如果想搞轻量化的话,使用 Servlet + JSP 甚至不用带 JDBC 甚至都可以做到。

PPPS. 其实使用 Python 等脚本语言写这个小东西更方便,不过我考虑到自己曾经写过几个几千行的小 Python 项目维护起来头大的经历(个人水平问题,不是语言问题),还是用 Java 来的省心些,虽然代码长,但是毕竟大多数代码都是 IDEA 自动生成的Hey, Siri! 帮我关下电脑 – 使用 Siri语音通过 SSH 远程执行指令 。不是有某位哲人曾经说过“灵活性被过分高估,约束是通往解放的必经之路”。当然,我自己水平差是主要原因,不是语言的锅。

展开 收起

Apple Watch Series 4智能手表(GPS款 40毫米金色铝金属表壳 粉砂色运动型表带 MU682CH/A)

Apple Watch Series 4智能手表(GPS款 40毫米金色铝金属表壳 粉砂色运动型表带 MU682CH/A)

暂无报价 去购买

Apple iPhone 8 Plus (A1864) 64GB 深空灰色 移动联通电信4G手机

Apple iPhone 8 Plus (A1864) 64GB 深空灰色 移动联通电信4G手机

暂无报价 去购买

迎广 MS04 - 淘宝搜索

迎广 MS04 - 淘宝搜索

暂无报价 去购买

任天堂 Nintendo Switch《舞力全开 Just Dance》 游戏兑换卡

任天堂 Nintendo Switch《舞力全开 Just Dance》 游戏兑换卡

159元起

《Picsew》iOS数字版软件

《Picsew》iOS数字版软件

暂无报价

Endel 白噪声音频 手机软件

Endel 白噪声音频 手机软件

暂无报价

《kirakira+》 iOS软件

《kirakira+》 iOS软件

暂无报价

《扫描全能王付费版》iOS数字版软件

《扫描全能王付费版》iOS数字版软件

暂无报价

《国家地理 每日精选》iOS数字版软件

《国家地理 每日精选》iOS数字版软件

暂无报价

《Notability》限时折扣 22元/年

《Notability》限时折扣 22元/年

暂无报价

《记账·圈子账本(专业版)》iOS数字版中文软件

《记账·圈子账本(专业版)》iOS数字版中文软件

暂无报价

《航旅纵横PRO》iOS数字版应用

《航旅纵横PRO》iOS数字版应用

暂无报价

《3D绳结》iOS 生活技能类App

《3D绳结》iOS 生活技能类App

暂无报价

《鲨鱼记账本Pro》iOS软件

《鲨鱼记账本Pro》iOS软件

暂无报价

《APlayer》iOS视频播放类App

《APlayer》iOS视频播放类App

暂无报价

《彩云天气Pro》iOS数字版软件

《彩云天气Pro》iOS数字版软件

暂无报价

Ablo 即时通讯手机软件

Ablo 即时通讯手机软件

暂无报价

《CAR++》iOS模拟车辆改装App

《CAR++》iOS模拟车辆改装App

暂无报价

《PeakVisor》iOS户外AR识别App

《PeakVisor》iOS户外AR识别App

暂无报价
4评论

  • 精彩
  • 最新
提示信息

取消
确认
评论举报

相关好价推荐
查看更多好价

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
97
扫一下,分享更方便,购买更轻松