MacOS 为指定应用添加指定权限(浏览器无法使用摄像头、麦克风终极解决方案)

起因:需要浏览器在线做一些测评,但我的 Chrome 没有摄像头/麦克风权限,并且在设置中是没有手动添加按钮的。

我尝试了重装软件,更新系统(上面的 13.5 就是这么来的,我本来都半年懒得更新系统了),都没有任何用。

系统版本:MacOS 13.5.1(需要开启 sip,可参考 macOS 开启或关闭 SIP - 少数派 (sspai.com)

思路来源:https://blog.csdn.net/cneducation/article/details/111403294 ,但这篇在新版本已经失效了,数据表格式和一些值的含义做了一些修改,所以,我这里提供的语句,也并非一定可以执行。本篇后面讲简单讲述下原理,只要知道了原理,只要存储方式没有大更改,都没问题。

例如:向 Chrome 添加摄像头、麦克风权限

/usr/bin/sqlite3 ~/Library/Application\ Support/com.apple.TCC/TCC.db "INSERT INTO access VALUES('kTCCServiceMicrophone','com.google.Chrome',0,2,2,1,NULL,NULL,NULL,'UNUSED',NULL,0,1637381304);"

/usr/bin/sqlite3 ~/Library/Application\ Support/com.apple.TCC/TCC.db "INSERT INTO access VALUES('kTCCServiceCamera','com.google.Chrome',0,2,2,1,NULL,NULL,NULL,'UNUSED',NULL,0,1637381304);"

想知道原理,就继续往下看吧,下面路径中保存着的 SQLite 数据库文件就是 MacOS 的权限配置信息

~/Library/Application Support/com.apple.TCC/TCC.db

使用 PRAGMA table_info(access) 可以看到表结构,重要的就两个 service(权限名称), client(应用包名)

第一步:确认包名

  1. 首先要打开访达,点击左侧应用程序,找到要增加权限的 app
  2. 右键,显示包内容,进入 contents ,找到 info.list
  3. 定位到这一行 <key>CFBundleIdentifier</key>,下面的 <String> 标签里的内容就是我们要找的包

第二步:确认权限名

kTCCServiceCamera 是摄像头权限,kTCCServiceMicrophone 是麦克风权限,整体可读性还是很高的,我根据设置中的权限推测出下表,有几个不确定

权限服务解释
kTCCServiceAddressBook访问通讯录的权限。
kTCCServiceAppleEvents发送和接收 Apple 事件的权限。
kTCCServiceBluetoothAlways永久访问蓝牙设备的权限。
kTCCServiceCalendar访问日历的权限。
kTCCServiceCamera访问摄像头的权限。
kTCCServiceFileProviderDomain访问文件与文件夹权限。
kTCCServiceFocusStatus
kTCCServiceLiverpool
kTCCServiceMicrophone访问麦克风的权限。
kTCCServicePhotos访问照片库的权限。
kTCCServiceReminders访问提醒事项的权限。
kTCCServiceSystemPolicyDesktopFolder访问桌面文件夹的系统策略权限。
kTCCServiceSystemPolicyDocumentsFolder访问文稿文件夹的系统策略权限。
kTCCServiceSystemPolicyDownloadsFolder访问下载文件夹的系统策略权限。
kTCCServiceSystemPolicyNetworkVolumes访问网络卷的系统策略权限。
kTCCServiceSystemPolicyRemovableVolumes访问可移动卷的系统策略权限。
kTCCServiceUbiquity

有了包名和权限名就能唯一定位一个应用程序和一个权限了,接着,剩下的值找已经有摄像头/麦克风权限的软件抄一抄

SELECT * FROM access where service = 'kTCCServiceMicrophone' 
SELECT * FROM access where service = 'kTCCServiceCamera' 

于是就有了下列语句,给 chrome 添加摄像头/麦克风权限

INSERT INTO access VALUES('kTCCServiceMicrophone','com.google.Chrome',0,2,2,1,NULL,NULL,NULL,'UNUSED',NULL,0,1637381304);
INSERT INTO access VALUES('kTCCServiceCamera','com.google.Chrome',0,2,2,1,NULL,NULL,NULL,'UNUSED',NULL,0,1637381304);

还有能 run 的 python 代码我放在这了,这个是给 edge 加摄像头权限的,根据需要自行更改

import sqlite3

# 连接到 SQLite 数据库文件
conn = sqlite3.connect(r'/Users/xxx/Library/Application Support/com.apple.TCC/TCC.db')  # 替换 'example.db' 为你的数据库文件名

# 创建一个游标对象来执行 SQL 查询
cursor = conn.cursor()

# 执行 SQL 查询
# cursor.execute("""SELECT * FROM access where client = 'com.tencent.meeting' """)  # 替换 'your_table_name' 为你的表名
# cursor.execute("""SELECT * FROM access where client = 'com.microsoft.edgemac' """)  # 替换 'your_table_name' 为你的表名
# cursor.execute("PRAGMA table_info(access)")
cursor.execute("""INSERT INTO access VALUES('kTCCServiceCamera','com.microsoft.edgemac',0,2,2,1,NULL,NULL,NULL,'UNUSED',NULL,0,1637381304);""")
conn.commit()  # 提交事务

# 获取查询结果
result = cursor.fetchall()

# 遍历结果并处理数据
for row in result:
    print(row)  # 在这里你可以根据需要处理每一行的数据

# 关闭游标和数据库连接
cursor.close()
conn.close()
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值