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

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

参考

麻烦一连串儿

主机不是被封了么,有些朋友就又了其它的选择,退出合租,用其它的空间,这很正常,可其中偏偏有位台湾朋友,当初打款过来的时候就费了些周折,还一下子交了2年的,现在只用了一年,虽然人家说剩下的钱不要了,咱也无功不受禄,还是要转回去。台湾朋友更大度,你帮我捐给四川的同胞吧,由此,麻烦开始了。

先想,捐款还是到壹基金吧,反正哪儿不是捐啊,于是找到网站,一看,能用支付宝,ok,继续。

可我支付宝里没钱,从银行划过来吧,选充值,选建行,充值错误,选择证书的时候空白,哦,原来的证书忘记安装了,还在以前用vmware虚拟的另外一个虚拟机下。

好在我早有准备,证书都导出来了,找到,导入,嗯?怎么导入以后哪里也找不到呢?

左试又试,原来导入位置不能选“个人”,让系统根据证书类型自己判断,然后导入的证书就出现在“其它人”里面了,“其他人”这个位置似乎不对,不管,支付,选证书的时候还是空白。

换一种导入方式,在资源管理器打开证书再导入,一看无法验证颁发者,咋回事?上网查,原来没有导入ccb的根证书。要想把原来虚拟机上的根证书导出来,还得跑vmware。

可惜,升级到ubuntu 8.04 hardy之后,原来的vmware早跑不起来了,框框折腾2小时未果,最后好歹弄了个vmware-player,算是让虚拟机转起来了,导出了ccb的根证书。

再次导入我自己的证书,仍然如故,属于“其他人”,再上网查啊查,原来导出的时候没有导出私钥,ok再开vmware虚拟机,连私钥一起导入,到这边再导入终于出现在了“个人”中。

再支付,又失败,原来建行最近把不是用usbkey的用户的网上额度都搞成0了,我自然是懒得去买key,就是买来了也不知道和virtualbox搭不搭伙。不过咱还有招,信用卡的网上支付应该没有被停,选建行的信用卡,支付。

嗯,有效期是YY/MM格式还是MM/YY格式呢?试试吧,一试不要紧,被锁了,打电话让信用卡中心解锁,ok后让等待5分钟。

5分钟后再试,又被锁住,两种有效期格式没有一种是对的?虽然卡没在手上,但日期肯定没记错,遂再call信用卡中心,解锁之后小心翼翼的问人家,上次是啥原因被锁的,回答:CVV2输入错误。

昏倒,回家找我的卡片去,然后再来继续这些麻烦。

都说计算机是高效的,可也不知是现代人的需求也提高了,还是计算机真的本身就是麻烦;互联网虽然方便,可网速慢的时候更加要命,有时候我甚至感觉上网3小时至少有1小时是在等待(我不上一般大众网站,都是国内外技术性网站,或者连公司的网,都不快,把铁通算上,更慢了),真是应了那句话,天下本无事,庸人自扰之,可现在离开计算机互联网我们还能活么?

Update @ 当日晚

按照支付宝登录控件之后还要重启电脑,寒。。。

操作成功,大功告成,感谢我们的台湾同胞。

顺便,贴一个我们主机跑unixbench的成绩,感觉还不错,当然现在没什么负载:

==============================================================
BYTE UNIX Benchmarks (Version 4.1-wht.1)
System -- Linux fwolf.com 2.6.9-023stab044.4-enterprise #1 SMP Thu May 24 17:41:23 MSD 2007 i686 i686 i386 GNU/Linux
/dev/vzfs             20000000   5340312  14659688  27% /

Start Benchmark Run: Mon Jun 23 23:30:38 CST 2008
 23:30:38 up 6 days,  2:03,  3 users,  load average: 0.12, 0.08, 0.01

End Benchmark Run: Mon Jun 23 23:40:49 CST 2008
 23:40:49 up 6 days,  2:13,  2 users,  load average: 14.06, 5.94, 2.60


                     INDEX VALUES            
TEST                                        BASELINE     RESULT      INDEX

Dhrystone 2 using register variables        376783.7 22753013.6      603.9
Double-Precision Whetstone                      83.1     1622.9      195.3
Execl Throughput                               188.3     4793.9      254.6
File Copy 1024 bufsize 2000 maxblocks         2672.0    78447.0      293.6
File Copy 256 bufsize 500 maxblocks           1077.0    21706.0      201.5
File Read 4096 bufsize 8000 maxblocks        15382.0   710319.0      461.8
Pipe-based Context Switching                 15448.6   205785.2      133.2
Pipe Throughput                             111814.6   793752.1       71.0
Process Creation                               569.3    14796.3      259.9
Shell Scripts (8 concurrent)                    44.8      848.6      189.4
System Call Overhead                        114433.5   898962.9       78.6
                                                                 =========
     FINAL SCORE                                                     207.1

Ubuntu从Gutsy升级到Hardy,php5-sybase又掉链子

升级非常简单,/etc/apt/source.list中的gutsy替换为hardy,然后aptitude updateaptitude safe-upgradeaptitude dist-upgrade,下载一大堆包安装半天就完事了,不过和以前几次升级一样,hardy中自带的php5-sybase 5.2.4-2ubuntu5.1还是不支持sybase:

[12-Jun-2008 09:13:13] PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php5/20060613+lfs/sybase_ct.so' - /usr/lib/php5/20060613+lfs/sybase_ct.so: cannot open shared object file: No such file or directory in Unknown on line 0

没办法,再修改源,降级回Gutsy中的5.2.3:

$ sudo aptitude install php5-sybase=5.2.3-1ubuntu6.2 php5-gd=5.2.3-1ubuntu6.2 php5-mysql=5.2.3-1ubuntu6.2 php5-tidy=5.2.3-1ubuntu6.2 php5-sqlite=5.2.3-1ubuntu6.2

我试过,装上这个5.2.3的sybase,也就是sybase_ct.so,是不能配合php 5.2.4使用的,只能保持php暂时不升级。

另外,这样弄了以后,php的tidy扩展不可用了,好在tidy不是必须的。

烦人的sybase。

Update @ 2008-06-13

LG未来窗775FT显示器被正确识别成了LG 775FT,不过fluxbox中默认的高分辨率可受不了,在gdm的init中用srandr设一下分辨率,修改/etc/gdm/Init/Default,在末尾的exit 0前面加上:

xrandr -s 1024x768

Gnome、GDM的分辨率一般可以在/etc/X11/xorg.conf中调整,不过fluxbox不认,只能用xrandr。

这次换了块GeForce4 MX 440 with AGP8X显卡,安装省事多了:

sudo aptitude install nvidia-glx
sudo nvidia-xconfig

驱动启用之后的logo也有变化,原来是白底色的,现在是灰色底色,反而不如以前的好看。

由于换了内核,virtualbox也要升级,并且前提是内核的header包要安装,不然vbox模块编译失败,软件能启动虚拟机却是无法启动的:

sudo apt-get install build-essential linux-headers-`uname -r`

另外由于pulseaudio的原因,目前还是个聋子。。。不过家里电脑升级后alsa一点也不受影响,原因复杂而又未知 🙁

Update @ 2008-06-14

changelog里查到关于sybase_ct的两处变更:

-- dAniel hAhler <ubuntu@thequod.de>  Wed, 19 Dec 2007 10:48:04 +0100
php5 (5.2.4-2ubuntu1) hardy
* Fixes sybase_ct for MS SQL (LP: #21995)

Bug #21995 in php5 (Ubuntu)

-- sean finney <seanius@debian.org>  Sun, 16 Sep 2007 14:46:06 +0200
php5 (5.2.4-1) unstable
* Switch php5-sybase to use the mssql extension instead of the sybase_ct
    extension.  Closes: #418734, #329065.

(后两个bug id是debian的:#418734, #329065,参见Debian Changelog php5

为什么总要把sybase和mssql往一起扯呢,分明是不一样的东东,再往下翻,和sybase有关的改动最早也是2004、2003年的了,要不说sybase可怜呢,不冤枉。经常看看这里,看什么时候才能把sybase_ct.so加上吧。

现在弄得php怪怪的,gregarius总是没法update: Segmentation fault,可能也是和版本混合有关系;升级到最新的5.2.4-2ubuntu5.1就好了,可这时sybase_ct.so又没了。

Update @ 2008-06-15

没有声音的问题终于解决了,绕了一大圈,先调了半天pulseaudio,后来没弄好,干脆卸载了,然后发现真正的问题是没有找到声卡硬件,即使这样,pulseaudio也不再装了,看网上兼容问题挺多了,还是先用alsa,等成熟了再用pa。

没有声卡硬件的问题,我的机器是Dell GX620:

00:1e.2 Multimedia audio controller: Intel Corporation 82801G (ICH7 Family) AC'97 Audio Controller (rev 01)

先怀疑是alsa的问题,按照HdaIntelSoundHowto重新编译了alsa,未果,后来从怀疑alsa转为怀疑声卡硬件,因为lsmod里面没有任何关于snd相关的内容,进而再转为怀疑内核,终于翻到了Ubuntu 8.04下AC97声卡驱动问题的解决,安装linux-ubuntu-modules-2.6.24-19-generic,重启,然后就好啦。804看来升级跨度有点大,用的新东西有点多,以前都不用安装ubuntu-modules包的。

php5-sybase的问题提交了个bug report,看有没有人搭理。

Update @ 2008-07-28

如上,如果声音有问题出不来的话,海内扎绵羊游戏会有问题,只见羊跑见不到扎中没扎中,也不出成绩板。装好ubuntu-modules后重启马上就好了。

virtualbox连接usb设备

环境:Ubuntu 7.10 Gutsy, VirtualBox 1.5.6

网上虽然已经有很多介绍的文章了,但我还是遇到了一点小问题,别人好像没有说到。

首先就是得使用virtualbox的闭源版本,也就是非ose版本,如果你细心上virtualbox的开源、闭源版本区别页面去看看的话,可以清楚的看到ose版本是没有包含usb设备支持的,怪不得我的vb窗口右下角没有usb图标呢。

其次就是不用加什么usbfs组,只要在/etc/fstab中添加一句:

none /proc/bus/usb usbfs devgid=1002,devmode=664 0 0

其中1002用你机器上真实的vboxusers组的id替换,然后sudo mount -a就可以正常使用了。

参考

顺便再多说一句,virtualbox支持网络要想设置成桥接(结果是client就像局域网中正常的另外一台电脑一样)好像是麻烦了些,其实我觉得nat模式挺好挺够用的,虽然通讯上要麻烦一些,但client中的winxp就像是运行在一个“纯净”的网络环境当中一样,非常安全,杀毒软件什么的一概不用装,很好。

再补充

又遇波折,usb设备已经能够正常识别了,Nokia 6120c插上也能够被winxp识别出来,但pc套件就是找不到设备,到virtualbox的论坛上查了一下,发现很多人使用1.5以后的版本都是这样,降级(卸载再安装)到1.4就没事了。

降级之后默认1.5的虚拟机无法启动,根据错误提示删掉几行1.5添加的专用属性就可以了,比较简单:

Could not load the settings file '/home/fwolf/.VirtualBox/Machines/WinXP/WinXP.xml' (VERR_OPEN_FAILED).
FATAL ERROR: Unknown element 'Uart'
Location: '/home/fwolf/.VirtualBox/Machines/WinXP/WinXP.xml', line 45, column 15.

另外,还需要usb 2.0 ?? 找了一台usb 2.0接口的电脑试了还不行,没有办法了,关掉virtualbox,用vmware一连接就ok了,郁闷至极。

用obex连接Nokia 6120c

首先,把电话的控制权限赋予当前用户,通过dialout用户组,编辑/etc/udev/rules.d/40-permissions.rules文件,在最后添加上:

# NOKIA 6120
BUS=="usb", SYSFS{idVendor}=="0421", SYSFS{idProduct}=="002f", GROUP="dialout"

其中的0421和002f是手机设备的供应商和产品号,可以用lsusb看:

$ lsusb
Bus 005 Device 014: ID 0421:002f Nokia Mobile Phones 

然后将当前用户加入dialout组:

$ sudo adduser fwolf dialout

最后重启udev:

$ sudo /etc/init.d/udev restart

第二步,安装obex相关程序:

$ sudo aptitude install openobex-apps obexftp obextool

根据环境不同,可能还会要求装一些其他的包,比如bwidget, tablelist什么的。装好以后,启动obextool:

$ obextool --obexcmd "obexftp -t /dev/ttyACM0 -u 1"

等待一会儿,会提示错误:

It seems, that your device does not support the memory status feature.
Memory status will be disabled

/etc/obextools/obextool.cfg中找到下列内容:

###
### Enable memory status display - only works with Siemens :-(
###
set ObexConfig(config,memstatus) 1
# set ObexConfig(config,memstatus) 0

###
### Enable file move command - only works with Siemens :-(
###
set ObexConfig(config,filemove) 1
# set ObexConfig(config,filemove) 0

看到没有,这两项只对西门子有效,所以要把设置值改为0。上传文件的时候还有错误提示:

FIle '/path/to/upload/file' could not be uploaded to '/'!
Please check your file permissions.

还是在/etc/obextools/obextool.cfg中,有如下内容:

### Nokia 6670 requires the trailing slash on all directory names
# set ObexConfig(config,dir_slash) 1
set ObexConfig(config,dir_slash) 0

如果是Nokia手机,还是设置为0,但是。。。但是始终无法连接上手机,很不情愿的放弃了。参考:

闲话

又搜寻了很久,目前没有软件能在Linux下实现Nokia pc suite的全部功能,大部分都只解决了文件传送问题,二我所想要的却是电话本、短信、日历同步功能。

恼啊,Nokia的pc suite巨慢还不说,连Linux版也没有。又从网上找了很多参考以后,我决定搞一种自助、土点儿的通讯录同步方法(这个是最重要的,短信、日历没准儿也可以照葫芦画瓢一样搞定):

  1. 备份通讯录:打开名片夹->选项->全部标记->复制->至存储卡。
  2. 准备数据:用php写一个小程序,同步abook数据和存储卡中的vcf文件,usb数据通讯模式还是很好用的,同步的处理得智能一些,让手机和abook里的更新都有效。
  3. 恢复通讯录:打开名片夹->选项->复制->从存储卡。

短信输出使用MsgExport_v1.00汉化版,感觉还不错,剩下的就是需要正则表达式发威了。