VirtualBox的VRDP运行模式

其实没什么深奥的,所谓VRDP运行模式,就是虚拟机运行的时候,没有图形窗口,但可以用VirtualBox的RDP模式远程管理,说是远程其实在本机上用很方便,用起来和windows下的远程桌面一样。如果虚拟机上安装了vncserver之类的远程控制软件,并且从主机上能够通过tcp访问,也一样可以管理的。

我使用的是非开源的VirtualBox,开源版本少一些功能。以下操作在windows下也是可以参照使用的。

启动VM的命令:/usr/bin/VBoxManage startvm WinXP -type vrdp,默认是-type gui即以图形界面启动虚拟机。

控制VM比如保存状态关闭的命令:/usr/bin/VBoxManage controlvm WinXP savestate

以上命令中WinXP是虚拟机的名称,也可以用uuid替代。

开启VRDP后远程控制端口默认是3389,默认认证方式是null,即无认证,任何人都可以连接上随意控制,放在网络环境下是很不安全的。还有一种认证方式是external,可以使用主机上的用户机制来认证,不过使用之前要稍微作一下设置:

cd /lib
sudo ln -s libpam.so.0 libpam.so

不然认证无法进行,连接闪一下就关闭了。远程桌面的客户端在gnome中可以用Terminal Server Client(tsclient)或者rdesktop-vrdp -u fwolf -p - localhost

要想随重启或者关机自动关闭虚拟机,要稍微麻烦一些了,首先在/etc/init.d/下创建一个文件fwolfrc

#! /bin/sh 
# Using LSB funtions:
. /lib/lsb/init-functions
set -e
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DESC="Fwolf's Init"
NAME=fwolfrc
SCRIPTNAME=/etc/init.d/$NAME

# Function that starts the daemon/service.
d_start() {
    touch /var/lock/subsys/$NAME
    log_daemon_msg "Starting $DESC" "$NAME"
}

# Function that stops the daemon/service.
d_stop() {
    su -c "/usr/bin/VBoxManage controlvm WinXP savestate" fwolf
    rm /var/lock/subsys/$NAME
}

# Function that sends a SIGHUP to the daemon/service.
case "$1" in
  start)
        d_start
    ;;
  stop)
        d_stop
    ;;
  *)
    log_warning_msg "Usage: $SCRIPTNAME {start|stop}" >&2
    exit 3
    ;;
esac

exit 0

我也是直接从/etc/init.d/里套过来修改的,详细信息可以看参考文章或者其它关于关机自动执行脚本的资料。然后把这个文件ln为以下几个:

  • /etc/rc0.d/K01fwolfrc
  • /etc/rc6.d/K01fwolfrc
  • /etc/rc3.d/S99fwolfrc
  • /etc/rc5.d/S99fwolfrc

可以看到开机时是最后执行,而关机时是最先执行。注意我上面的脚本里,在开机是并没有自动启动虚拟机,习惯手工开。

参考