无需重启解决macos屏幕镜像概率性无法发现第三方无线投屏器问题

问题

之前一段时间,我在macOS上切换WIFI后,再点击屏幕镜像,向第三方无线投屏器进行投屏,发现时不常会出现看不到第三方无线投屏器的情况。每次出现这个问题,我发现重启都能解决。但是这个操作实在是太重了,能不能不依赖重启来解决这个问题呢?

尝试

根据我之前的经验,苹果的系统服务一般都是通过服务框架进行调用,其后端一般都对接到用户态的服务进程。

比如之前我曾经遇到过切换外接显示器或者休眠唤醒后,我听不到Chrome的标签页通过HDMI输出来播放声音,此时我就使用活动监视器结束掉coreaudiod进程,可以发现coreaudiod自动重启马上又出现了,此时Chrome也可以正常通过HDMI播放声音了。

那屏幕镜像是否也可以通过同样的思路来解决呢?

于是我开始查找与屏幕镜像有关的进程。根据已有的经验,苹果的投屏是基于AirPlay实现的,那进程中会不会带着airplay的呢? 于是我在活动监视器中搜索airplay,果然发现了3个进程

其中AirPlayUIAgent看名字似乎是与界面相关的,并且它的执行用户是我自己,AirPlayXPCHelper一看就是用于跨进程调用的服务辅助进程,并且它的执行用户是root。AirPlayXPCHelper成为了我进行操作的候选进程。

于是接下来我尝试结束AirPlayXPCHelper。结束过后,该进程自动启动了。再次点击屏幕镜像,发现第三方无线投屏器重新出现在了列表中!

后记

接下来,点击第三方无线投屏器,投屏正常!至此问题解决。

这次的操作再次印证了之前的经验,一般的异常都是由于服务跨进程调用异常导致的,此时一般都是跨进程调用的服务后端未及时响应或响应了错误导致的,此时结束此进程让系统的守护进程重启后端服务进程,问题一般会得到解决。

参考

发表评论

为防机器,验证码请直接输入4个数字1

*