Big Sur+VSCode 환경에서 OpenCV의 VideoCapture 클래스를 사용하여 카메라에 접근하려고 하는데 권한이 없다고 나온다.

권한을 부여하기 위해 System Preferences > Security & Privacy > Privacy > Camera 탭 을 열어서 애플리케이션 목록을 확인해도 VS Code는 Camera 관련 앱이 아니기 때문에 목록에 나오지 않는 듯 하다.

macOS에서 애플리케이션의 권한목록은 데이터베이스로 관리 되고 있다. 이 데이터베이스 파일에 직접 접근하여 문제를 해결할 수 있다.

데이터 베이스 경로는 다음과 같다.

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

이 파일 경로에 접근하기 위해서는 Full disk Access(전체 디스크 접근 권한) 이 필요하므로 사용하는 터미널 애플리케이션에 권한을 부여해야한다. 

System Preferences > Security & Privacy > Privacy > Full Disk Access 탭으로 이동하여 권한을 부여하도록 하자.

나의 경우 iTerm을 사용하지만 기본 Terminal.app을 사용하는 경우 다음 스크린샷처럼 권한을 부여하면 된다.

이제 터미널에서 다음 명령어를 입력하여 Finder를 통해 디렉토리에 접근하자.

> open ~/Library/Application\ Support/com.apple.TCC/

TCC.db를 복사하여 붙여넣은 뒤 TCC.db.bak으로 이름을 변경하자. 

TCC.db.bak을 만드는 이유는 TCC.db에 권한 관련해서 레코드를 삽입할 예정인데 이 파일을 망치면 돌이킬 수 없는 상황이 초래할 수 있으니, 안전하게 원본 데이터베이스 파일을 복사하여 백업 파일(TCC.db.bak)을 만들어 두고자 함이다.

위 작업은 Finder로 접근하지 않고 터미널에서 간단히 해결할 수도 있다. 

> cd ~/Library/Application Support/com.apple.TCC
> cp TCC.db TCC.db_backup

복사가 실패하고, 권한 에러가 발생한다면 위에서 언급한 Full Disk Access 내용이 잘못된 것이니 다시 한번 확인하자.

이제 VS Code 애플리케이션에 카메라 권한을 추가하기 위해 데이터베이스에 직접접근하여 레코드를 다음과 같이 삽입하자.

> sqlite3 TCC.db
> INSERT into access (service, client, client_type, auth_value, auth_reason, auth_version) VALUES ("kTCCServiceCamera","com.microsoft.VSCode",0,2,0,1);

VS Code가 Camera탭에 추가 된 것을 확인할 수 있다.

만약 마이크 권한도 추가 하고 싶다면 kTCCServiceCamera 부분만 kTCCServiceMicrophone로 변경하면 된다.

> INSERT into access (service, client, client_type, auth_value, auth_reason, auth_version) VALUES ("kTCCServiceMicrophone","com.microsoft.VSCode",0,2,0,1);

다른 애플리케이션에 권한을 부여하고 싶다면 패키지명을 변경하면 된다.

모든 작업이 끝났으면 애플리케이션을 종료하고 다시 시작하여 하드웨어(카메라 or 마이크)에 접근할 수 있는지 확인하도록 하자.

카테고리: etc

0개의 댓글

답글 남기기

Avatar placeholder

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.