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

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

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

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

系统版本: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(应用包名)

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

第一步:确认包名

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

第二步:确认权限名

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);
MacOS 为指定应用添加指定权限(浏览器无法使用摄像头、麦克风终极解决方案)_第4张图片

还有能 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()

你可能感兴趣的:(不务正业系列,macos,macos,摄像头权限,edge,无法使用摄像头)