[Linux锐捷认证]重复造轮子,用Qt写的MentoHust图形前端
Tofloor
poster avatar
zhtengw
deepin
2012-11-01 08:50
Author
2012.12.16
做了一个原生64位的deb包,欢迎下载测试!!

2012.12.10
做了deb、rpm、slackware和解压即用的二进制包。
warmth1.png
warmth2.png

各位,我创建了一个开源项目,用Qt写了一个MentoHust的图形界面,取名叫WarMtH,现在已经发布了1.0版本,项目主页http://code.google.com/p/warmth ,代码托管到http://gitcafe.com/zhtengw/WarMtH 有兴趣的朋友不妨去看看。

    可我为什么要重复造这个轮子呢~

    起因,以前Google过图形MentoHust,无果。后来偶然在deepin的博客中发现了birl,gtk写的,试用后发现总有些不对劲,还不如直接用 MentoHust。于是我动了自己写一个的念头,但因为没空,而且自己也缺乏相应的技术知识,就没有动手。

    导火索,在宿舍,一般是我的电脑用作无线 AP,连上锐捷,他们连我的无线网。就在三个星期前,10月9日,我不在宿舍,可能无线有什么问题了,他们连不上网,就想在我那退了锐捷给他们上,可惜他们无从下手,便直接拔了我的网线~ 于是,第二天,我便决定,写一个图形前端,使不会用Linux的人也可以知道怎样认证校园网,然后我就可以安心外出那啥了XD~

    一开始,我想就直接写一个shell script,利用 kdialog或zenity作窗口交互,毕竟我只是学了一学 期JAVA,会用fortran写写物理程序,简单接触过 c,没学过c++,不懂Python,没学过算法没学过计算机基础~但我又转念一想,为何不趁此学学新东西呢。鉴于gtk程序已有,而qt又比较容易学,我就果断装上qt-creator开始了。 我先是在网上找了几个qt的入门教程,通读一 下,照着例子做了一些基本的界面,熟悉熟悉 c++语言和qt的函数。然后去图书馆借了一本 c++的书,读了函数、指针、类几章,大约理解了那些代码的意义,接着,我便上路了。 学着例子,改几个组件,很快就做出了第一个界面,也就是用户名密码的输入界面。然后便是解决调用MentoHust的问题,一通搜索(这以后每遇到一个问题,我都是这样,百度搜qt+中文功能,Google和qt帮助搜qt+英文功能,三者结合),用上了叫qprocess的类,并将用户名和密码作为参数传递,成功认证!对我来说,这真的是一个里程碑。

我对这个frontend的设想是,主界面为用户名密码输入框,有认证按钮和配置按钮。点击认证会隐藏主窗口,然后弹出认证信息窗,显示 MentoHust的终端输出,并可以最小化到托盘;点击配置可以弹出配置界面,能将配置作为参数传给MentoHust,并同时保存到配置文件。由于我没有系统地学习过计算机基础,所以只有对界面的主观设想,并没有良好的程序构思。在具体实现上就是,一有什么想法,查查资料,就动手去做。

     最初比较纠结的是,不同类的对象之间的交互, 以及信息窗口死活只有在kill掉MentoHust后才能有文字。我是将一个窗口定义为一个类的,可是在主窗口对象和信息窗口之间怎么交互纠结了好久。白驹过隙,在经过很多搜索都没得到有效的技术指导之后,我突然明白了,在我的自定义类中,将很多qt类的对象作为了成员,那么,我的自定义类也可以作为成员对象存在呀(是不是有人要笑我好笨了,^o^)。于是,我创建一个信息窗口的对象作为主窗口的私有成员,顺利完成了它们之间的交互。接着,在这篇文章[1]中发现有关缓冲的问题,下载了MentoHust的源码,给主函数中加了一 行:
  1. setvbuf(stdout, (char *)NULL, _IONBF, 0);
Copy the Code
禁用其全缓冲,成功编译,信息也乖乖地来到我的gui窗口里了,哇哦。接下来的事情就顺利很多了,主要是对qt和c++ 的理解稍微加深了一些,也比较会筛选相关信息了。

     不知不觉,我就渐渐实现了最初的设想,虽然在写的过程中仍时常冒出新想法,但我觉得是时候发一个版本了,于是我在GZLUG邮件列表里宣布了1.0版的发布。接着,我继续编写,慢慢去实现我新的想法,项目还在继续。

     本来,我是想将自己的代码合并到MentoHust中去的,但作者总没回复我,也就搁置了。
     鉴于个人水平、精力有限,程序中的很多实现显得简单低级,希望有合作者参与项目。
Reply Favorite View the author
All Replies
3 / 3
To page
nianhanxian
deepin
2013-05-02 01:10
#41
你好,我可以对你的项目进行二次开发吗
Reply View the author
dwock
deepin
2013-05-13 17:44
#42
恭喜恭喜,支持楼主!
Reply View the author
火炎焱燚
deepin
2013-05-22 03:56
#43
现在我们学校貌似用mentohust已经连不上去了,抓包了都不行。。。。
Reply View the author
dujianchi
deepin
2013-05-28 22:07
#44
我和楼主学的东西差不多,甚至比楼主多学了C++和QT……但是竟然没有楼主这种敢于创新的心态,惭愧之……
Reply View the author
tonghoil
deepin
2016-11-01 08:58
#45
认证失败:
$$ 系统提示:        需要使用管理员指定的客户端!
!! 打开libnotify失败,请检查是否已安装该库文件。
学校用的锐捷V4.99
Reply View the author
3 / 3
To page