スマホからリモートデスクトップで自宅の PC に接続し、作業を終えてスマホのアプリを閉じると、自宅 PC の画面はロックされる。私は自宅 PC で、Codex の computer use(AI が画面を見ながらマウスやキーボードを操作する機能)を使った作業をさせたままにしておきたかったのだが、ロックされるとうまくいかなくなって困った。
結論から書くと、接続を切る前に、自宅 PC 側で管理者の PowerShell を開いて次の1行を実行すれば、ロックされずに接続を切れる。
tscon $env:SESSIONNAME /dest:console
実行するとスマホ側の接続はその場で切れ、自宅 PC の画面はロックされずにデスクトップのまま残る。
なお、ネットで見かける tscon %SESSIONNAME% /dest:console はコマンドプロンプト用の書き方で、PowerShell で打つとエラーになる。私はこれで一度失敗した(後で説明する)。
環境
- 接続元: Android スマホ
- アプリ: Windows App(旧 Microsoft リモート デスクトップ)
- 経路: Tailscale で自宅 PC につないでいる
- 接続先: 自宅の Windows 11 Pro の PC(リモートデスクトップの接続を受けられるのは Pro 以上)
- 自宅 PC で動かしていたもの: Codex の computer use
Tailscale は通信の経路をつくっているだけで、ロックされる・されないはリモートデスクトップ(Windows)側の動きだ。Tailscale を使っていなくても、リモートデスクトップなら同じことになるはずだ。Tailscale でスマホから自宅 PC につなぐ方法は、別の記事に書いている。
普通に切断するとロックされる
Windows App で普通に接続を切ると、自宅 PC の画面はロック画面になる。起動していたアプリが終了するわけではないが、画面はロックされた状態になる。
私の場合、この状態だと自宅 PC で動かしていた Codex の computer use の作業がうまくいかなくなった。computer use は画面を見て操作するので、画面がロック画面になっていては作業を続けられない。computer use に限らず、画面に表示されていることが前提で動くもの(RPA のように画面を操作するツールなど)を、接続を切った後も動かし続けたい人は、同じことで困ると思う。
tscon で、自分のセッションを PC 本体の画面につなぎ替える
tscon は、Windows に最初から入っている、セッション(ログインしている画面のまとまり)をつなぎ替えるコマンドだ。/dest:console の console は、PC 本体につながっている画面のこと。つまり、今リモートデスクトップで使っている自分のセッションを、PC 本体の画面側に移す。移した時点でリモートデスクトップの接続は切れるが、セッションは PC 本体の画面で表示されたままになるので、ロックされない。
$env:SESSIONNAME は、今のセッションの名前が入っている環境変数だ。リモートデスクトップで接続している間は、ここにリモートデスクトップのセッション名が入っている。
手順
- スマホから自宅 PC にリモートデスクトップで接続した状態で、自宅 PC のスタートメニューで「PowerShell」を検索する
- 右クリックして「管理者として実行」で開く(スマホのタッチ操作でも選べる。マウスは無くてよい。右クリックのやり方は下に書く)
tscon $env:SESSIONNAME /dest:consoleを実行する
実行すると、スマホ側の接続はすぐ切れる。コマンドの結果をスマホで見ることはできないが、それで正常だ。
スマホで右クリックするには
「管理者として実行」は、PowerShell を右クリックしたメニューから選ぶ。Windows App をタッチで操作している場合、右クリックは次のようにする。
| Windows App のマウスのモード | 右クリックのやり方 |
|---|---|
| タッチモード(指で触った場所をそのまま操作する) | 右クリックしたいものを1本指で長押しして、離す |
| マウスポインターモード(画面にマウスポインターが出る) | 2本指で同時にタップする |
Microsoft の Windows App の説明(Android のタブ)でも、タッチモードでは1本指の長押し、マウスポインターモードでは2本指のタップ(または1本指の長押し)が右クリックになると案内されている。
%SESSIONNAME% と書くと「セッションが見つかりません」になる
私が最初に使ったのは、コマンドプロンプト用の書き方だった。これを管理者の PowerShell で実行すると、次のようになった。
PS C:\Users\<User>> tscon %SESSIONNAME% /dest:console セッション %SESSIONNAME% が見つかりません。

環境変数の書き方が、コマンドプロンプトと PowerShell で違うのが原因だ。
| 実行する場所 | 環境変数の書き方 |
|---|---|
| コマンドプロンプト(cmd) | %SESSIONNAME% |
| PowerShell | $env:SESSIONNAME |
PowerShell では %SESSIONNAME% が環境変数として扱われず、「%SESSIONNAME%」という文字のまま tscon に渡る。そんな名前のセッションは無いので、エラーになる。エラーメッセージに変数の名前がそのまま出ていたら、コマンドを打っている場所(コマンドプロンプトか PowerShell か)を確かめるとよい。
PowerShell 用の tscon $env:SESSIONNAME /dest:console に書き直したら、ロックされずに接続を切れた。コマンドプロンプトを管理者として開くなら tscon %SESSIONNAME% /dest:console のままでよいはずだが、私はコマンドプロンプトでは試していない。
セッション名でうまくいかないときは、番号で指定する(試していない)
tscon は、セッションの名前の代わりに番号(ID)でも指定できる。番号は quser で調べられる。
quser
表示された一覧のうち、自分のユーザー名の行の ID の数字を使って、tscon 2 /dest:console のように実行する(2 のところを自分の ID に変える)。私は $env:SESSIONNAME でうまくいったので、この方法は試していない。
注意すること
- PC の前にいる人が、そのまま操作できる。ロックされていないデスクトップが PC 本体の画面に出たままになるので、家族がいる家や会社の PC では気をつけたい
- tscon は、ほかの人のセッションを操作する場合などに権限が必要になる。私は管理者として開いた PowerShell で実行した
時間がたつとロックされるなら、まず Windows の設定を見直す
tscon は、接続を切るときにロックされないようにするだけだ。スリープや、一定時間操作が無いとロックする設定は別にあり、それが有効なら、tscon で切った後でも時間がたてばスリープやロックになる。その場合は、まず Windows の設定を見直す。Windows 11 では主に次の場所にある(項目の名前はバージョンで多少違うことがある)。
- 設定 → システム → 電源(ノート PC は「電源とバッテリー」)→ 画面とスリープ: 画面を消すまで・スリープするまでの時間
- 設定 → アカウント → サインイン オプション: しばらく操作しなかったときに、もう一度サインインを求めるかどうか
- 設定 → 個人用設定 → ロック画面 → スクリーンセーバー: スクリーンセーバーの待ち時間と、「再開時にログオン画面に戻る」
会社の PC などで、これらの設定が管理者に決められていて変えられない場合もある。私の職場の PC がそうで、そのときは例外的な手段として、PowerShell で定期的にキーを押してロックを防ぐ仕組みを作った。それはこちらの記事に書いている。
まとめ

リモートデスクトップを、自宅 PC の画面をロックせずに切るなら、自宅 PC 側の管理者の PowerShell で次の1行を実行する。
tscon $env:SESSIONNAME /dest:console
「セッション %SESSIONNAME% が見つかりません」と出たら、コマンドプロンプト用の書き方を PowerShell で打っている。$env:SESSIONNAME に書き換えればよい。

コメント