其实没什么深奥的,所谓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
可以看到开机时是最后执行,而关机时是最先执行。注意我上面的脚本里,在开机是并没有自动启动虚拟机,习惯手工开。
参考
- [VRDP and PAM authentication](http://forums.virtualbox.org/viewtopic.php?t=5264)
- [实现linux在关机或重启时自动执行某个任务](http://www.linuxidc.com/Linux/2007-06/4892.htm)