Category Archives: 我的生活

如何远程给女儿放动画片之iPhone篇

上一篇写了部署动态域名、端口映射、SSH隧道的架设,然后在新电脑上用「屏幕共享」来访问家中的旧苹果电脑。那么如果是在半路上,只有一台iPhone手机,没有电脑在手或者操作电脑不方便,就没法弄了。所以接下来就是解决用手机远程连接的问题。

在手机上策略仍然一样,首先仍然是要在iPhone和旧电脑间架设起SSH隧道,然后通过隧道来访问旧电脑上的屏幕共享接口即可。macOS上系统自带的「屏幕共享」(Screen Sharing.app)本质上就是一个VNC客户端,因此在iPhone上使用一个通用的VNC客户端即可完成访问。

步骤一、在iPhone和旧电脑间建立SSH隧道。

这里需要找到这样一款App,它可以通过RSA密钥对来建立SSH隧道,还要能成为全局代理,因为下一步的VNC客户端需要通过它来转发网络通讯。经过一番搜索和尝试后,找到了「Termius」这款App,选它主要是它不仅能建立SSH隧道,重要的是可以在后台运行。

安装完Termius后,分四步完成设置:

(一)在「Valuts」-「Keychain」中新建一组RSA密钥对。

点右上角「+」按钮选「Generate Key」,Type选「RSA」(其实默认ED25519更好,如有兴趣可自行尝试),点「Save」按钮完成创建。然后长按刚创建的密钥对,选「Edit」,将其中的Public Key复制,发送(通过微信、QQ、iMessage皆可)并保存旧电脑的~/.ssh/authorized_keys中。

(二)在「Valuts」-「Hosts」中新建一个Host:

Label:home-mac
IP or Hostname:example.ddns.com
Use SSH:勾选
Port:35791
Username:YOUR_USERNAME
Password:不要填
Key:刚才创建的密钥

注意:这里的YOUR_USERNAME要换成你的旧电脑上的用户名,后面的example.ddns.com要换成你注册的动态域名。

如果配置成功,在这里点击「home-mac」,就会登录到旧电脑的命令行了。

(三)在「Valuts」-「Port Forwarding」中新建一个配置:

Label:back-to-home-mac
Local Port:5900
Bind Address:0.0.0.0
Intermediate Host:刚才创建的Host
Destination address:127.0.0.1
Destination port number:5900

(四)在「Profile」-「Settings」中,勾选上「Save Location Data」。

这个功能看起来无厘头,但其实是App为了保持住在后台持续运行的一个讨巧之法。如果不开启,一切换到别的App去,刚建立的SSH隧道连接很快就会中断。

一切就绪后,回到「Valuts」-「Port Forwarding」,点击「back-to-home-mac」,SSH隧道就启动了。此时即使退出Termius,在灵动岛或导航栏上会看到它仍在后台运行的状态提示。

步骤二、使用VNC客户端连接回旧电脑。

一般的VNC客户端基本上都可行,比如「RealVNC Viewer」。下面就以它为例,安装完后在Address Book新创建一个配置:

Address:127.0.0.1:5900
Name:home-mac

保存后,点「Connect」按钮即可。顺利的话,此时就会连接上旧电脑了。

至此,所有的配置就已完成。有时在回家的半路上,女儿来微信说要看动画片,我就会掏出手机,打开「Termius」App,点击「Port Forwarding」-「home-mac」启动SSH隧道,然后切到「RealVNC Viewer」App,点击「home-mac」远程连到家中旧电脑,开始给她放动画片。

对了,每次放动画片前,我还会问她喝完今天的牛奶没有,没有喝完牛奶,是不给放动画片的哟。

如何远程给女儿放动画片

家里有一台闲置的旧MacBook苹果电脑,平时会连在电视上给女儿放动画片。在家时我会用手头的新苹果电脑通过「屏幕共享」(Screen Sharing.app),连接上局域网里的旧电脑来操作播放。但如果我不在家,就没办法连回这台旧电脑了。于是我开始研究如何解决这个问题。

最简单的办法莫过于使用第三方的远程控制/远程登录/远程管理类的软件,如TeamViewer。但这类软件一般并不免费且不便宜,或者免费但限制可用机器数量,实在不想折腾时,可作为备选方案。

那么还是从苹果自带的软件入手。既然在局域网中可以使用「屏幕共享」来远程连接,那么只要在路由器上配置一下端口映射,理应就可以从外网来连上旧电脑。查询了一下「屏幕共享」的默认端口为5900,在路由器上配置完端口映射,查询了路由器的公网IP地址,然后在新电脑上打开「屏幕共享」App,输入公网IP,果然成功连上。

但这样把旧电脑的连接端口暴露在公网上,还可以直接通过输入用户名和密码登录,安全性实在堪忧,所以更好的办法显然是建立SSH隧道来实现连接。同时,还可以通过路由器的端口映射隐藏真实的SSH连接端口,并强制要求用RSA密钥验证建立隧道连接,这样在新电脑上只要建立好SSH隧道连接,就可以像在本地网络中一样访问旧电脑的「屏幕共享」了。

其次是公网IP的问题,路由器的公网IP可能会被网络服务商动态更换,因此还需要利用动态域名服务来自动更新公网IP。由于家里的小米路由器支持动态域名功能,只要找一家动态域名商注册个域名即可。

接下来就是详细的流程:

步骤一、在新电脑上创建RSA密钥对。估计大部分程序员已经可以省掉这一步,当然也可以专门再生成一套密钥对。

步骤二、找一家动态域名服务商注册,并部署到路由器中。为了方便下面引用,假设注册的动态域名是example.ddns.com。

步骤三、在路由器上设置端口映射。以小米路由器为例,找到「端口转发」,填上旧电脑的局域网IP地址,外部端口填写一个随机端口号比如35791,内部端口号也填写一个随机端口号比如36922。注意下面步骤中不同地方对应的这两个端口号。

步骤四、配置部署SSH隧道。

在旧电脑上做如下操作:

1、修改sshd服务的配置文件/etc/ssh/sshd_config:

Port 36922  #对应上路由器中配置的内部端口号
PubkeyAuthentication yes  #启用公钥验证
PasswordAuthentication no  #取消密码验证
PermitTunnel yes  #允许建立隧道。

2、添加新电脑上的RSA公钥到~/.ssh/authorized_keys

3、在「系统设置」-「通用」-「共享」中启用「屏幕共享」和「远程登录」。

4、[可选] 打开Terminal或iTerm终端,执行一句命令:

sudo defaults write /Library/Preferences/com.apple.RemoteManagement RestoreMachineState -bool NO

用新电脑远程登录上旧电脑后如果断开连接,旧电脑就会自动锁屏,执行这句命令后,可以确保旧电脑仍会继续播放动画片而不锁屏。

在新电脑上做如下操作:

1、修改~/.ssh/config,添加

Host home-mac
Hostname example.ddns.com
Port 35791
User YOUR_USERNAME
IdentityFile ~/.ssh/id_rsa
ServerAliveInterval 120

注意:(1)35791对应于路由器端口映射处设置的外部端口;(2)要将上面的YOUR_USERNAME修改为旧电脑上的用户名;(3)这里私钥使用的默认路径和名称,如果步骤一中生成了专门的密钥对,这里记得改成相应的路径和名称。

2、创建一个back-home.sh文件,添加下面的脚本代码

!/usr/bin/env bash

ssh -Nv -L 5901:localhost:5900 home-mac

创建完用chmod a+x back-home.sh给文件加上可执行权限,然后执行它就可以建立起SSH隧道了。

步骤五、在新电脑上打开「屏幕共享」App,新建一个连接并输入localhost:5901,然后点连接按钮,如果一切顺利就可以看到旧电脑的屏幕了。

至此,完整的苹果电脑远程控制就已实现。每次当女儿给我发来微信要看动画片时,我就会用新电脑先在iTerm里执行back-home.sh建立SSH隧道,然后再打开「屏幕共享」远程登录回家中旧电脑,给她播放动画片。

不过如果电脑不在身边,或正好在路上,而手上只有一部iPhone该怎么办呢?下一篇继续讲用iPhone远程连回旧电脑的办法。

终于正面对决新冠病毒

2022年12月,新冠病毒爆发的3年后,我终于在北京亲身感受到了它。接下来,计划分几篇文章来记录一下这一波病毒冲击下的真实故事和经验教训。那么先从我们全家人的感染过程说起吧。

第一天——嗓子异常,抗原异常

周四(12-8)的下午,突然觉得嗓子有些不舒服,问家人也都有类似的感觉,甚至还比我严重。

晚饭完等宝宝睡着后,先给我妈做了抗原测试。起初看了单一条的C红线还挺高兴——阴性。没想到过了10多分钟,T红线竟然隐约闪现。虽然很淡,但已经明显可以观察到。至此家里第一个阳性出现,而因为前期的疫情严重,我妈其实已经居家20几天没出门,竟然也还是阳了。

第一支抗原测试阳性

好在我和老婆测试都是阴性,当晚虽然心中忐忑,还是有些暗暗心惊,没想到病毒说来就真的来了。

第二天——发烧,疼痛

周五(12-9),我仍然只是嗓子不舒服,也不觉得疼痛,就是有种说话说久了后的那种沙哑感。但老婆这一天已经不对了,直接开始发烧,头痛,勉强能活动。不过她早上测抗原依旧是阴性。而单独隔离在房间的我妈已经开始了她昏睡、低烧、干咳、头痛、眼痛、鼻痛的一天,还好有储备的泰诺,还能撑过去。而我家宝宝就厉害了,一整天竟然一点反应也没有,依旧的活蹦乱跳。

第三天——高烧,身体酸软

周六(12-10)成了这次感染进程中最艰难的一天。早上起来我就觉得不对劲了,身体感到一阵酸软,头也晕乎乎的。因为宝宝的妈妈和奶奶都已经隔离在房间,症状最轻的我只好戴上口罩在客厅带宝宝。但到了中午已经明显感觉到体温上来了,一测果然已到37.5,马上测抗原,果然T线是秒红,红得发艳。后面整个下午人一直处于这样的低烧状态。傍晚时分,最高烧到了38.4。感觉已经不能再忍的我,吃了一颗对乙酰氨基酚退烧。效果确实明显,40分钟左右,大汗出尽,体温回落,精神状态也恢复回来。

测试液流过T线秒红,红得发艳

老婆这一天基本上已经进入了最严重的状态。一整天的高烧,一度烧至39.2,基本只能全天卧床休息。吃布洛芬退烧,也基本只能降到38.5左右。而我妈则似乎开始有所好转,体温回落,精神状态好了许多,症状开始转为喉咙痛与积痰。而小宝宝还是生龙活虎,既为她高兴,也开始隐隐有些担忧。

第四天——咳嗽,高烧

周日(12-11)三个大人的情况都开始向好。老婆不再持续高烧,基本维持在37-38之间的低烧,总算也可以下床活动了,但咳嗽的症状开始出现。我妈的症状也基本全部转向了咳嗽。而我这一天,也基本不再发烧,也转向咳嗽。这种咳嗽和平常咽喉发炎时不一样,像是喉咙被针突然扎了一下,就开始控制不住地持续咳嗽。感觉是免疫系统在咽喉部位和病毒干仗,然后释放了什么物质刺激到附近的神经,然后身体反射式地引发咳嗽,从而排出混杂着死病毒的痰液。

这一天也开始让人揪心起来,因为宝宝终于还是有症状了。早起她就有点鼻塞,并开始咳嗽,说起来她出生这2年多,我还从来没见她怎么咳嗽过,显然不对劲。到了下午,已经进展到发烧,并且一度烧到了39.1。立即准备给她喂服儿童版泰诺混悬液。虽然她不肯喝,几个大人还是合力强行给灌了进去。用药后体温降至了38左右,午睡醒后还降到过37以下。不过到了傍晚时分,大概是药效已过,体温再次上升,又来到了38.5,不得不再次强行喂服儿童泰诺,到睡前体温也再次得到控制。这晚宝宝睡前没有像往常一样在小床上乱滚一阵,几乎是倒头即睡,显然是身体太过不适。这一夜不断醒来给她测体温,基本一直维持在38左右,没有再高,也没有降到正常。

第五天——持续咳嗽

周一(12-12)三个大人基本上已能恢复平常生活状态,除了那持续不断地剧烈咳嗽。不知道这一天我们身体干死了多少病毒,也不知道咳出了多少病毒,总之就是三个人轮流持续地咳嗽、咳痰、喝水、恢复正常,再咳嗽、再咳痰、再喝水、再恢复正常。

焦点还是在宝宝身上。从6点她就不肯再睡了,一测体温又到了39.2,把泰诺悄悄弄到吸管杯里骗她喝了一口,她发觉不对后怎么也不肯再喝。这一口也还起了点效,7点时体温也回到了38.4,但倔强的她也不睡了,非要一直坐着。持续到7点40分,体温再次回升至39.2,决定还是要采取强制措施,几个大人再次强行将药灌进了她的嘴里。喝完药,她再也支持不住地睡着了。后面一整天始终处于低烧状态,在37.8-38.3之间徘徊,也没有再给她喂药。

第六天——依旧咳嗽

周二(12-13)咳嗽继续成为日常,每当你感觉这个症状已经基本好转的时候,总能再给你安排一次剧烈的突袭。我妈作为咱家的首阳,又测了一次抗原,结果还是深红,我们也不再浪费抗原了,静待症状彻底消失再说。

宝宝这一天也终于不再发烧了,除了偶尔轻微的咳嗽,这个可爱的小宝贝又回到了活蹦乱跳的状态,真为她高兴!

第七天——仍然咳嗽

周三(12-14)所有四个人都还会咳嗽,但宝宝是最轻的。胜利就在眼前。

第八天——转阴

周四(12-15)早上再次测试抗原,我仍旧还是阳性,但我妈已经转阴了!历经整整一周的病程后,终于重现一条杠。我和老婆还在继续咳嗽中,仍然阳性也不意外了,好在咳嗽的频次已经明显降低。从发烧测出阳性到转阴,看来满七天还是一道槛,还是得过。

终于出现第一支转阴的抗原测试

估计明天我和老婆都会转阴了,宝宝虽然没有给她测,但她早已恢复那个生龙活虎的状态。就目前情况来看,儿童对病毒的反应相对还是小的。

至此,这一波新冠病毒奥密克戎变种的感染,在我家算是要走入尾声了。北京这一波疫情高峰真的是来得又急又快,只是没想到我们家真的这么快就全被感染上了。不过好的一面是,因为自然感染而获得的免疫力,可以保护我们几个月内免受疫情之苦了。某种程度上,也是「早感染,早解脱」吧。

接下来,还准备再复盘一下这次感染前的各种准备工作,因为几个关键时点没有耽误,避免了各种麻烦。

且待我随后更新。

更新@20221216:第九天,周五(12-16)。如预期的那样,下午做抗原测试,我和老婆顺利转阴性了。

爸爸已经走了一个月了

爸爸已经走了一个月了。

无论如何我也想不到,一场普通的细菌感染会引致感染性心内膜炎,然后就这样夺走爸爸的生命。5年前还算成功的心脏手术,5年后仍然没有让爸爸的心脏抵抗住所有侵袭。

爸爸住院治疗的那一个月,每天都通过视频通话和他联系,查各种资料,给他分析病情,讲解检查报告上的数字,每天都告诉他指标在向好,疏解他的担忧和压力。

进入加护病房前的那个晚上,他突然出现呼吸困难,看到他大口大口地喘气,并伴随着大汗、咳痰,我的心像被刀刮着,但绝不能表现出忧虑,要给他信心,哪怕知道他的心脏已进入心衰的阶段。

那是最后有机会和他说话,即使也是隔着手机屏幕。进入加护病房两天后,妈妈突然打来电话,泣不成声地告诉我爸爸心脏突然停跳,正在抢救。

可惜抢救的努力失败了,奇迹没有发生,爸爸在6月14日的下午离开了这个世界。

失去至亲的痛,只有在失去的那一刻才能真正体会。在回家的火车上我痛哭流涕,难以自已。回家的路走得太少了,以为有的是时间,可有些事却是再也没有机会。

回到家,家里还堆着爸爸住院前给他买的牛奶和气泡水。一想到以后他再以喝不到我给他买的水了,眼泪就忍不住流了下来。

家里的点滴都是回忆,爸爸用的茶杯,种的兰草,墙上的照片。一想到这些都是最后的遗留,心里都无比的难受。

爸爸辛苦工作了一辈子,身心都太累了。累垮的心脏在退休后一再遭受重创,想到爸爸承受的这些磨难,真的很难过,心绪也难平。惟愿天国里再没有这些痛苦。

爸爸走了,如今更加体会到他一直扛着的家庭责任。惟有做好所有事情,照顾好所有家人,才不辜负他的期待。

爸爸走了,但无数个回忆的片段不会磨灭,无数个相处的瞬间历久弥新。对你的思念不会停止,你未竟的心愿我会一件一件为你完成。

爸爸,你依旧还在,你并未走远。你在天上,也在我心里。