• 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);"
    
    • 1
    • 2
    • 3

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

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

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

    第一步:确认包名

    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' 
    
    • 1
    • 2

    于是就有了下列语句,给 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);
    
    • 1
    • 2

    还有能 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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
  • 相关阅读:
    毕业设计-机器视觉的疲劳驾驶检测系统-python-opencv
    break,continue
    10KM无人机高清图传通信模组,低延迟、抗干扰,飞睿智能无线MESH组网模块
    gpt-4o看图说话-根据图片回答问题
    开题报告不知道怎么写?
    PHP-FFMpeg 操作音视频
    【Unity3D】Unity与Android交互
    nginx(六十一)proxy模块(二)修改发往上游的请求
    Python还是很迷茫的小伙伴进来,教你用图秒懂Python
    flutter聊天界面-TextField输入框buildTextSpan实现@功能展示高亮功能
  • 原文地址:https://blog.csdn.net/caozicheng1999/article/details/132632178