トップ / ブログ

web会議の画面共有で、マウスカーソルが相手に見えない

2026年10月7日

左側の説明する側の画面ではマウスカーソルが矢印として表のセルを指しているのに、右側の受け取る側の画面では同じ表からカーソルだけが消えている様子
左側の説明する側の画面ではマウスカーソルが矢印として表のセルを指しているのに、右側の受け取る側の画面では同じ表からカーソルだけが消えている様子

「ここの数字です」と言いながらカーソルを動かしているのに、相手の画面では何も動いていない。調べると出てくるのは、カーソルを目立たせる手順と、逆に目立たなくする手順ばかりです。なぜ映らないことがあるのかを書いたページが見つかりませんでした。 理由は、カーソルが共有している絵の一部ではなく、後から足される別の層だからです。この記事では、W3Cの仕様とWindows・macOS・Zoom・Googleスライドの公式資料から、カーソルがどこで足されているのかを整理します。出典は本文に置いています。

この記事の内容
  1. 上位に出てくるのは、出し方と消し方
  2. カーソルは、共有している絵の一部ではない
  3. Windowsは「入っているか、別か」を取り込む側に伝える
  4. 自分の画面には必ず出ているので、届いたか分からない
  5. 「カーソルを見せる」道具は、映像と別の便で送っている
  6. うちは指定していない。資料は1280×720に焼いて送る
  7. 位置を指すなら、言葉か、置いたもので
  8. Meetnectの場合

上位に出てくるのは、出し方と消し方

この語で検索して上位10件を読むと、3種類に分かれます。カーソルを目立たなくして資料を読みやすくする手順、共有された画面に自分の矢印を出して相手の操作を助ける方法、そして発表のときのカーソル設定です。

質問として出ているものもあります。Microsoftのフォーラムには「デスクトップ全体を共有すると相手の画面にカーソルが出ないが、ウィンドウ単位の共有では出る」という投稿があり、同じ趣旨の質問が知恵袋にもあります。どちらも症状の報告で、原因の説明は付いていません。

実務で困るのはその先です。表の一箇所を指しながら話していて、相手が「どこですか」と聞き返す。聞き返してくれれば気づけますが、黙って別の場所を見ていることもあります。

カーソルは、共有している絵の一部ではない

ブラウザで画面を共有する仕組みを決めているW3Cの仕様(Screen Capture・Working Draft 2026年8月27日)には、cursor という項目があります。値は3つです。

カーソルを含めるかどうかを、映像とは別に指定する項目として置いているということです。絵に最初から入っているなら、こんな指定は要りません。同じ仕様には、使える値の範囲も書かれています。

> As a capability, the user agent _MUST_ include only the set of values from CursorCaptureConstraint it is capable of supporting for this display surface.

対応している値だけを返しなさい、という決まりです。しかも「for this display surface」=共有する対象ごとに、です。 画面全体を選んだのか、ウィンドウを1つ選んだのか、タブを選んだのかで変わりうることを、仕様の側が書いています。

Windowsは「入っているか、別か」を取り込む側に伝える

なぜ対象によって変わるのか。Windowsが画面を取り込むときの説明に理由が書かれています(Desktop Duplication API)。

> Either the mouse pointer is already drawn onto the desktop image that AcquireNextFrame provides or the mouse pointer is separate from the desktop image.

(マウスポインターは、取り込んだ画面にすでに描かれているか、画面とは別になっているか、どちらかです)。続きが具体的です。

> If the graphics adapter overlays the mouse pointer on top of the desktop image, AcquireNextFrame reports that a separate pointer is visible. So, your client app must draw the mouse pointer shape onto the desktop image to accurately represent what the current user will see on their monitor.

グラフィックスの側がポインターを画面に重ねている場合は、取り込んだ絵にポインターが入っていない。だから取り込んだアプリが、位置と形を受け取って自分で描き足さないと、実際に見えている画面とは違うものになるという説明です。描き足す処理が通らなければ、カーソルのない絵が相手に届きます。

macOSも同じ構えです。画面を取り込む枠組みに showsCursor という項目があり、A Boolean value that determines whether the cursor is visible in the stream.(カーソルを映像に出すかどうかを決める真偽値)と定義されています。既定では出る側です。3つとも同じことを言っています。カーソルは画面の絵に含まれているものではなく、含めるかどうかを後から決める層です。

自分の画面には必ず出ているので、届いたか分からない

ここが実務で詰まる点です。自分のマウスカーソルは、共有していてもしていなくても、自分の画面の最前面に出ます。だから「相手に届いているか」の手がかりが、自分の画面には1つも現れません。

ブラウザ側の資料も揃っていません。MDNの getDisplayMedia() のページに並んでいる指定項目は video・audio・controller・monitorTypeSurfaces・preferCurrentTab・selfBrowserSurface・surfaceSwitching・systemAudio・windowAudio で、cursor は入っていません。 別にある MediaTrackSettings.cursor のページには3つの値の説明がある一方で、This feature does not appear to be defined in any specification.(この機能はどの仕様にも定義されていないようだ)と書かれています。上で引いたとおり、W3Cの草案には定義があります。

つまり、仕様には項目があり、解説には「無い」と書かれている状態です。ブラウザ越しの共有でカーソルがどう扱われるかは、ここを読んでも決まりません。残る確かめ方は、相手に聞くことだけです。

「カーソルを見せる」道具は、映像と別の便で送っている

各社が用意している道具を見ると、映像任せにしていないことが分かります。

Zoomの注釈ツールには Spotlight があります(Using annotation tools for collaboration)。Displays your mouse pointer to all participants when your mouse is within the area being shared.(共有している範囲の中にマウスがあるとき、自分のマウスポインターを全参加者に表示する)。使えるのは共有を始めた側だけです。隣には Arrow があり、Displays a small arrow instead of your mouse pointer. Click to insert an arrow that displays your name.(マウスポインターの代わりに小さな矢印を出し、クリックすると自分の名前が付いた矢印を置く)と説明されています。モバイルではタブレットのみと注記されています。

ポインターを見せることが、注釈の道具として別立てになっているのが要点です。共有映像にそのまま乗るなら、専用の道具を作る必要がありません。

Googleスライドには live pointers があります(View live pointers on Google Slides)。If you are in a presentation at the same time as others, you can view collaborators' pointers as they move around a slide.(同時に同じプレゼンテーションを開いていると、相手のポインターが動くのが見える)。こちらは画面共有ではなく、同じ資料を同時に開いた状態でポインターの位置を送っています。だから成立しない場合の書き方も違います。自分のポインターを出せるのは編集できる状態のときだけ、使えるのはパソコンのみ、そして More than 20 collaborators are in the presentation(同時に21人以上いる)と出なくなります。

並べると見えてきます。確実に届く指し示しは、映像に焼き込む側ではなく、位置を別便で送る側にあります。 そして別便で送るほうには、人数や編集の可否といった、映像とは関係のない成立条件が付きます。

うちは指定していない。資料は1280×720に焼いて送る

左の経路では画面を取り込むのでカーソルが入るかどうかが分かれ、右の経路では資料が1枚の板に焼かれて送られるためカーソルが最初から存在しない様子
左の経路では画面を取り込むのでカーソルが入るかどうかが分かれ、右の経路では資料が1枚の板に焼かれて送られるためカーソルが最初から存在しない様子

Meetnectの画面共有は navigator.mediaDevices.getDisplayMedia({video:true}) の1行です(public/room.html 1825行)。cursor の指定はしていません。 public/room.html・src/worker.js・public/app.html を cursor で検索すると、出てくるのは画面の見た目を決めるCSS(cursor:pointer など)だけで、共有の指定に使っている箇所は0件です。映るかどうかはブラウザとOSに任せている、ということです。だから「カーソルで指せます」とも「出ません」とも約束できません。

資料を見せる経路は別に作ってあります。ファイルを1280×720の描画面に1枚焼いてから送ります(ensurePresentCanvas が1280×720の描画面を作り〈1882行〉、drawFitted が Math.min(1280/sw, 720/sh) の倍率で縦横比を保ったまま中央に収める〈1883行〉)。この経路には、カーソルが入る余地がありません。 画面を取り込んでいないからです。資料の文字の大きさがどう決まるかは相手の画面の大きさの記事に書きました。

代わりに、位置を指すのはボードの側に置きました。線・付箋・図形・矢印は1つずつ部品として送られ、座標はボードに対する0〜1の割合で持ちます。描くときに各自の画面の大きさを掛けます(drawObj の const px=p.x*W, py=p.y*H;〈2854行〉)。相手の画面が広くても狭くても、同じ位置に出ます。 ただし線はペンを離してから1本にまとめて届くので、動いているカーソルの代わりにはなりません。ボードの作りは部品として送る仕組みの記事に書いています。

位置を指すなら、言葉か、置いたもので

ここまでを踏まえると、できることは3つに絞られます。

位置を言葉で言う。 「左の表の、上から3行目」。カーソルは届かないことがありますが、言葉は届きます。指しながら「ここ」と言うのをやめて、「ここ」を言葉に置き換えるだけです。

指すために、消えないものを置く。 丸や矢印を描けば、それは絵の一部になります。カーソルのように、映る層と映らない層に分かれません。

動きを追わせる説明をやめる。 操作の手順を見せる必要があるなら、その画面だけ先に1枚の画像にしておきます。選んだウィンドウの中身が黒いまま届くこともあるので(黒い画面の出どころ)、動かして見せる前提は、こちらで確かめられない条件が重なります。

この3つの効果は測っていません。 公式資料に書かれていたことと、うちのコードの中身だけを根拠にしています。

Meetnectの場合

Meetnectは資料を画面共有ではなくファイルとして送り、1280×720の1枚に焼いてから出します。この経路にカーソルは入りません。位置を指すのはボードの部品で、座標を割合で持っているので相手の画面の大きさに関係なく同じ場所に出ます。画面共有そのものを使ったときにカーソルが映るかどうかは、ブラウザとOSの側に任せていて、こちらで指定していません。

商談しながら、議事録ができています

Meetnect はブラウザだけで動くオンライン商談ツールです。相手は登録不要、URLを開くだけ。通話中に文字起こしが進み、終わった時点で「誰が何を言ったか」まで残った議事録ができています。7日間、カード登録なしで試せます。