SSH

2021年3月17日 (水)

WSL2でRDPサーバーを動かす

2021/3/22
・日本語変換のインストール方法について追加した。

2021/3/21+
・「「localhost:3390」で接続する際、接続できないことがある。」問題があり、
それは、localhostの実IPへの変換が安定していないせいだったが、
.wslconfig設定を追加することで修正した。

2021/3/18++
・SSH環境を修正したので、RDPログイン環境下でも、PowerShell.exeが動作するようになった。
参照:WSL2でSSHサーバーを動かす
 
2021/3/17
初版

WSL2 RDP server

WSL2 RDP server

概要

WSL2でRDPサーバーを動かす。
以下での環境整備が完了している前提でのRDPサーバーのインストール方法について述べる。
WSL2でSSHサーバーを動かす

.wslconfig設定(2021/3/21追加)

localhostの実IPへの変換を正常にさせるために以下を設定する。

windows側のc:\Users\<ユーザ名>\.wslconfigを作成して
以下の内容を設定する:

.wslconfig

localhostForwarding=True

以上を設定した後、以下を実行する:

PowerShell

wsl --shutdown

以上の実行でwslをシャットダウン(その後自動で起動される)。
これは、windows10のPCを起動するたびに実行する必要があるので
SSHサーバーで自動実行のbatに登録すると便利になる。

setup-ubuntu-ssh.bat

wsl --shutdown for /F %%i in ('wsl -d Ubuntu-20.04 exec hostname -I') do set ip=%%i netsh interface portproxy delete v4tov4 listenport=22 netsh interface portproxy add v4tov4 listenport=22 connectaddress=%ip% wsl -d Ubuntu-20.04 -u root bash /opt/service_start.sh

RDPサーバーのインストール

以下の手順でインストールする:
ubuntu20.04/WSL2

sudo apt update && sudo apt -y upgrade sudo apt -y install xfce4 sudo apt install xfce4 xfce4-goodies sudo apt install xrdp sudo cp /etc/xrdp/xrdp.ini /etc/xrdp/xrdp.ini.bak sudo sed -i 's/3389/3390/g' /etc/xrdp/xrdp.ini sudo sed -i 's/max_bpp=32/#max_bpp=32\nmax_bpp=128/g' /etc/xrdp/xrdp.ini sudo sed -i 's/xserverbpp=24/#xserverbpp=24\nxserverbpp=128/g' /etc/xrdp/xrdp.ini echo xfce4-session > ~/.xsession #startwm.shを編集する sudo nano /etc/xrdp/startwm.sh #最後の2行をコメントアウトする。 #そして、末尾に #startxfce4 #を追加する。

編集後のstartwm.sh

/etc/xrdp/startwm.sh
(修正部分のみ)

<省略> ##test -x /etc/X11/Xsession && exec /etc/X11/Xsession ##exec /bin/sh /etc/X11/Xsession # xfce startxfce4

RDPサーバーの起動

sshでWSL2-ubuntuにログインして 以下を実行する:

sudo service xrdp start #出力 * Starting Remote Desktop Protocol server

RDPサーバーの起動状況を確認したい場合、
以下のコマンドを実行する:

service xrdp status #出力 * xrdp-sesman is running * xrdp is running

ある程度、自動的にxrdpサーバーを起動する場合は
以下を~/.profileの末尾に追加する:
.profile

<省略> # xrdp retval=$(service xrdp status >/dev/null 2>&1; echo $?) if [ ! $retval == "0" ]; then echo xrdp server start... sudo service xrdp start fi # dbus retval=$(service dbus status >/dev/null 2>&1; echo $?) if [ ! $retval == "0" ]; then echo dbug start... sudo service dbus start fi

このスクリプトでログイン時に
serviceの状態をチェックしているので、
xrdp serverが停止している場合、
「xrdp server start...」が表示されるので、
パスワードを入力する。

RDPで接続する

windows10の「リモートデスクトップ接続」で
localhost:3390 に接続する。
この後、プロンプトが表示されるので、
セッションをxorgのままにして、
WSL2のユーザー名とパスワードを入力する。
ここで、xfce4のディスクトップ画面が表示される。

現在、以下のような制限があるようだ:
(1)PATHが変更になっているのか、PowerShell.exeが動かない。
2021/3/18: SSH環境の改善で動作するようになった。
参照:WSL2でSSHサーバーを動かす
(2)コマンドラインからGUIアプリを起動した場合は、(Xserverが起動している場合)Xserverによる表示になる。
以下の場合はRDPによる表示になる:
・ファイラーでファイルを指定してアプリを選択してクリックするとGUIアプリを起動する。また、アプリ・アイコンをクリックしての起動やアプリケーション・メニューからの起動などができる。
(3)外部からのアクセスでもRDP接続できるようだが、画面が黒いままで使用不可である。
  
/********** 以下の解決済み(2021/3/21) **********
トラブルシュート:
「localhost:3390」で接続する際、接続できないことがある。
原因不明だが、windows10のPCのIPアドレスがDHCPで払い出されて、
実質的にIPアドレスが変わったときに接続できない状況になっている印象がある。
確定的な解決方法は今のところないが、何度も再起動からトライしていると接続できるようだ。
************************************************/

日本語変換のインストール(2021/3/22)

RDPディスクトップのターミナルで以下を実行する:

# 日本語化 sudo apt -y install language-pack-ja sudo update-locale LANG=ja_JP.UTF8 # fcitx-mozc(日本語入力)のインストール sudo apt install -y fcitx-mozc dbus-x11 sudo sh -c "dbus-uuidgen > /var/lib/dbus/machine-id" # fcitx設定 # profileの編集 sudo nano /etc/profile #以下を末尾に追加する: #fcitx export GTK_IM_MODULE=fcitx export QT_IM_MODULE=fcitx export XMODIFIERS=@im=fcitx export DefaultIMModule=fcitx fcitx-autostart > /dev/null 2>&1 xset -r 49 > /dev/null 2>&1 ##

以上のインストールが終了したら、WSL2を再起動する。 再度、RDPログインすれば、日本語変換が使用可能になる。

おまけ(chromeのインストール)

以下の手順でchromeをインストールできる:

sudo sh -c 'echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list' sudo wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add - sudo apt update sudo apt install google-chrome-stable

デスクトップのプリケーション・メニューから起動できる。

参考情報

localhost関連:
WSL2の2つの設定ファイル「.wslconfig」と「wsl.conf」
「WSL 2」最大の課題であった“localhost”問題が解決 ~「Windows 10」Build 18945 すべてのWSLディストロに共通のグローバル設定、カスタムLinuxカーネルの利用にも対応
WSL2: UbuntuでLocalhostを表示させる方法

RDP関連:
Linux on Windows: WSL with Desktop Environment via RDP
WSL2+ubuntu20.04: GUI化して使う方法

SSH関連:
WSL2のUbuntuにsshできるようにする
Windows10で特定のポートを開放する
WSL2 に外部からアクセスする
MobaXterm - Enhanced terminal for Windows with X11 server, tabbed SSH client, network tools and much more

日本語変換関連:
WSL2+Ubuntu 20.04LTSでデスクトップ(xfce4)を表示する。
Windows10 の WSL(Windows Subsystem for Linux) の Ubuntu18.04 で日本語入力する設定

その他:(未確認)
WSL2+Ubuntu 20.04環境から音声を出力する

以上

続きを読む "WSL2でRDPサーバーを動かす"

| | コメント (0)

2021年3月14日 (日)

WSL2でSSHサーバーを動かす

2021/3/20
・Documents/setup-ubuntu-ssh.batの自動起動方法を
PowerShellの自動起動スクリプトから
タスクスケジュールによる起動に変更した。
なので、windows10のPCを起動すると
自動的にsetup-ubuntu-ssh.batが起動する。

2021/3/18
・SSHログイン環境下でも、PowerShell.exeが動作するようにした。

2021/3/15
・SSHで外部からアクセスした際のDISPLAY変数の設定値を追加した。
・GUIアプリ起動時に出ているエラーの解消方法について追加した。

2021/3/13+
初版

WSL2 SSH server

WSL2 SSH server

概要

WSL2でSSHサーバーを動かす。
WSL2ならびにbuntu20.04のインストールが終了している前提で SSHサーバーを動かす方法について述べる。

SSHサーバーのインストール

以下の手順でインストールする:
ubuntu20.04/WSL2

sudo apt update sudo apt install openssh-server

WSL2の起動用スクリプト

WSL2は起動時にデーモンが動いていないので
以下のサービス起動用のスクリプトを作成する:
/opt/service_start.sh

#!/bin/bash service ssh start service dbus start service avahi-daemon start service cron start

以下のコマンドで実行権限を与える:

sudo chmod a+x /opt/service_start.sh

windows10側(PowerShell側)のスクリプト

以下のWSL2側の設定を行うbatを作成する:

Documents/setup-ubuntu-ssh.bat

wsl -d Ubuntu-20.04 -u root bash /opt/service_start.sh for /F %%i in ('wsl -d Ubuntu-20.04 exec hostname -I') do set ip=%%i netsh interface portproxy delete v4tov4 listenport=22 netsh interface portproxy add v4tov4 listenport=22 connectaddress=%ip%

/********* 以下、起動方法の変更により廃止 *********

該当のbatを自動実行させるために、
自動実行されるPowerShellのスクリプト(Microsoft.PowerShell_profile.ps1)の
末尾に以下を追加する:
Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
(存在しない場合、新規に作成する)

Documents/setup-ubuntu-ssh.bat

これで、PowerShellを管理者権限で立ち上げると
該当のbatが実行されて WSL2でSSHサーバーが起動することになる。

*********************************************************/

タスク・スケジューラによる自動起動の設定

タスク・スケジューラで以下のように設定する:

全般: ユーザーがログオンしているのみ実行する:on 最上位の特権で実行する: on 構成:[windows10] (重要:これを設定しないと動作しないようだ) トリガー: タスクの開始: ログオン時 遅延時間を指定する: 30秒間 操作」 操作:[プログラムの開始] プログラム/スクリプト: Documents/setup-ubuntu-ssh.batを置いたフル・パス 条件: タスクを実行するためにスリープを解除する:on それ以外、off

参照:Windows10 - 管理者権限が必要なアプリを自動起動(スタートアップ)

この設定で、windows10のPCを再起動すると自動的に
setup-ubuntu-ssh.batが実行される。

これで、<WSL2のユーザー名>@<windowsの外部から見えるIP>で SSHログインできる。

なお、<windowsの外部から見えるIP>は、 PowerShellで以下を実行した出力から分かる:
PowerShell

ipconfig # 出力 Windows IP 構成 <省略> Wireless LAN adapter Wi-Fi: 接続固有の DNS サフィックス . . . . .: リンクローカル IPv6 アドレス. . . . .: xxxxxxxxxxxxxxx IPv4 アドレス . . . . . . . . . . . .: 192.168.0.13 サブネット マスク . . . . . . . . . .: 255.255.255.0 デフォルト ゲートウェイ . . . . . . .: 192.168.0.1 イーサネット アダプター vEthernet (Default Switch): <省略> イーサネット アダプター vEthernet (WSL): <省略>

WiFiで接続している場合、「Wireless LAN adapter Wi-Fi:」のIPアドレスが 該当のIPになるので、ここでは「192.168.0.13」となる。

SSHポートを開放する

外部のPCからWSL2のSSHサーバーにアクセスする場合、windows10のSSHポートを開放する必要がある。色々な解説が、ネット上、見つかるが、代表的なものとして以下を挙げる:
Windows10で特定のポートを開放する
または、管理者権限でPowerShellで以下を実行する:
PowerShell

New-NetFireWallRule -DisplayName 'WSL 2 Firewall Unlock' -Direction Inbound -LocalPort 22 -Action Allow -Protocol TCP

GUIアプリ

XフォーワードでGUIアプリを動かすときに必要となるDISPLAY変数は以下を設定する。

export DISPLAY=<windowsの外部から見えるIP>:0.0 #上の例では以下のようになる: export DISPLAY=192.168.0.13:0.0

この設定をWSL2の~/.profileと~/.bashrcの末尾に登録すると
自動化できる。
なお、
~/.profileは、ログイン・シェル用の起動スクリプト、
~/.bashrcは、インタラクティブ・シェル用のスクリプトになる。

Xサーバーを内蔵している以下のMobaXtermを使用すれば特別にXサーバーを用意しなくてもWSL2のGUIアプリが使用できる。

SSHで外部からアクセスする場合、
「ssh -Y user@hostname.local」などで起動すれば、
GUIアプリも動作するが、DISPLAY変数を以下に設定する必要がある:

export DISPLAY=localhost:10.0

なお、内部のWSL2のログインでも上の設定でGUIアプリが動くようだが 遅いようなので、内部の使用では、もとの設定のほうが良いようだ。

MobaXterm - Enhanced terminal for Windows with X11 server, tabbed SSH client, network tools and much more
設定は、SSHはデフォルトで、
WSL2ログインの場合は「Run method: Native connector」に
する必要がある。

VScode in WSL2

WSL2にVScodeをインストールして実行すると以下のようなメッセージが出る:

To use Visual Studio Code with the Windows Subsystem for Linux, please install Visual Studio Code in Windows and uninstall the Linux version in WSL. You can then use the `code` command in a WSL terminal just as you would in a normal command prompt. Do you want to continue anyway? [y/N] y To no longer see this prompt, start Visual Studio Code with the environment variable DONT_PROMPT_WSL_INSTALL defined.

ようするに、WSL2ではlinux版ではなくてwindows版を使えと言ってくる。 たぶん以下のような機能があるのでwindows版で十分ということらしい。

VSCodeでWSL2のLinux上のファイルをリモート操作する

とは言え、普通の使い方がしたい場合、linux版のほうが良いと感じると思うので そのまま、このメッセージを無視しても構わない。このメッセージが頻繁にでて鬱陶しいので以下を実行すると出なくなる:

export DONT_PROMPT_WSL_INSTALL=1

永続的に有効にする場合は、~/.profile,~/.bashrcに登録する必要がある。

参考:VScodeのインストール方法

wget http://deb.rug.nl/ppa/mirror/packages.microsoft.com/repos/vscode/pool/main/c/code/code_1.54.2-1615424848_amd64.deb sudo dpkg -i code_1.54.2-1615424848_amd64.deb

エラー解消

GUIアプリを起動する際、動作に実害はないが、エラーメッセージが出ているので、その解消方法について述べる:

(1)「G_IS_DBUS_CONNECTION」

GLib-GIO-CRITICAL **: 21:22:13.063: g_dbus_proxy_new: assertion 'G_IS_DBUS_CONNECTION (connection)' failed

上のようなエラーが出ている場合、以下を実行すると解消する:

sudo apt purge fcitx-module-dbus

参考:Lubuntu - G_Is_Dbus_Connection

(2)「icon text-x-generic」

Could not load theme icon text-x-generic: ...

上のようなエラーが出ている場合、以下を実行すると解消する:

sudo apt install gnome-icon-theme

PowerShell.exeを動作させる(2021/3/18)

SSHログイン環境ではPATHの問題か「PowerShell.exe」が動作しない。 そこで以下のようにシンボリック・リンクを張り、SSHログイン環境下でも 「PowerShell.exe」が動作するようにする。

bash

sudo ln -s /mnt/c/WINDOWS/System32/WindowsPowerShell/v1.0//PowerShell.exe /usr/bin/PowerShell.exe #確認 which PowerShell.exe #出力 /usr/bin/PowerShell.exe #シンボリック・リンクの確認 ls -l /usr/bin/PowerShell.exe lrwxrwxrwx 1 root root 62 3月 18 18:02 /usr/bin/PowerShell.exe -> /mnt/c/WINDOWS/System32/WindowsPowerShell/v1.0//PowerShell.exe

参考情報

WSL2のUbuntuにsshできるようにする
Windows10で特定のポートを開放する
WSL2 に外部からアクセスする
MobaXterm - Enhanced terminal for Windows with X11 server, tabbed SSH client, network tools and much more

以上

続きを読む "WSL2でSSHサーバーを動かす"

| | コメント (0)