Vboxgtk: This parameter must be a string or Unicode object

用官方源安装的 virtualbox(目前最新版 4.2.6-3.6.11),打开一看发现是 Vboxgtk,各种不习惯(之前用惯了 QT 面界)。
当我想创建新的虚拟机时,Vboxgtk 显示 Could not create the VM:This parameter must be a string or Unicode object。
我试着 man 一下 vboxgtk,发现这软件懒得连 man 文档都没写。去到 vboxgtk 官网,发现 wiki 根本没人写。

以下是 Vboxgtk 的运行日志。
(vboxgtk:4861): Gtk-WARNING **: Unknown property: GtkGrid.n-rows

(vboxgtk:4861): Gtk-WARNING **: Unknown property: GtkGrid.n-columns

这里是截图:
!](http://ww2.sinaimg.cn/mw1024/b7704a24gw1e7u52cjkugj20la0fxjsb.jpg)

有谁知道问题可能出现在哪里吗?

去掉空格?

forums.opensuse.org/aeae-chinese/aesaeoeeeaezaeaeoe/acaezaeaeoe/484905-aeasioeaoevirtualboxaeaeaesaeyaeoeaee.html

看了一下它的源代码…

vboxgtk 不是 VirtualBox 官方的前端,virtualbox-qt 才是。

主程序是这个 iface.py:

code.google.com/p/vboxgtk/source/browse/vboxgtk/iface.py

244 行:bgo('entry_vmname').set_text('')
254 行:vm_name = bgo('entry_vmname').get_text()
663 行:def bgo(name):
664 行:    return builder.get_object(name)

这里可以看到你新建 vbox 然后由于名字问题出错的函数就这些。

其中 254 行的 vm_name = bgo(‘entry_vmname’).get_text() 是最像是出错的地方的。因为新建就是先 set_text 为空,然后再 get_text 获取,如果这么简单都出错了,那很容易猜测就是 get_text 出问题了,然后搜一下 python get_text:

python-gtk-3-tutorial.readthedocs.org/en/latest/unicode.html

4.22 Unicode in GTK+ 说了一大堆,也看不明白,不过最后有一句

我觉得挺有用的。

所以楼主可以尝试下去 /usr/lib/python2.7/site-packages/vboxgtk/iface.py 里面改一下

sudo sed -i ‘s/get_text()/get_text().decode(“utf-8”)/’ /usr/lib/python2.7/site-packages/vboxgtk/iface.py

成功固然很好,不成功也不会影响什么的。

PS: 至于那两个 GtkGrid 的 Warning,删除

/usr/share/vboxgtk/xml/vboxgtk.xml

的 1564 和 1565 行:

<property name="n_rows">2</property>
<property name="n_columns">2</property>

就可以,注意,这两行上面一定要是这个:

不然把 GtkTable 的 n_rows/n_columns 删了你就惨了。

1赞

没用 :x:

谢谢提醒,我忘记搜索 openSUSE 论坛和邮件列表的归档了。这在《提问的智慧》中提到,可是我竟然忘了,真是不好意思。
不过谢谢 Anne Hathaway,你引用的链接里的方法我已经在英文的 openSUSE 论坛中找到答案了。
forums.opensuse.org/english/get-technical-help-here/64-bit/485903-maybe-virtual-question.html 见 5 楼和 10 楼
之所以还来问问题是想在 VboxGtk 上面再折腾一番

@Anne Hathaway
不懂Python的小白表示几乎一句也看不懂,真的很对不起前辈打了那么多字、贴了那么多Code。
好吧,前辈说的这条命令我在console里面执行过,没有一句OutPut,看样子已经成功了。

sudo sed -i 's/get_text()/get_text()\.decode("utf-8")/' /usr/lib/python2.7/site-packages/vboxgtk/iface.py

但是打开VboxGtk还是出现Vboxgtk: This parameter must be a string or Unicode object这个问题。
我已经准备换回QT前端,VboxGtk问题多多受不了。但是我已经准备好要去报告这个Bug了。

至于那两个 GtkGrid 的 Warning,我只能说我什么也不知道,我在终端输入VboxGtk执行就输出这两条信息来,我根本不知道它的含义,它也丝毫不会影响到我。
可是前辈如此热情的帮我解决这个在我看来微不足道的问题,论坛管理人员还那么热情的帮我修改主题成“Vboxgtk: This parameter must be a string or Unicode object”以便更好的描述问题。真是的,自己不太习惯这种感觉……

forums.opensuse.org/english/get-technical-help-here/pre-release-beta/491696-virtualbox-not-creating-vm-opensuse-13-1-a.html

是这样的,已经不兼容了!

我第一次使用 zypper in virtualbox,图形界面是 vboxgtk,也是相同问题,然后 zypper remove virtualbox,再次安装时在 yast2 中勾选 virtualbox,但是去掉 vboxgtk,安装之后图形界面就是 virtualbox-qt 啦,可以正常使用!