VirtualBox Headless后台运行Linux

前言

如何在Windows上优雅的使用Linux,一直是一个困惑我的问题。WSL虽好,但是没法在Linux上安装docker;WSL2虽然可以安装docker了,但是这个系统和主机通信又是一个大麻烦,就连最基本的安装软件都要每次开机修改hostname(虽然有能修改后不复原的办法,但我没实验成功);使用虚拟机软件,又会占用太多的硬件资源,影响主机性能。前段时间偶然看到B站一个Up主提到使用virtualbox的headless无界面启动。遂研究了一下,但是网络上的资料大都太散太少,没有完整的介绍该方法。本文详细介绍在Windows上安装使用一个最优雅的Linux系统。

准备

虚拟机软件:Oracle VM VirtualBox

Linux镜像:本文使用 Ubuntu20.04

一个远程连接软件:可以使用Windows自带的powershell或者其他软件,本文使用Termius

前提步骤

首先需要使用VirtualBox安装好虚拟机;创建虚拟机的时候,推荐使用一个较为简单的名字作为虚拟机的名字,后面命令要使用;安装前的设置注意一点,设置密码的时候需要选择不使用密码登陆。如果该处没设置,安装好后进入设置用户中关闭该项,原因是如果打开该项,后台无法完全启动系统,最终系统会停留在用户登陆界面。

后台启动方法

  1. 首先进入图形化的Linux虚拟机中,更新源,使用sudo apt install openssh-server安装ssh的服务端。
  2. 检查开机是否需要密码。需要取消掉开机的密码。
  3. 关闭虚拟机,主机使用命令行进入VirutalBox的安装位置,默认情况在C:\Program Files\Oracle\VirtualBox\下,此处推荐使用cmd进入该位置,cmd可以直接调用文件名字作为命令,Powershell需要使用路径加文件名才能执行命令
  4. 执行vboxheadless --startvm|-s 虚拟机名称|uuid vrde=off即可以桥接网络的模式无界面打开
  5. 执行vboxmanage controlvm 虚拟机名称 acpipowerbutton即可关闭虚拟机

其他命令

VBoxManage list vms - 查看有哪些虚拟机

VBoxManage list vms --long - 查看虚拟机的详细内容

VBoxManage list runningvms - 查看运行中的虚拟机

VBoxManage startvm <vm_name> -type headless - 无界面运行虚拟机,与vboxheadless的区别就是这个命令是完全后台运行。注意:使用该命令需要将虚拟机手动设置为桥接网络。

vboxheadless --startvm|-s 虚拟机名称|uuid vrde=off - 无界面运行虚拟机,在命令行卡住,停止命令行就停止了虚拟机

VBoxManage controlvm <vm_name> acpipowerbutton - 正常关闭虚拟机

VBoxManage controlvm <vm_name> poweroff - 强制关闭虚拟机

VBoxManage guestproperty enumerate <vm_name> - 查看虚拟机配置信息,可以通过| findstr IP 查询到虚拟机的ip

参考批处理脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
@echo off
cd /d C:\Program Files\Oracle\VirtualBox\
@chcp 65001
:1
echo 1:开机
echo 2:关机
echo 3:查看ip
echo 4:查看状态
echo 5: 退出
set /P a=输入:
cls
echo %a%
if %a% == 1 (
vboxmanage startvm Ubuntu -type headless
) else if %a% == 2 (
vboxmanage controlvm Ubuntu acpipowerbutton
) else if %a% == 3 (
vboxmanage guestproperty enumerate Ubuntu | findstr IP
) else if %a% == 4 (
vboxmanage list runningvms
) else if %a% == 5 (
exit
)
goto 1

参考文章

Virtualbox后台启动及获取虚拟机ip方法及windows远程登录方法