rokkonet

PC・Androidソフトウェア・アプリの開発・使い方に関するメモ

Windowsのコマンドプロンプトから、VMware Workstation Playerの仮想マシンにインストールされたXubuntuをGUI無しで起動する

2024 Mar. 24.
2024 Mar. 09.


環境

ホストOS:Windows 11 Home Edition
仮想化ソフト:VMware Workstation 17 Player
ゲストOS:Xubuntu 22.04

デフォルトのWindows 11 Home Editionでは管理者であるAdministratorユーザーのパスワードが設定されていないので、そのパスワードを設定する

(1) WindowsにてAdministratorユーザーでサインインする(パスワード入力不要)
(2) パスワードを変更する
  設定 -> アカウント -> サインインオプション -> パスワード -> 変更
(3) Administratorユーザーからサインアウトする


ここからは、リモートデバイスSSHクライアントからSSHサーバーが稼働しているWindowsに接続しておこなった。

(手法1)

管理者としてのコマンドプロンプトを開いた上でVMwareを起動する方法

(1) リモートデバイスSSHクライアントからSSHサーバーが稼働しているWindowsに接続する


(2) Windowsコマンドプロンプト上で、管理者としてのコマンドプロンプトを起動する

> runas /user:Administrator cmd
Administratorのパスワード入力を求められる

(3) VMware仮想マシンXubuntuGUI無しで起動する

> "C:\Program Files (x86)\VMware\VMware Player\vmrun.exe" start "C:\Users\HOGE\Documents\Virtual Machines\xubuntu2204\xubuntu2204.vmx" nogui &


(オプション)

コマンドを短縮するためにXubuntu起動コマンドをバッチファイル化する

cmd-admin.bat

runas /user:Administrator cmd

runvmxu.bat

@echo off
"C:\Program Files (x86)\VMware\VMware Player\vmrun.exe" start "C:\Users\HOGE\Documents\Virtual Machines\xubuntu2204\xubuntu2204.vmx" nogui


(手法2)

一般ユーザーにて管理者権限でVMware仮想マシンXubuntuGUI無しで起動する方法

以下はリモートデバイスからSSH接続して起動する例

参考 Windows Powershellでnohupみたいなことをする #Windows - Qiita

(1) リモートPowerShell実行を許可する
参考ページ:SSHクライアントからPowerShellを開けるようにするSSHサーバーWindowsの設定(リモートPowerShell実行の許可) - rokkonet

(2) リモートSSHクライアントデバイスからWindowsSSH接続する。
   Windowsコマンドプロンプトに接続される。

(3) SSHクライアントにてPowerShellを開く

> powershell

(4) VMware Workstation/XubuntuPowerShellとは非同期で起動する

> Invoke-WmiMethod -Class Win32_Process -Name Create -ArgumentList "powershell & 'C:\Program Files (x86)\VMware\VMware Player\vmrun.exe' start 'C:\Users\HOGE\Documents\Virtual Machines\xubuntu2204\xubuntu2204.vmx' nogui"

(出力例)
__GENUS          : 2
__CLASS          : __PARAMETERS
__SUPERCLASS     :
__DYNASTY        : __PARAMETERS
__RELPATH        :
__PROPERTY_COUNT : 2
__DERIVATION     : {}
__SERVER         :
__NAMESPACE      :
__PATH           :
ProcessId        : 11100
ReturnValue      : 0
PSComputerName   :

このコマンドをバッチファイルにするとエラーになった。

(5) 上記でできるはずだが、管理者としてのPowerShellを起動する必要ある時は次のコマンドで管理者としてのPowerShellを開く

> powershell -Command "Start-Process powershell -Verb RunAs"

(6) 管理者としてのPowerShellが開いたら、VMware Workstation/XubuntuPowerShellとは非同期で起動する

> Invoke-WmiMethod -Class Win32_Process -Name Create -ArgumentList "powershell & 'C:\Program Files (x86)\VMware\VMware Player\vmrun.exe' start 'C:\Users\HOGE\Documents\Virtual Machines\xubuntu2204\xubuntu2204.vmx' nogui"

次の方法では、SSH接続を切断するとVMwareが停止してしまった

参考 バッチを自動で管理者権限で実行する方法 #Windows - Qiita

(1) バッチファイルを作成する

runvmxu2.bat

@echo off
whoami /priv | find "SeDebugPrivilege" > nul
if %errorlevel% neq 0 (
 @powershell start-process %~0 -verb runas
 exit
)

"C:\Program Files (x86)\VMware\VMware Player\vmrun.exe" start "C:\Users\HOGE\Documents\Virtual Machines\xubuntu2204\xubuntu2204.vmx" nogui

@powershell start-process %~0 -verb runas
exit
について
(ChatGPTより)
@powershell start-process %~0 -verb runasの行によって、バッチファイル内で PowerShell プロセスが新しく開始されます。この際、-verb runasによって管理者権限で PowerShell が開始されます。
バッチファイルは exit コマンドに達し、バッチファイル自体の実行が終了します。
しかし、PowerShell プロセスはまだ実行中であり、バッチファイルを再起動しています。

@powershell
この部分は、PowerShellをバッチファイル内で実行することを示しています。@記号は、実行されるコマンドを表示しないようにします。

start-process
PowerShellで別のプロセスを開始するコマンドです。この場合、新しいインスタンスでバッチファイルを開始します。

%~0
これは、現在のバッチファイルのパスを指します。%0はバッチファイル自体を指し、~は引用符を除去するための修飾子です。

-verb runas
これは、開始するプロセスに管理者権限で実行するように指示します。-verb runasは、プロセスを管理者として実行するためのオプションです。

(2) リモートデバイスSSHクライアントからSSHサーバーが稼働しているWindowsに接続する

Windowsコマンドプロンプト上で、バッチファイルを実行する

この方法ではSSH接続を切断するとVMwareも終了する。