1070 字( 3 分钟阅读 )

在MacOS的使用过程中偶尔会遇到App需要权限,但在系统偏好设置-安全性与隐私-隐私的权限中无法找到对应的App。大部分情况下,点击+按钮手动添加App并勾选便可解决问题。如果遇到了无法添加App的情况(包括没有+按钮、App未显示)就需要使用终端手动添加App权限。

简单摸索macOS管理App权限的方式,会发现App权限会被写入名为TCC.db的数据库的access表中,这个数据库有两个:

  • ~/Library/Application\ Support/com.apple.TCC/TCC.db,用于存储用户相关的权限,可以直接用root权限修改。一般不会出问题,也不需要手动添加
  • /Library/Application\ Support/com.apple.TCC/TCC.db,用于存储系统权限,需要关闭系统完整性保护(SIP)才能修改。绝大多数手动添加的情况都需要修改这个文件

本文将以QQ和腾讯会议的屏幕录制权限为例,这一权限需要关闭SIP后修改系统权限数据库。

环境

作为参考,作者使用的环境如下:

  • macOS Monterey:12.0.1
  • QQ:6.7.5
  • 腾讯会议: 2.2.24

步骤

禁用SIP

  • 关机
  • 长按电源键,直到显示进入恢复模式
  • 选择实用工具-终端
  • 执行以下命令
    csrutil disable
    
  • 重新启动

添加App权限

  • 用自己喜欢的方式打开终端(如果找不到的话请在启动台中搜索)
  • 输入命令,权限和包名的解释请见下文
    sudo /usr/bin/sqlite3 /Library/Application\ Support/com.apple.TCC/TCC.db "INSERT or REPLACE INTO access VALUES('${权限}','${包名}',0,2,4,1,NULL,NULL,NULL,'UNUSED',NULL,0,1637381304);"
    
  • 操作完成后,在系统偏好设置-安全性与隐私-隐私中可以看到权限所对应的App,如果还是没有效果的话请取消勾选后再次勾选
  • 尽可能重新启动App

权限和包名两个变量请自行根据需求替换:

  • 权限:辅助功能kTCCServiceAccessibility、摄像头kTCCServiceCamera、输入监听kTCCServiceListenEvent、麦克风kTCCServiceMicrophone(请修改用户数据库)、录制屏幕kTCCServiceScreenCapture、完全磁盘访问权限kTCCServiceSystemPolicyAllFiles
  • 包名:在访达中找到应用程序文件后(一般位于应用程序),右键选择显示包内容,使用文本编辑器打开Contents/Info.plist,找到<key>CFBundleIdentifier</key>,下面一行在<string></string>中间的便是包名

实例

QQ 截屏

QQ除了App本身以外,在Contents/Library/LoginItems中还附带了一个名为QQ jietu plugin的子App,两者都需要加上权限:

# QQ屏幕录制权限
sudo /usr/bin/sqlite3 /Library/Application\ Support/com.apple.TCC/TCC.db "INSERT or REPLACE INTO access VALUES('kTCCServiceScreenCapture','com.tencent.qq',0,2,4,1,NULL,NULL,NULL,'UNUSED',NULL,0,1637381304);"
# QQ jietu plugin屏幕录制权限
sudo /usr/bin/sqlite3 /Library/Application\ Support/com.apple.TCC/TCC.db "INSERT or REPLACE INTO access VALUES('kTCCServiceScreenCapture','FN2V63AD2J.com.tencent.ScreenCapture2',0,2,4,1,NULL,NULL,NULL,'UNUSED',NULL,0,1637381304);"

腾讯会议 共享屏幕

腾讯会议除了App本身以外,在Contents/Frameworks/WeMeetFramework.framework/Versions/3.1.2.424/Frameworks/WeMeet.framework/Versions/A/Resources中还附带了一个名为腾讯会议-辅助服务的子App,两者都需要加上权限:

# 腾讯会议屏幕录制权限
sudo /usr/bin/sqlite3 /Library/Application\ Support/com.apple.TCC/TCC.db "INSERT or REPLACE INTO access VALUES('kTCCServiceScreenCapture','com.tencent.meeting',0,2,4,1,NULL,NULL,NULL,'UNUSED',NULL,0,1637381304);"
# 腾讯会议-辅助服务屏幕录制权限
sudo /usr/bin/sqlite3 /Library/Application\ Support/com.apple.TCC/TCC.db "INSERT or REPLACE INTO access VALUES('kTCCServiceScreenCapture','com.tencent.wemeet.WemeetLauncher',0,2,4,1,NULL,NULL,NULL,'UNUSED',NULL,0,1637381304);"

发布

本篇文章还由作者发布在以下平台:

留下评论