使用脚本掩盖MBP闪烁问题

电脑是 Mac Book Pro 最早一批带Touch Bar 的版本,不仅鸡肋,还过了质保,就开始坏,使用一段时间后,开始频繁闪烁,各种晃眼,维修成本还很高,查了各种资料,想要停用Touch Bar,主要制止闪烁就行,这里根据网上资料,整理

该方法参考了以下文章:

https://medium.com/macoclock/macbook-touchbar-flicker-fix-bafa754aae13medium.com/macoclock/macbook-touchbar-flicker-fix-bafa754aae13

对触控栏的闪烁情况进行了观察,发现触控栏存在三种状态:

  • 工作状态:不断操作电脑时,触控栏处于工作状态,闪烁轻微,影响很小;
  • 中间状态:停止操作电脑1分钟后,触控栏进入中间状态,显示内容与工作状态相同,但闪烁明显,影响较大;
  • 闲置状态:进入中间状态15秒后,触控栏进入闲置状态,不再显示内容,却闪烁剧烈,影响很大。

① 编辑脚本

打开程序 脚本编辑器,选择 新建文稿,编辑脚本如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
on idle
-- 设置触控栏重置时间为59秒
set resetTime to 59

-- 获取电脑闲置时间(纳秒,1E9纳秒=1秒)
set idleTime to (do shell script "ioreg -c IOHIDSystem | sed -nE 's/.*\"HIDIdleTime\" = //p'") as integer
-- 将电脑闲置时间转换为秒
set idleTime to idleTime / 1.0E+9 as integer

-- 如果电脑闲置时间大于等于重置时间,进行触控栏重置
if idleTime ≥ resetTime then
-- 重置触控栏
do shell script "pkill TouchBarServer" user name "[用户名]" password "[密码]" with administrator privileges
-- 等待重置时间后执行
return resetTime
end if

-- 当电脑闲置时间等于重置时间时执行
return resetTime - idleTime
end idle

⚠️ 注意修改以下内容:

  • 修改常量重置时间 resetTime 的值。
    当电脑闲置时间达到该值后,就重启触控栏。
    该值应小于从停止操作电脑开始到触控栏发生闪烁的时间。
    由于我的触控栏处于中间状态时,也有明显的闪烁,所以将该值设置为 59 秒,在触控栏进入中间状态前就对其重启。
    若您的触控栏中间状态闪烁不明显,则可将该值设置为 74 秒,在触控栏进入闲置状态前对其重启即可。
  • 设置系统用户名和密码。
    在重置触控栏时,需使用系统用户名和密码进行授权,所以需将脚本中的 [用户名][密码] 分别替换为您的用户名和密码。

② 导出程序

脚本编辑器 菜单中选择 文件 → 导出,在导出对话框中进行以下设置后,选择 存储 按钮。

  • 导出为:触控栏闪烁修复.app
  • 位置:应用程序
  • 文件格式:应用程序
  • 选项:☑︎ 运行处理程序后保持打开
  • 代码签名:签名以在本地运行

img

导出程序

③ 隐藏程序的运行痕迹(不介意可跳过)

右键生成的 触控栏闪烁修复.app,选择 显示包内容,在 Contents/Info.plist 配置文件中加入配置项 LSUIElement,以隐藏该程序的运行痕迹。

1
2
3
4
5
6
7
8
<plist version="1.0">
<dict>
...
<key>LSUIElement</key>
<true/>
...
</dict>
</plist>

配置项 LSUIElement 的描述名称为 Application is agent (UIElement),类型为布尔型,指示该应用程序是否为在后台运行且不显示在程序坞中的代理应用程序

当然,如果可以接受该程序运行时在屏幕顶部显示的菜单栏和在程序坞中显示的图标,可跳过这一步。

④ 设置程序开机自启动

打开 系统设置 → 设置登录项 → 通用 → 登录项 → 登录时打开,选择程序 触控栏闪烁修复.app

作者:Jqgsninimo
链接:https://www.zhihu.com/question/327169975/answer/2844450021
来源:知乎