arch开机自动认证简析
前几天搞了一下开机自启动认证。环境是arch。学校的认证是H3C的,但学校官方给的linux版认证客户端臃肿且只支持ubuntu、rehat及衍生版。好在已经大牛解决这一问题,出了个小巧的python版的认证客户端yah3c
运行yah3c只要在终端输入sudo yah3c即可,但是因为用了sudo,必定还要手工输入密码,而且运行yah3c时还有一处要选择是否新建账号或者使用哪一个已经使用过的账号。要想实验开机自启动认证,就得先除去这两个输入。
首先是sudo的密码输入除去,运行sudo visudo 加入
www.zhishiwu.com
1 $USER ALL=NOPASSWD: /usr/bin/yah3c
即可。这里要注意的是,不能直接修改/etc/sudoers 文件。因为修改文件过程中会改变sudoers文件的权限从而导致sudo不能用。而且sudo的每一次执行都会读取一次/ets/sudoers,也即是说,一但你改动了/etc/sudoers,你就没机会再用sudo去把sudoers文件的权限改正确了。。唯一的办法是用root账号登录再将/etc/sudoers的权限改为0440.
至于yah3c的选择输入,就要改动yah3c的代码了,要改动的代码在/usr/lib/python2.7/site-packages/yah3c/yah3c.py。定位到51行,将
1 choice = int(raw_input('Your choice: '))
注释,在下面增加一行
1 choice = 1
又因为yah3c只是认证,还要用networkmanager或者dhcp自动获取一下ip。我这里用的是networkmanager,命令如下 :
www.zhishiwu.com
1 nmcli con up id "有线连接的名称"
然后还要考虑一下如果第一次认证时失败了能让它循环认证。我判断是否认证成功的方法是看能否获取到ip。检查ip可以用ifconfig再用正则表达式扣出来。代码如下:
1 ifconfig eth0 | grep inet | grep -v inet6 | grep -v 127.0.0.1 | awk '{print $2}
再考虑到有可能在无线网络的环境,所以还要检测一下能否通过wlan0得到ip,若能得到,则退出循环,避免死循环。
1 if [ -z $theip ]
2 then
3 theip=`ifconfig wlan0 | grep inet | grep -v inet6 | grep -v 127.0.0.1 | awk '{print $2}'`
4 fi
所以最后的脚本如下:
01
#!/bin/bash
02 www.zhishiwu.com
theip='';
03
while [ -z $theip ]
04
do
05
sudo yah3c
06
sleep 2
07
nmcli con up id "Wired connection 1"
08
sleep 2
09
theip=`ifconfig eth0 | grep inet | grep -v inet6 | grep -v 127.0.0.1 | awk '{print $2}'`
10
if [ -z $theip ]
11
then
12
theip=`ifconfig wlan0 | grep inet | grep -v inet6 | grep -v 127.0.0.1 | awk '{print $2}'`
13 www.zhishiwu.com
fi
14
done
再最后就是把脚本放到合适的地方。我用的是kde环境,在kde环境准备好后会自动运行 ~/.kde4/Autostart/文件夹下的脚本。所以我便把脚本放到那。
貌似到此搞定了,但实践中发现有bug。。。在自动认证后,一开始确实能正常上网。但有时会再一段时间后自动掉线。目前尚不知是kde4/Autostart的机制的问题还是yah3c的问题。。
另外,我觉得开机自启动还是一个比较笨的方法的,如果能在第一次检测到有网线连接时启动脚本,那就perfect了