前言

小米pro的Hackintosh方案挺香的,用了也有8个月了,还是挺稳定的。

但是其中有两个很操蛋的问题:

  • 内置蓝牙无法使用
  • 无法驱动内置Wi-Fi

由于不想硬改,作出一些不可逆操作,所以以上问题均采用USB方案解决。

  • Wi-Fi解决方案也比较完美了,使用Comfast的CF-811AC可支持5G网络,搭配GitHub上的驱动使用,效果极佳。

  • 蓝牙,当时随便在淘宝买了个比较mini的USB蓝牙(加搜黑苹果关键字),倒是能用,但睡眠唤醒(设备断电)之后(手动关闭亦是如此),会导致无法使用,但如果重新插拔就又能正常使用了。(可能是驱动问题)

所以为了让蓝牙正常的工作,而又不希望每次都进行物理插拔(一点都不geek),就诞生了现在的想法:

  • 使用虚拟机模拟插拔!

正文

首先是会导致蓝牙翻车的情况有:

  • 长时间的睡眠唤醒
  • 手动关闭蓝牙(无法再打开)

睡眠唤醒的话,直接模拟插拔就OK。

而手动关闭蓝牙,会在重新插上的时候,系统会根据之前关闭的状态再一次把蓝牙设备关闭(关闭就翻车了),形成了死循环。

所以这时需要在系统里,将蓝牙开关打开;

可以使用blueutil(终端下的蓝牙工具)进行打开操作。(拒绝手动操作)

模拟插拔使用PD虚拟机,其SDK极其完善。(在.app/Contents/MacOS内的命令行工具)

代码

shell脚本的语法十分诡异,查了好久才能写出个判断、循环语句。(???)

  • 将以上所有内容结合,最后得出以下结果:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#!/bin/bash# 设置变量
program="/Applications/Parallels Desktop.app/Contents/MacOS/prlctl"
vm="Windows 10"
device="CSR8510 A10"
vm_app="$HOME/Parallels/$vm.pvm/$vm.app"# 重置蓝牙开关(后台运行以缩短时间)
{/usr/local/bin/blueutil -p 0 2> /dev/null/usr/local/bin/blueutil -p 1 2> /dev/null
} &# 等待PD启动
start=false
while true; dostatus_content=$("$program" status "$vm" 2>&1)if [[ "$status_content" =~ "Unable to connect to Parallels Service" ]]; thenif [ !$start ]; thenstart=trueopen "$vm_app"fiecho "Waiting PD Service Start..."sleep 0.5elif [[ "$status_content" =~ "$vm" ]]; thenbreakfi
done# 获取VM状态
echo $status_content
status=$(echo "$status_content"|awk '{print $NF}')[ "$status" == "suspended" -o "$status" == "stopped" -o "$status" == "paused" ]
need_resume=$?# 开启VM
if [ $need_resume -eq 0 ]; then"$program" resume "$vm" 2> /dev/null
fiwhile true; dostatus_content=$("$program" status "$vm" 2>&1)if [[ "$status_content" =~ "resuming" ]]; thenecho "Waiting VM Resuming..."sleep 0.5elif [[ "$status_content" =~ "running" ]]; thenbreakfi
done# 模拟USB插拔
"$program" set "$vm" --device-connect "$device"
"$program" set "$vm" --device-disconnect "$device"# 根据操作前状态决定是否暂停VM
if [ $need_resume -eq 0 ]; then"$program" pause "$vm"
fi

重启Usb蓝牙设备(PD虚拟机模拟插拔)相关推荐

  1. USB及手机平板设备插拔响应解决方案

    USB及手机平板设备插拔响应解决方案 (一).基本原理:WM_DEVICECHANGE消息响应 一般WM_DEVICECHANGE只发给顶层窗口.你可以自己创建一个隐藏的顶层窗口来接收这个消息. (二 ...

  2. 插拔usb设备计算机管理无反应,插拔USB设备引起死机蓝屏0x000000FE分析解决措施...

    我们操作电脑故障中最常见的那就是蓝屏,导致蓝屏的原因有很多,更新驱动.安装软件.系统补丁.甚至外接USB设备等等都会有可能导致蓝屏.今天介绍的蓝屏故障0x000000FE就是外接设备USB所引起的故障 ...

  3. C#监视USB设备插拔动作

    参考:https://docs.microsoft.com/zh-cn/windows/desktop/DevIO/device-management-messages 1.编写USBMonitor处 ...

  4. 增加 addDataScheme(file) 才能收到SD卡插拔事件的原因分析 -- 浅析android事件过滤策略...

    http://blog.csdn.net/silenceburn/article/details/6083375 =========================================== ...

  5. 模拟usb重新插拔_Android 10带来黑科技 检测手机USB接口是否有液体或者是否过热...

    谷歌昨天正式发布Android 10手机操作系统,同时谷歌全系列三代Pixel智能手机均可升级到Android 10正式版,而参与Android beta测试项目的智能手机厂商也同时为旗下部分智能手机 ...

  6. 一插usb接口计算机就重启,电脑故障分析:主机一插USB设备就死机,故障原因令人很无语...

    原标题:电脑故障分析:主机一插USB设备就死机,故障原因令人很无语 Hello大家好,我是兼容机之家的小牛! 最近有粉丝的电脑遇到一个奇怪的问题,一插USB设备大概率的死机,有时候电脑还会自动重启! ...

  7. 使用libusb检测USB设备插拔状态

    libusb是一个提供USB设备访问的跨平台用户模式程序库.该项目最新网址:http://www.libusb.info, 支持主流的操作系统:Linux.Mac OS X. Windows.Open ...

  8. 关于iar加st-link,报出SWIM error [30200]错误,我自己处理的方法,usb重新插拔

    关于iar加st-link,报出SWIM error [30200]错误,我自己处理的方法,usb重新插拔

  9. windows快捷键失效 - 重启无效 - 插拔键盘解决

    被windows快捷键失效问题折磨了很久,快捷键都失效了,包括: windows + e windows + r windows + l 等等,尝试修复注册表,尝试设置"关闭Windows键 ...

  10. java 监控usb端口插拔_监控USB设备插拔

    最近做了UKey加密中设计到USB设备. 因UKEy是用来加密和执行PC与项目间通信加密的介质.从作用范围来讲不是传统意义上U盘作为存储介质来使用.其实熟悉网银驱动DR应该了解.在网银系统安全上一个最 ...

最新文章

  1. paramiko监控 windows服务器 被监控服务器只需要安装openssh服务即可基于wmic完成大部分监控...
  2. python - DBUtils 连接池减少oracle数据库的连接数
  3. 为什么说 Java 中只有值传递?
  4. Linux疑难杂症解决方案100篇(十三)-TCP中的拥塞控制
  5. 在移动了用户数据时Android平台的路径设置
  6. 28个不得不看的经典编程算法!!
  7. JVM(一)史上最佳入门指南
  8. 攻防世界 适合做桌面_网络安全工程师教你:如何使用Kali Linux进行渗透测试与攻防实战...
  9. linux命令详解(arm交叉编译器)
  10. OPENSSL编程 第二十章 椭圆曲线
  11. c++中的list用法[转]
  12. mysql驱动包放在ecplise哪里_eclipse导入mysql jdbc驱动包的具体步骤及注意事项
  13. 使用MobileTerminal修改越狱后的root密码
  14. c语言程序求对称矩阵,C中使用CBLAS/LAPACK的对称矩阵求逆
  15. ae怎么卸载已经安装的插件_ae红巨人插件卸载教程!
  16. 高性能可扩展mysql(电商数据库设计构思)
  17. matlab 模拟电子仿真,基于MATLABSimulink的模拟电子电路仿真
  18. C++ 算术平均数及几何平均数
  19. 开学季,中学生用什么样护眼台灯好?中学生用护眼台灯排行
  20. 基于微信小程序的驾驶证模拟考试系统的设计与实现

热门文章

  1. windows网络和共享中心“查看基本网络信息并设置连接”为“未知”的解决方案...
  2. html搜索引擎关键词,如何通过JavaScript获取搜索引擎搜索关键词
  3. 360自动收录js代码如何添加
  4. 学到了林海峰,武沛齐讲的Day17-5 内置函数
  5. HDS F900装机小结
  6. 使用php语言制作水印
  7. 新版男神女神完整投票系统源码V5.5.21版本
  8. 二叉搜索树的删除操作详解,图文并茂,化繁为简
  9. vue+eleme upload 上传图片(含gif动图) canvas压缩,base64转blob对象
  10. 如何xp计算机每天定时关机,WindowsXP电脑可以设置定时关机方法