📻

Linuxの画面をSSHでWindowsに転送する

2024/04/06に公開1

使用するツール

  • VcXsrv
  • OpenSSH
  • PowerShell
  • Windows Terminal

0. 前提

  • Windows に OpenSSH がインストールされている
  • 対象の Linux と SSH で接続できる状態になっている
C:\Windows\system32> Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'

Name  : OpenSSH.Client~~~~0.0.1.0
State : Installed

インストールされてない場合は
https://learn.microsoft.com/ja-jp/windows-server/administration/openssh/openssh_install_firstuse
の手順でインストールしておく

1. VcXsrv をインストール

VcXsrv のインストール(Windows 上)
の手順を参考にインストールし、起動する

2. 環境変数を設定

1度実行すれば、次回以降は不要

# DISPLAY 環境変数を localhost:0.0 に設定することで、Xサーバーへ接続できるようにする
[System.Environment]::SetEnvironmentVariable("DISPLAY", "localhost:0.0", "User")

3. SSH で接続

# 通常の SSH 接続
ssh      yossy@yossy-Ubuntu-desktop.local

# X11 転送を有効にして SSH 接続
ssh -AXY yossy@yossy-Ubuntu-desktop.local
オプション 説明
-A エージェント転送を有効にする
-X X11転送を有効にする
-Y 信頼されたX11転送を有効にする

オプションの詳細は https://man.openbsd.org/ssh を参照

Linux の GUI アプリが Windows 側に表示されれば成功

xeyes

参考にさせて頂いたサイト










おまけ(録画をGifに変換するのに使用したスクリプト)

movie_to_gif.py

import cv2
from PIL import Image

cap = cv2.VideoCapture("xeyes.mp4")
frames = []

while cap.isOpened():
    try:
        ret, frame = cap.read()
        if not ret:
            break
    except Exception as e:
        print(e)
        continue
    frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
    pil_img = Image.fromarray(frame)
    frames.append(pil_img)

# https://pillow.readthedocs.io/en/stable/handbook/image-file-formats.html#gif-saving
frames[0].save(
    "xeyes.gif",
    save_all=True,
    append_images=frames[1::8],
    optimize=True,
    duration=500,
    loop=0,
)
GitHubで編集を提案
ヘッドウォータース

Discussion