はじめに
色々とやりたくて個人情報の載っていない比較的安心な仮想環境を安価に作りたいと思って、WindowsのHyper-V上でDebianを立ち上げて色々したときのメモ。
Debianは(Ubuntuも)Hyper-V上に単にインストールしただけではクリップボードを共有できず、ホストとゲスト間でのデータのやりとりが非常に不便です。
そこで、拡張セッションという機能を有効にする必要があり、このためホスト側・ゲスト側双方に変更を加えていきます。
本記事は突き詰めると以下3つの記事を合体したような内容となっています。
そのため、詳細は各記事を参照した方がいい場合もあるかと思います。
一応、最後に沼ったときに得た知見などをいくつか書けたらなと思いつつ・・まとまりがあまりない気配・・。
前提
- Hyper-V 有効化済み
- インストールメディア・イメージファイルなど準備済み
- Debian12 デスクトップ環境(GNOME)使用
- IP固定・ssh使用(設定失敗時の入口用)
- 今回のIP構成は下記
- ホスト側仮想ネットワークスイッチ:192.168.120.1/24
- Debian:192.168.120.100/24
- ネームサーバ:1.1.1.1
- 今回のIP構成は下記
手順
IP固定の下準備
- Hyper-Vマネージャーを立ち上げ、Hyper-Vホストに接続
- ホストマシンの仮想スイッチマネージャーを起動
- 新しい仮想ネットワークスイッチから「内部」タイプの仮想スイッチを新規作成(ここではfor Debian12)
- 適当な名前を設定
- ネットワークの設定を行う
- 管理者権限でPowershellを起動
- 以下のコマンドを実行
New-NetNat -Name "WinNAT" -InternalIPInterfaceAddressPrefix 192.168.120.0/24
- NATを設定して仮想環境→外部へのアクセスを可能にしている
- 設定に失敗した場合は下記のコマンドで削除可能
Remove-NetNat -Name "WinNAT"
- 以下のコマンドを実行
仮想マシンを作成
仮想マシンを起動する(OSセットアップ)
- 起動するとインストーラが実行される
- Graphical installを選択
- 言語設定・地域設定を自身の環境に合わせて設定
- ネットワーク設定はDHCPプロトコルがないためコケるため、手動で設定する
- 基本指示通りに入力していけば問題ないが、ネームサーバーを指示通り空白区切で複数個設定するとドメインを解決できず、パッケージの追加インストールを上手くできなかった
- ソフトウェアの選択
- ブートローダのインストール
- いいえにして進めたら起動できなくなったので、(必要ないと思うが)はいを選ぶ
- インストールが完了したら「続ける」を選択し、起動完了を待つ
Debian上でターミナルを起動しxrdpをインストール
- 下記コマンドを実行
su apt update apt upgrade apt install xrdp
- /etc/xrdp/xrdp.iniの設定を書き換える
/etc/xrdp/xrdp.ini 24行目付近
; port=3389 port=vsock://-1:3389
- DebianをHyper-Vから停止する
- ホストOSのPowershellを管理者で起動
- 以下のコマンドを実行し、拡張セッションを有効にする
Set-VM -VMName Debian -EnhancedSessionTransportType HvSocket
- Debianの部分は仮想環境の名称に合わせて書き換え
- うまく起動しない場合、標準のタイプ設定に変更できる
Set-VM -VMName Debian -EnhancedSessionTransportType VMBus
- 以下のコマンドを実行し、拡張セッションを有効にする
- うまく行っていれば、これで起動・接続すれば画像のようなログイン画面が出てくるので、usernameとpasswordを入れてOKを押す
うまくいかない場合
原因調査に役立ちそうなログ
- 仮想環境で以下を直接実行し観察
Xorg :10 -config xrdp/xorg.conf
- /var/log/xrdp-sesman.log
- ~/.xorgxrdp.*.log
- /var/log/xrdp.log
ログイン画面が表示されない
- あまり起きなかったので記憶が薄い
- xrdpが有効ならほぼここまでは来るはず
ログイン後、なにも表示されない
- rootアカウントでのログインを試し、rootでログイン可能であれば各種権限の見直し
- /etc/X11/Xwrapper.config
/etc/X11/Xwrapper.configallowed_users=anybody needs_root_rights=yes
- 下記内容で/etc/udev/rules.d/99-mytty.rulesを新規作成し、
udevadm control --reload-rules
を実行
/etc/udev/rules.d/99-mytty.rulesSUBSYSTEM=="tty", KERNEL=="tty[0-7]*", GROUP="tty", MODE="0660"
- ログインユーザーに対してグループ登録
参考URLsudo usermod -aG tty,input,video username
設定的に外部からアクセスされるリスクがあまりないと思っているので、sshの設定について特に変更していないことにしているが、最終的には必要に応じてパスワード方式を禁止したりルートログインを禁止したり、そもそもssh自体をふさぐ等の措置が必要。
おわりに
もともとIPも固定せず、拡張セッションの設定も妥協して運用していたDebianの環境を後から変更しようとしたら何故かGUIでログインできなくなって色々と沼にハマったので整理・・と思って立ち上げからやったら何の苦労もなく繋がってしまった・・。
たぶん、以前に中途半端にVNCの設定とかをしようとしたことが原因でXorg? xrdp? の設定が変に書き換わっていたんじゃないかとか思いつつ、今後も似たような沼にハマる可能性はありそうなので、特にログや設定ファイルについてはメモしておこうかなと。
当てになりそうなログや設定のpathはChatGPTがかなりアドバイスをくれたけれど、最終的に核心的な修正は参考URLを見つけるまで全く出てこなかった。
とはいえ、検索キーワードを引っ張り出すのに非常に役立ったので自分にとってまったく未知で検証困難なことを相談する場合でもそこそこ役に立つ感じがした。