LoginSignup
22
12

More than 3 years have passed since last update.

【macOS】Web会議システム切り忘れ防止: カメラがアクティブかどうか知りたい!

Last updated at Posted at 2021-02-05

Web会議システムの問題

  1. カメラをOFFのまま参加している人が多く、表情が読めないことが多い
  2. 会議中に別の作業をしている人がいる
  3. 切ったつもりのWeb会議システムがアクティブのままでイケナイものが写ってしまう

などなど、様々な問題が発生しています。

コロナ禍でWeb会議が増えている中、切り忘れによって、写ってほしくない油断した姿などが防止できればと思い、今回は、
3. 切ったつもりのWeb会議システムがアクティブのままでイケナイものが写ってしまう
を、macOSのコマンドラインでどうにかカメラのアクティブ状況をウォッチできないかというところの暫定解決策です。

やりたいこと

MacBookを利用している方はわかると思うのですが、Mac標準のカメラがActiveの場合はカメラ横の緑のランプが点灯します。

ただし、外部カメラなどを利用していると、ランプが付かないものがあったりと、それにすら気づかない事があるため、この条件に近しい形で、カメラが起動しているか否か、また、どのアプリで利用しているかをMacの通知を利用し、別の作業をしていても通知で気付ける状態を作りたい。

先に結論

カメラの起動状況を検知することは出来なかったのですが、主にWebRTCで通信をしていると、UDPでの通信が発生するため、この通信をチェックすることで一定ラインの監視をすることは出来ました。

今回とった手段

調査

  • macOSに緑のランプが点灯した情報がサラリと採れるインターフェースが無いか
    • → 簡易的に取得する手段はなさそう
  • Web会議ソフトのプロセス監視
    • → 起動しているだけだったり、ブラウザベースだったりという状況もあるので意味無しと判断
  • 通信状況のチェック
    • WebRTCの通信状況をチェック
      • カメラの起動状況は分からないが、その通信が発生している時点で危険と判断
    • 今回はこちらで進めました

概要

Web会議システムの通信はUDPでの通信

local → 特定のサービス

が発生するため、

  1. この通信をチェックし
  2. その通信を検知したら
  3. Macの通知でアラートを出す

という至ってシンプルなものです。

ステップ

1. この通信をチェックし

まずはWebRTCの利用をしている場合、UDP通信がlocalIPアドレスから不特定のIPに対して継続的に発生します。
これを検知するため、 lsof コマンドを利用し、UDPでの通信をチェックします。

$ lsof -iUDP

このままだと、名前解決もやろうとするので時間がかかるため、IPでの表示オプション -n と、ウェルノウンポートの名前としてではなく、ポート番号を表示するオプション -P を追加します。

$ lsof -iUDP -n -P

この結果でUDPでの通信が自身のIPアドレスから発生しているものが今回の絞り込み対象となります。

なので、上の実行結果から自身のIPアドレス

$ ipconfig getifaddr en0
> 192.168.1.30

が含まれる通信がWeb会議システムの利用で使われていそうな通信と判断しています。

# これが対象となるもの
$  lsof -iUDP -n -P | grep `ipconfig getifaddr en0`

2. その通信を検知したら, 3. Macの通知でアラートを出す

ここから先はシェルスクリプトに落としています。

# 自身のIP
SELFIP=`/usr/sbin/ipconfig getifaddr en0`
# 1. 通信のチェックの部分を絞り込んだものから、アプリ名をawkで取得
UDPPROCESS=`/usr/sbin/lsof -iUDP -n -P | grep ${SELFIP} | awk '{print $1}'`

# UDPPROCESSにデータがあったらMacへ通知
if [ "$UDPPROCESS" ]; then
    MESSAGE="${UDPPROCESS}でカメラ起動してるかも"
    osascript -e "display notification \"${MESSAGE}\" with title \"UDP Alert\""
fi

しばらくcrontabに設定入れて試してますが、今の所いい感じに動いています。
(Web会議中はずっと出てきます。)

ソースは github にあげてます。

もっといい方法や改善点思いついたら更新します。

注意点

普段利用しているツールの中でUDPの通信が常に走り続けるようなツールが入っていると常に警告が出てしまうので、そういったツールがある場合は grep コマンドの部分で除外してください。

また、ChromeなどはまれにUDPの通信を行っており、タイミングによってはそちらを拾ってしまうため、誤検知が発生するケースもありますorz

2021/02/06 - 追記

zoomは調査時はUDP通信が発生していたのですが、常時発生するわけではないようでした。
websocketとwebassemblyを使っているようで、使用時に通知が出ない場合があるようです。
(要調査)

また、chromeではQUICの実装によってUDP通信が発生するケースが多く、今朝起動したところアラートが出続けていました。
※ chromeでのquic通信は chrome://net-internals/#quic で見ることが出来ます。

また、カメラとマイクの利用状況を監視するMacアプリとしては OverSight というものがあるようですが、途中から通信内容での検知に脳が切り替わっていたので継続して調査しますw (@sohsatohさん、コメントありがとうございます。)

22
12
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
12