Yelp的用法

又土bie了一把,想在openSUSE上查看gtkmm3的教程,
用’rpm -qil gtkmm3-tutorial’只发现一个xml和许多图片,还报了一BUG
看了Dimstar的回复后才知道可以用yelp打开xml文档。

Yelp是一GNOME桌面的帮助文件浏览器,可以查看的有 DocBook, HTML, man, 和 info 格式的文档。

小试牛刀一把
yelp  /usr/share/gnome/help/gtkmm-tutorial/C/gtkmm-tutorial.xml
yelp /usr/share/man/man8/NetworkManager.8.gz
yelp /usr/share/info/cpp-4.6.info.gz

Advertisements

USB_ModeSwitch 介绍

今天准备升级usb_modeswitch,详细的了解了一下这个东东,分享一下

1.简介
usb_modeswitch是一个模式切换工具,用于控制含有多个USB子设备的USB设备。如果你使用过3G的无线上网卡,你应该会很清楚的了解到这一点。具体点来说,目前一些新的USB设备在内部含有windows驱动,当你第一次插入的时候,它作为一个闪存,并提示你安装驱动。
在安装驱动之后,驱动会自动切换USB设备的模式,存储设备将会消失(大多数情况),新的设备将会产生(如USB类型的Modem)。这种特征被无线设备的制造商称其为“免CD”的设备。

目前许多这种设备都可以在Linux的驱动下工作,如”usb-storage”(存储设备的驱动模块)和”options”(高速Modem的驱动模块),接下来的事情就是如何从存储设备到Modem的切换。

USB_ModeSwitch从1.0.3以后的版本集成到udev(设备管理器)上,使得其工作完全自动化。你可以通过修改配置文件来设置usb_modeswitch的参数。

您可以从本文的参考链接中获取最新的版本。需要注意的是安装时你需要安装usb-modeswitch-data的包,其中包含了设备数据库和规则文件。

2. 如何使用

usb_modeswitch由几个组件来共同协同工作。

* /lib/udev/rules.d/40-usb_modeswitch.rules – udev的规则文件,如果设备ID(制造商/产品)被识别就启动usb_modeswitch。
* /lib/udev/usb_modeswitch – 一个shell脚本调用实际的usb_modeswitch.
* /usr/sbin/usb_modeswitch_dispatcher – 检查设备并使用选择的设备文件来运行二进制程序,需要”tcl”才能运行。
* /etc/usb_modeswitch.conf – 全局的配置文件,用于调试时启用日志或禁止切换。
* /etc/usb_modeswitch.d – 该文件夹包含了针对每一个设备的独立的设置信息文件,用设备的ID来命名,如果您的设备ID出现在文件名字中,那么即使型号不同也有机会正常工作。
* /usr/sbin/usb_modeswitch – 完成切换工作的二进制程序。

通常在切换模式后会有超过一个的串口被创建,并不是所有的端口都是标准的串口,也有一些会接受AT指令,但最终只有一个有效的端口为中断传输端口。从版本1.1.2,usb_modeswitch会为正确的端口创建一个符号链接,/dev/gsmmodem,在这之前ModemManager(NetworkManager的组件)必需检测能够正确工作的端口。

3. 调试方法

更改/etc/usb_modeswitch.conf文件。

#EnableLogging=0
EnableLogging=1

这会输出日志到/var/log/usb_modeswitch_xxx,xxx为设备名。

参考链接:
http://www.draisberghof.de/usb_modeswitch/

Meego in openSUSE 11.3

openSUSE11.3的Meego可以理解为在11.3平台的基础上build的Meego环境。
接手一个Bug,研究了快一个星期了,对Meego有了个大概的了解,也碰到了很多的问题。

1. 体验Meego
从正在的链接下载Meego的ISO,简单的办法是刻一张DVD盘(CD的刻不下),然后从光盘启动,就可以试用Meego了。

http://download.opensuse.org/repositories/Meego:/Netbook/images/iso/

另一个方法就是使用虚拟机,用qemu命令。
$ qemu -m 512 -localtime -cdrom openSUSE-11.3-livecd-meego.i686-1.0.1-Build1.9.iso

上面的两个方法都不太适合调试,速度慢,每做一个操作都听见“咔咔”的读盘声,极为不爽。

2. Meego调试环境的搭建
Meego 使用的kiwi创建的iso, 通过解开iso中的数据文件来获取系统的文件,并拷贝到一个独立的分区。

$ mkdir iso meego
$ sudo mount -o loop openSUSE-11.3-livecd-meego.i686-1.0.1-Build1.9.iso iso/
$ file iso/openSUSE-11.3-livecd-meego-read-only.i686-1.0.1
iso/openSUSE-11.3-livecd-meego-read-only.i686-1.0.1: data

这个文件一个loop类型的image,使用mkclifs压缩,解开时也需要安装clifs这个包。
一是可以用unclifs解开这个包,会在当前路径下生成2.6G大小的fsdata.ext3文件,然后,dd到特定的分区上就行了。
另一种方法是用clifs挂载这个image,然后把fsdata.ext3文件拷贝出来。

$ clicfs iso/openSUSE-11.3-livecd-meego-read-only.i686-1.0.1 meego
$ file meego/fsdata.ext3
meego/fsdata.ext3: Linux rev 1.0 ext3 filesystem data (large files)
$ cp meego/fsdata.ext3 .

由此可以看出是ext3类型的文件系统,接下就是dd到一个独立的分区,当然也可以复制到U盘的分区上。

首先格式你选定的分区,在此选定sda7为Meego的分区,

$ sudo mkfs.ext3 /dev/sda7
$ sudo dd if=fsdata.ext3 of=/dev/sda7

接下来的问题就是livecd的内核和initrd不能直接用来引导系统,由于在基于openSUSE 11.3的,所以直接拷贝11.3的内核到/boot/下。

启动系统后,添加安装源

http://download.opensuse.org/repositories/Meego:/Netbook/openSUSE_11.3/

之后就可以安装你所需要的开发包。

[参考]
1. https://bugzilla.novell.com/show_bug.cgi?id=626273

NetworkManager 的调试技巧

1. 无线连接失败时可以使用下面的方法来确定是不是调用wpa_supplicant 出问题了

从邮件列表中看到一连接无线时的问题,提示:
Oct 26 00:42:52 wiese NetworkManager: supplicant_interface_acquire: assertion `mgr_state == NM_SUPPLICANT_MANAGER_STATE_IDLE’ failed

首先,检查是否存在相应的dbus文件,NetworkManager通过dbus来调用wpa_supplicant,进行无线认证。

# cat /usr/share/dbus-1/system-services/fi.epitest.hostap.WPASupplicant.service

返回的结果类似于

[D-BUS Service]
Name=fi.epitest.hostap.WPASupplicant
Exec=/usr/sbin/wpa_supplicant -c /etc/wpa_supplicant/wpa_supplicant.conf -u -f /var/log/wpa_supplicant.log
User=root

并以root权限运行下面的命令,查看返回结果

# dbus-send –system –print-reply –dest=fi.epitest.hostap.WPASupplicant /fi/epitest/hostap/WPASupplicant fi.epitest.hostap.WPASupplicant.getInterface string:wlan0

得到的结果类似于:

method return sender=:1.58 -> dest=:1.78 reply_serial=2
object path “/fi/epitest/hostap/WPASupplicant/Interfaces/0”

"delete event" 和 "destroy" 信号的使用

编写 gipsec 代码时碰到在何时调用 g_main_loop_quit 来结束程序,使用”delete event”信号还是”destroy” 信号。看了下gtk的开发文档,并google了些文章,简单的总结一下。

“delete event” 属于GtkWidget对象,当窗口管理器关闭widget会触发delete-event, 缺省的处理函数会销毁窗口,我们可以使用 g_signal_connect 来关联自己想要调用的处理函数,以关联到 main_window_quit 为例

g_signal_connect (widget, “delete_event”, G_CALLBACK (main_window_quit),NULL);

信号处理函数的定义如下

gboolean main_window_quit (GtkWidget *widget, GdkEvent *event, gpointer user_data)

delete-event的回调函数是有返回值的,如果返回TRUE,窗口管理器什么也不干;如果返回FALSE,则发出destroy信号。

有一点值得提的是我们可以把 “delete-event” 事件与 gtk_widget_hide_on_delete() 关联,这样的话当关闭窗口时,窗口会自动隐藏起来。当再显示窗口时,不需要重新构建窗口。

“destroy” 属于 GtkObject 对象,从下图可以看出 GtkWidget 由 GtkObject 派生,该信号告诉所有的对 GtkObject 对象的引用应该释放,之后这个对象将会结束其生命周期。

GObject
+—-GInitiallyUnowned
+—-GtkObject
+—-GtkWidget

“destroy”信号的处理函数,没有返回类型,并且比 “delete event” 少一个参数,这个值得注意一下,二者在user_data 为 NULL 的情况下可以通用,编译器并不会报错。当然在使用 user_data 传送数据时就会有问题了。

信号处理函数的定义如下

static void main_window_destroy (GtkObject *main_window, gpointer user_data)

在程序收到destroy信号后,GtkWidget会被销毁,但是 g_main_loop_run() 或 gtk_main() 循环还在继续,还需要调用g_main_loop_quit() 或 gtk_main_quit()来结束循环。

个人感觉,在 destroy 信号的处理函数中调用 g_main_loop_quit 来结束循环使程序退出更合适些。“delete-event” 的处理函数则用作更灵活的处理,如隐藏窗口。

参考:

http://lyre.blog.ubuntu.org.cn/2008/08/10/destroy-%E5%92%8C-delete-event/

NetworkManager 无线网络的类型

本文以NetworkManager 0.7.0为例介绍无线网络的类型,以下简称为NM,点击NM的图标,会扫描到非隐藏的无线网络,通过点击“连接隐藏的无线网络…“可以看到NM支持的无线网络的类型,截图如下:

WEP: 有线等效保密协议,Wired Equivalent Privacy的简称。WEP的目标就是通过对无线电波里的数据加密提供安全性,如同有线局域网一样的端-端的发送。但它的安全性一直受到人们的质疑,一个服务区内的所有用户都共享同一把密钥,WEP破解起来非常容易,就像一把锁在门上的塑料锁。

WEP 40/128 bit key: WEP需要输入5个字节(40 bits),WEP-128需要输入13 字节(104 bits)。该处的密钥只能数字0-9和字母A-F。

WEP 128-bit Passphrase:可以输入8到63个ASCII的字符作为密钥。

Dynamic WEP(802.1x): 动态的WEP针对WEP的缺点而提出的折中方案,可以定期改变密钥以保证最大的安全。

LEAP: EAP是Extensible Authentication Protocol的缩写,意思是扩展认证协议,用于无线网络和点对点连接之间的认证。LEAP (Lightweight Extensible Authentication Protocol)则代表轻量级的扩展认证协议,由Cisco开发的专有的协议。

WPA: Wi-Fi Protected Access的缩写,意味着一种保护无线电脑网络(Wi-Fi)安全的系统。WPA2比WPA实现了更完整的标准,所以在NM中以”WPA & WPA2″来表示两个版本都支持。

WPA & WPA2 Personal: WPA个人版,使用预共享密钥(pre-shared key)的版本。

WPA & WPA2 Enterprise:WPA 企业版,使用802.1X认证的版本。

参考资料:
http://hostap.epitest.fi/wpa_supplicant/
http://zh.wikipedia.org/w/index.php?title=WPA&variant=zh-cn
http://www.tech-faq.com/wep-key-passphrase.shtml