ipad + mac mini 自动随航(优化方案)

ipad + mac mini 自动随航(优化方案)

背景

在之前的文章中,介绍了搭建 vscode 服务器,通过 ipad 进行访问的方式,但实际操作下来,发现还是没有办法达到很好的效果。

问题包括:

  • 网页连接 vscode 之后,在不同应用中切换经常会导致重连,也很容易超时重连,用来当玩具可以,但如果要用作实际工作,则发现效率很低。
  • 只能使用 vscode,其他相关联的工具没法使用,同样会导致用 ipad 无法进行顺畅的工作,达不到一台“电脑”的效果

而自己实际上还是在家工作的场景多,更多的时候,只是不想长时间坐在书桌旁,而想“居家移动式”办公,可以瘫在沙发上办公,或者冬天晚上在被窝里。走到书桌旁办公,总有种需要 “正襟危坐” 的感觉。而我只想随手打开笔记本就可以开始干活。

所以我希望用 ipad+键盘,实现在家里能控制mac mini,让 ipad+键盘 变成一个远程客户端,这样就可以避免 ipad os 上各种软件,体验不兼容的问题。

对比

网上搜索相关的指引,基本就是两类,一类是通过 ipad 的随航功能。另一类这是通过向日葵之类的远程软件。

  • 远程软件的方式是更成熟的连接,能够真正用在“生产力”上面,但缺点是要💰,而且自己的电脑也不想装远程控制软件

  • 网上提供的随航的功能方法,还停留在“玩具”阶段,看起来可行,但如果在要用在日常办公上,就不那么理想,原本的随航方案,最主要的问题有两个:

    1. 使用过程中连接断开或者鼠标卡死,这时需要跑到 mac mini 上面重新连接,这种打断在真实工作的场景中,影响是非常大的,直接会让自己无法继续使用 ipad 工作,试想我的活干到一半,然后连接断掉了,还要跑到 mac 边上操作。人都走到 mac 边上了,就直接在 mac 上干活了,可以在家居环境中移动的优势就立马被消灭

    2. 对于每次拿起ipad 想要开始“办公”时,就要先去到办公桌上对着 mac mini 登录,连接,那所谓的“移动性”带来的方便,也同样是如鸡肋一般。

因此本文主要就是在“随航”的方案基础上,通过一些优化策略,实现真正的“居家移动办公”场景。

实现过程

整个实现过程包括几个步骤:

  1. 通过 apple script 脚本,实现自动的打开&关闭随航
  2. 通过 shell 脚本监控当前的显示器状态,实现断开自动重连
  3. 通过 web 服务,实现在 ipad 端主动连接/断开
  4. 通过开机免密登录+crontab,实现开机后自动启动 web 服务

通过上述操作,可以真正除了 mac 开机需要手动在 mac 设备上操作,其他所有操作都可以脱离 mac 设备,在 ipad 上完成。如果 mac 机器常年不关机,且设置了断电后自启动的,那在家里几乎任何时候,都可以把 ipad 等同于 macbook。

step1. 自动打开&关闭随航

这部份的内容,就是参考网上的脚本,当然由于 mac os 版本的原因,这个脚本不一定都能使用。我的mac os 是13.6 到 14.4, 这两个系统的脚本略有差异,具体可以见末尾的 github 链接。

具体要做的事情,就是:

  1. 使用mac自带的脚本编辑器,编写脚本,并进行调试,确保能在自己的系统上自动打开&关闭随航

脚本编辑器:
脚本编辑器

自动开启/关闭随航脚本:
自动开启/关闭随航脚本

这里有几点需要说明:

  1. “随航” 和 “通用控制” 的区别:
    • 通用控制是使用同一键盘和鼠标操控 Mac 和 iPad,简单的说,就是多台设备共享鼠标&键盘,但 mac 还是mac,ipad 还是 ipad,可以理解成用一套蓝牙键鼠,同时连着 mac 和 ipad(或者多台mac)
    • 随航是将 ipad 当作一块屏幕,可以作扩展屏,或者做屏幕镜像。所以我采用的方式,就是把 ipad 做 mac 电脑的屏幕镜像,然后搭配一个连接到 mac 的蓝牙键鼠(或者苹果原装的妙控键盘),实现“屏幕是Mac的屏幕,键鼠也是Mac的键鼠”,四舍五入,这个ipad就是个mac了。
  2. “随航”的各种玩法尝试:
    • 最开始我试着想把 通用控制 + 随航 同时开启,这样不就即共享鼠标键盘,又共享屏幕了么(I have an apple, I have a pen 。。。)。而且早期操作中,的确成功过(貌似触发了什么bug,就是在不同的切换通用控制&随航功能,有概率两个都生效),只是成功率极低。后来升级系统不怎么遇到了。
    • 如果使用的是蓝牙键鼠,那么蓝牙需要连到 mac 上面,这样才能控制 mac,从而实现一个 padbook。这种方式比较好理解,成本也低一些,整个蓝牙键鼠平替就可以了(另外为了移动性能好,最好买类似妙控键盘那种,自带支撑的,如果是屏幕背后需要一个腿来支撑的话,会大大限制移动使用的场景,例如就不能直接把 padbook 放在腿上办公了)
    • 如果使用的是原生的妙控键盘,你会发现,“随航” 其实不仅仅是一块扩展屏幕那么简单。苹果的随航,随航在把屏幕镜像的同时,键盘依旧是可以使用的(也就是键盘同时可以控制mac和ipad,是共用的),而且 apple pencil 也是如此,是 ipad 和 mac 共用,只不过如果是在 mac 上面,pencil 不能画画,写字,只能像鼠标一样进行点击,拖动。遗憾的是,触控板不能做到共用,触控板始终只能控制 ipad。所以如果是 随航+妙控键盘,那么还需要额外加一个蓝牙鼠标,连接到 mac 上面
  3. 妙控方案 & 蓝牙方案的体验对比:
    • 对比 随航+妙控键盘+蓝牙鼠标随航+蓝牙键鼠,妙控方案的好处是体验好,延迟低,在实际使用过程中,几乎感受跟一台 macbook 没有差异,妙控键盘的打字体验也非常舒服,唯一的确定是需要额外加一个鼠标,对场景有一丢丢限制,但不多。
    • 蓝牙方案的优点就是形态上完全等同于一台笔记本,操作上也是如此,不过在延迟上,以及键盘的使用体验上会差一些,触控板移动鼠标可能明显感受到延迟,而且键盘的打字体验也没有妙控键盘好(当然这可能跟我买的是三四百的平价蓝牙键鼠有关,可能买个贵一些的蓝牙键鼠,效果会更好)
    • 也可以把第三方键盘通过蓝牙连接到ipad上,这样延迟和妙控键盘效果一样(同样需要一个鼠标)
  4. 屏幕镜像的配置:
  5. sidecar 脚本相关
    • sidecar 脚本保存到应用程序的目录
    • 在“系统设置--隐私与安全性“中,为 sidecar 脚本增加权限(这里要注意,每次修改脚本之后,要在这里删除旧的脚本,重新添加,否则不生效)
    • 由于后续是通过python脚本触发shell脚本的,所以需要把python和shell,也在“隐私与安全性”中添加权限,添加的方式,可以在命令行终端中,先通过 which python, which sh 找到文件路径,然后用 ln -s python的系统路径 任意自己能访问的路径 建立一个软链接,这样可以在访达中,直接将软链接拖动到系统设置的窗口,就可以了。

到这里,就可以通过手动触发sidecar脚本,触发mac的随航功能了,大部份网上关于随航用法的介绍,也是到这里为止,这部份操作如果遇到问题,可以网上找找资料,应该都可以解决。下面就是自己动手的部分了。

下文中涉及到脚本,请参考文末的github链接

step2. shell脚本自动重连

要想做到真正可用,关键有两步:

  1. shell 脚本能够触发 sidecar 应用程序,代替我们手动触发的动作
    • 网上的有些介绍,会让你将电脑设置成免密登录,然后把 sidecar 脚本设置成开机自启动,这种方法只是“玩具”性质的,因为它只解决了开机的触发的问题,但使用过程中,还是每次断开就需要重连,本质上触发脚本还是需要手动在mac上做,问题没有得到解决
    • 所以我通过命令 osascript /Applications/sidecar.app 触发 sidecar,这样实现了从 shell 启动随航的功能。依赖 shell 的编程能力,就有很大的扩展性了。
  2. 通过shell监控当前是否打开“随航”
    • 要想能够“智能”的自动重连,就离不开对系统状态的监控,所以需要判断当前是否已经启动随航,这里我是通过判断显示器中是否有 Sidecar Display 来判断的,当启动随航之后,mac 系统有两个显示器设备,其中ipad这个显示器就是 Sidecar Display,因此可以通过查看显示器,判断是否启动随航。
    • 命令如下: /usr/sbin/system_profiler SPDisplaysDataType | grep "Sidecar Display" | wc -l

解决上述两个问题之后,剩下的就是简单的shell脚本逻辑了,判断随航是否打开,没有打开就触发脚本打开随航,有打开就跳过。这样脚本就可以一直跑着,就能随时断开随时重连。

step3. 通过web服务,实现ipad端主动触发

虽然通过shell脚本能够实现脚本的自动断连,但始终还是要从mac端发起,ipad只能被动等待mac连接,这样从ipad端使用起来自由度就大打折扣,例如不需要使用mac,想让ipad做回平板,如果还是保持自动重连,就始终会连上电脑。反过来,如果从ipad想切回mac,如果不能从ipad端触发,就还是要去操作mac,就显得不方便了。

所以我在mac上用pywebio简单做了一个web服务,支持“连接ipad”和“断开ipad”功能,这样就可以随时在ipad上,通过浏览器访问工具网页,然后触发连接,或者断开连接。这样即使遇到一些其他的异常情况,基本也可以在ipad端操作,不再需要直接操作mac.

web服务页面

通过将这个web服务加到 crontab 中(同时开启免密登录),则可以实现电脑启动之后,自动启动服务,开启mac之后,等待服务启动,就可以在ipad上去控制电脑是否打开随航,使用起来更加丝滑,而且,通过web服务触发,即使在mac电脑锁屏状态下,只要联网且服务是启动的,就依旧可以触发随航。实际使用起来,感觉更像是在 ipad 上开启一个电脑模式,而不是在 mac 上开启随航。

最终效果

  • 在 ipad 上就可以触发连接或者断开连接,不需要事先连接到 mac mini
  • ipad 断开后,可以自动重连
  • mac mini 只需要确保电脑开启,即使电脑在锁屏登录界面,也可以自动连接

链接

posted @ 2024-04-05 22:17  coreylin  阅读(4115)  评论(0编辑  收藏  举报