【Windows】リモートデスクトップを切断すると自宅PCがロックされる|ロックしないで切断する方法(tscon)

スポンサーリンク
powershell
スポンサーリンク

スマホからリモートデスクトップで自宅の 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 は、今のセッションの名前が入っている環境変数だ。リモートデスクトップで接続している間は、ここにリモートデスクトップのセッション名が入っている。

手順

  1. スマホから自宅 PC にリモートデスクトップで接続した状態で、自宅 PC のスタートメニューで「PowerShell」を検索する
  2. 右クリックして「管理者として実行」で開く(スマホのタッチ操作でも選べる。マウスは無くてよい。右クリックのやり方は下に書く)
  3. 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 で 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 に書き換えればよい。

関連記事

参考

コメント

タイトルとURLをコピーしました