FreeBSD下的无线网络连接

一、网卡的驱动

首先要搞清楚机器的无线网卡类型,我的无线网卡 网件(Netgear)WNA1000M 150M迷你USB无线网卡。
插入系统,自动识别到,可在 /var/log/messages 里看到如下信息:

Mar 29 22:29:16 rzsing kernel: ugen2.2:  at usbus2
Mar 29 22:29:16 rzsing kernel: urtwn0:  on usbus2

系统版本如下:

root@rzsing:~ # uname -a
FreeBSD rzsing 10.0-RELEASE FreeBSD 10.0-RELEASE #0 r260789: Thu Jan 16 22:34:59 UTC 2014    root@snap.freebsd.org:/usr/obj/usr/src/sys/GENERIC  amd64

二、加载模块

修改/boot/loader.conf,加入

################
### Wireless ###
################
legal.realtek.license_ack=1    # 许可
firmware_load="YES"    # 不加载这个会提示缺少firmware模块
if_urtwn_load="YES"    # 这个就是这款USB无线网卡的内核驱动

wlan_scan_ap_load="YES"
wlan_scan_sta_load="YES"
wlan_wep_load="YES"
wlan_ccmp_load="YES"
wlan_tkip_load="YES"

以便自动启动 urtwn。 除了 wlan 模块,必须手动指明驱动 wlan_wep、wlan_ccmp 和 wlan_tkip。

wlan_ccmp 和 wlan_tkip 这两个驱动只是针对 WPA 和 802.11i 安全协议。

三、无线网络连接

无线路由的设置选择使用 WPA-PSK 安全类型。

1、建立 /etc/wpa_supplicant.conf 内容如下:

network={
ssid="freebsdap"
psk="xxxxxxxx"
}

其中 freebsdap 是我的无线路由器的 SSID,psk(即 pre-shared key )由用户设定,与无线路由的 psk 密钥一致。不管是用 WEP 还是 WPA,如果不想自己的机器被黑,设定密码是十分必要的。

2、在 /etc/rc.conf  中加入

# wifi
wlans_urtwn0="wlan0"    # 这里一定要跟 ifconfig 列出来的无线网卡名称一致
ifconfig_wlan0="WPA DHCP"

这样在启动的时候就能从路由器自动分配到 IP 地址。
首先,我们确认网卡被识别。

# dmesg | grep Wireless
root@rzsing:~ # dmesg | grep Wireless
# 这块是笔记本自带的,没搞定,所以就买了下面这个 USB 无线网卡
iwn0:  mem 0xf7f00000-0xf7f01fff irq 17 at device 0.0 on pci3

# dmesg | grep urtwn0
urtwn0:  on usbus2
urtwn0: MAC/BB RTL8188CUS, RF 6052 1T1R    # 原来是 RTL8188CUS 芯片

然后

ifconfig wlan0 create wlandev urtwn0
ifconfig wlan0 up scan
service netif start     # 这个能自动帮你连接无线获取 IP 地址,当然如果配置正确的话,开机就可以自动连接无线。

# ifconfig urtwn0

其中 “status: associated” 表示无线网络已经连接。

四、固定你的 resolv.conf

# cat /etc/resolv.conf
nameserver 8.8.8.8
nameserver 8.8.4.4

如果你用 DHCP,有一个问题可能会不断地搔扰你,
就是 /etc/resolv.conf 里所记录的 DNS 会时不时地被修改。

当然除了暴力地让/etc/resolv.conf不能被修改外。

# 增加
chflags schg /etc/resolv.conf
# 去掉
chflags noschg /etc/resolv.conf

还可以很简单地解决此问题,往 /etc/dhclient.conf 里添加

prepend domain-name-servers 8.8.8.8, 8.8.4.4;
# See ``man 5 dhclient.conf'' for details.

详细配置 WIFI 可查看 FreeBSD 官方文档:
http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/network-wireless.html

可参考这篇 http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/network-aggregation.html#networking-lagg-wired-and-wireless

五、待机后的恢复

ifconfig lagg0 up laggproto failover laggport em0 laggport wlan0     # 待机后 wifi 会不在 lagg0 接口上,重新运行下这条命令添加上去。

ifconfig lagg0 up laggproto failover laggport em0 laggport wlan0 192.168.1.120 netmask 255.255.255.0 defaultrouter 192.168.1.1      # 待机后 wifi 会不在 lagg0 接口上,重新运行下这条命令添加上去。

ifconfig lagg0 inet 192.168.1.120 netmask 255.255.255.0
route add default 192.168.1.1  # 添加默认路由,查看路由信息命令: netstat -r 或者 route get default

关于Python脚本开头coding-utf-8的作用

关于Python脚本开头 # -*- coding: utf-8 -*- 的作用

 

1 指定文件编码类型

#!/usr/bin/python

是用来说明脚本语言是python的是要用/usr/bin下面的程序(工具)python,这个解释器,来解释python脚本,来运行python脚本的。
推荐使用下面这个

#!/usr/bin/env python

2 # -*- coding: utf-8 -*-

是用来指定文件编码为utf-8的,详情可以参考:
PEP 0263 — Defining Python Source Code Encodings
在此,详细的(主要是翻译)解释一下,为何要加这个编码声明,以及如何添加编码声明:

2.1 使用文件编码声明以前所遇到的问题

Python 2.1中,想要输入Unicode字符,只能用基于Latin-1的”unicode-escape”的方式输入 -> 对于其他非Latin-1的国家和用户,想要输入Unicode字符,就显得很繁琐,不方便。

希望是:

编程人员,根据自己的喜好和需要,以任意编码方式输入字符串,都可以,这样才正常。

2.2 建议选用的方案

所以,才有人给Python官方建议,所以才有此PEP 0263。

此建议就是:

允许在Python文件中,通过文件开始处的,放在注释中的,字符串形式的,声明,声明自己的python文件,用何种编码。

由此,需要很多地方做相应的改动,尤其是Python文件的解析器,可以识别此种文件编码声明。

2.3 具体如何声明python文件编码?

上面已经说了,是,文件开始处的,放在注释中的,字符串形式的,声明。

那具体如何声明,以什么样的格式去声明呢?

其实就是,你之前就见过的,这种:

# -*- coding: utf-8 -*-

对此格式的详细解释是:

  1. 如果没有此文件编码类型的声明,则python默认以ASCII编码去处理
    如果你没声明编码,但是文件中又包含非ASCII编码的字符的话,python解析器去解析的python文件,自然就会报错了。
  2. 必须放在python文件的第一行或第二行
  3. 支持的格式,可以有三种:

带等于号的:

# coding=

最常见的,带冒号的(大多数编辑器都可以正确识别的):

#!/usr/bin/env python
# -*- coding:  -*-

vim的:

#!/usr/bin/env python
# vim: set fileencoding= :

更加精确的解释是符合正则表达式

"coding[:=]\s*([-\w.]+)"

很明显,如果你熟悉正则表达式,也就可以写出来,其他一些合法的编码声明,以utf-8为例,比如:

coding:         utf-8
coding=utf-8
coding=                  utf-8
encoding:utf-8
crifanEncoding=utf-8

为了照顾特殊的Windows中的带BOM(’\xef\xbb\xbf’)的UTF-8
如果你的python文件本身编码是带BOM的UTF-8,即文件前三个字节是:’\xef\xbb\xbf’,那么:
即使你没有声明文件编码,也自动当做是UTF-8的编码
如果你声明了文件编码,则必须是声明了(和你文件编码本身相一致的)UTF-8
否则(由于声明的编码和实际编码不一致,自然)会报错

2.4 文件编码声明的各种例子

针对上面的规则,下面给出各种,合法的,非法的,例子,供参考:

一、合法的python文件编码声明

1、带声明了解释器的、Emacs风格的、(注释中的)文件编码声明

例子1:

#!/usr/bin/env python
# -*- coding: latin-1 -*-
import os, sys
...

例子2:

#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-
import os, sys
...

例子3:

#!/usr/bin/env python
# -*- coding: ascii -*-
import os, sys
...

2、不带声明了解释器的,直接用纯文本形式的

# This Python file uses the following encoding: utf-8
 import os, sys
 ...

3、文本编辑器也可以有多种(其他的)定义编码的方式

 #!/usr/bin/env python
 # coding: latin-1
 import os, sys
 ...
 

很明显,其中的没用-*-,直接用了coding加上编码值

4、不带编码声明的,默认当做ASCII处理

#!/usr/bin/env python
import os, sys
...

二、非法的python文件编码声明举例

1、少了coding:前缀

#!/usr/local/bin/python
# latin-1
import os, sys
...

2、编码声明不在第一行或第二行

#!/usr/bin/env python
#
# -*- coding: latin-1 -*-
import os, sys
...

3、不支持的,非法的字符编码(字符串)声明

#!/usr/bin/env python
# -*- coding: utf-42 -*-
import os, sys
...

2.5 python文件编码声明所遵循的理念

1.单个的完整的python源码文件中,只用单一的编码。

->

不允许嵌入了多种的编码的数据

否则会导致(python解释器去解析你的python文件时)报编码错误。

不太懂这段:

Any encoding which allows processing the first two lines in the way indicated above is allowed as source code encoding, this includes ASCII compatible encodings as well as certain multi-byte encodings such as Shift_JIS. It does not include encodings which use two or more bytes for all characters like e.g. UTF-16. The reason for this is to keep the encoding detection algorithm in the tokenizer simple.

2.这段也不太懂:

Handling of escape sequences should continue to work as it does now, but with all possible source code encodings, that is standard string literals (both 8-bit and Unicode) are subject to escape sequence expansion while raw string literals only expand a very small subset of escape sequences.

3.Python的分词器+编译器,会按照如下的逻辑去工作:

读取文件
不同的文件,根据其声明的编码去解析为Unicode
转换为UTF-8字符串
针对UTF-8字符串,去分词
编译之,创建Unicode对象
要注意的是:

Python中的标识符,都是ASCII的。

其余的内容,不翻译了。

至此,已经解释的够清楚了。
转载地址:http://www.crifan.com/python_head_meaning_for_usr_bin_python_coding_utf-8/

FreeBSD 10.0-RELEASE on Lenovo ThinkPad X61s

前段时间在 58 同城上淘了一台 ThinkPad X61s,他跟 X61 唯一的区别就是 X61s 的 CPU 是低电压版的。然后又从京东上买了个 120G SSD 硬盘,从此靠着一个容量为 4G 的U盘前后装了 Debian7.3、Win7_64。

上个星期六把 WIN7 全盘格式化装了 FreeBSD10.0,下面就记录下折腾的点点滴滴,方便日后查看和其他朋友们查找方便。

1、桌面环境是 Xfce4.10

2、浏览器是 firefox27.0.1 蛮老的了,我是直接 pkg install firefox 安装。编译实在是太慢了。
2、浏览器是 Firefox41.0.2

cd /usr/ports/www/firefox
make install clean

3、办公软件是 LibreOffice

4、输入法 fcitx。 目前只能用拼音,五笔还没找到安装方法,google 发现 FreeBSD10 貌似用 clan编译有问题,GCC 编译正常。这下可苦了我这个打五笔的。(现在写这篇 blog 就是用拼音打的,太累了)

5、字体。从同事的 MacbookPro 系统里拷贝了全部字体以及 WIN 下面的部分常用字体。方法是把肢体放到 /usr/local/lib/X11/fonts/ 目录下,自己新建几个目录。我的 xorg.conf 是这样的。

Section "Files"
        ModulePath   "/usr/local/lib/xorg/modules"
        FontPath     "/usr/local/lib/X11/fonts/misc/"
        FontPath     "/usr/local/lib/X11/fonts/TTF/"
        FontPath     "/usr/local/lib/X11/fonts/OTF"
        FontPath     "/usr/local/lib/X11/fonts/Type1/"
        FontPath     "/usr/local/lib/X11/fonts/100dpi/"
        FontPath     "/usr/local/lib/X11/fonts/75dpi/"
        FontPath     "/usr/local/lib/X11/fonts/LinLibertineG/"
        FontPath     "/usr/local/lib/X11/fonts/Liberation/"
        FontPath     "/usr/local/lib/X11/fonts/GentiumBasic/"
        FontPath     "/usr/local/lib/X11/fonts/winfonts"
        FontPath     "/usr/local/lib/X11/fonts/macfonts"
        FontPath     "/usr/local/lib/X11/fonts/Microsoft"
EndSection

6、有线网络 正常

7、无线。今天配置了下有可以链接上无线路由器了,问题是速率从 48Mbps 降到 1Mbps,巨慢无比,打开百度都要1分钟。

# loader 配置
vim /boot/loader.conf
################
### Wireless ###
################

# wireless
if_iwn_load="YES"
legal.intel_iwn.license_ack=1

# wlan_scan_ap_load="YES"   # Wireless
# wlan_scan_sta_load="YES"  # Wireless
# if_ath_load="YES"         # Internal LAN module
# if_ath_pci_load="YES"     # For Thinkpad X61
# wlan_wep_load="YES"
# wlan_ccmp_load="YES"
# wlan_tkip_load="YES"

#-------------------------------------------------#
在   /etc/rc.conf 加上
# wifi
wlans_ath0="wlan0"
ifconfig_wlan0="ssid XXX WPA DHCP"

#------------------------------------------------#
修改配置文件 /etc/wpa_supplicant.conf, 并在其中加入在您网络上使用的 SSID 和事先分发的密钥:
network={
    ssid="XXXX"
    psk="passwd"
}

#------------------------------------------------#
下面启用无线网络接口:
# /etc/rc.d/netif start

详细的配置请看 WIKI http://www.freebsd.org/doc/zh_CN.UTF-8/books/handbook/network-wireless.html

8、CPU 风扇失控,噪声很大。目前还没解决,可用通过 acpi_ibm 模块来控制。

9、键盘上的 Fn 控制音量,屏幕亮度,等无效,奇怪的是 Fn+F4 居然可应正常睡眠。

10、浏览器还没装 Flash,发现可以在 网易云音乐 music.163.com 听音乐,居然非常流畅。

11、屏幕截图 – xfce4-screenshooter。可以全屏、按窗口、按区域截图、支持命令行启动,截图迅速,非常推荐。
安装方法:

pkg install xfce4-screenshooter-plugin 

print 键绑定到 xfce4-screenshooter -f (桌面截取) — 但是我常用 Ctrl/Shift + print 组合键复制/粘贴终端的文字,会不会不小心截到图呢?
Ctrl+Alt+a  组合键绑定到 xfce4-screenshooter -r (区域截取,快捷键兼容企鹅默认) — 以后改成 MAC OS X 系统的组合键
从 Ports 中编译安装方法:

cd /usr/ports/
make quicksearch name=xfce4-screenshooter-plugin	# 在 Ports 查找位置
cd /usr/ports/x11/xfce4-screenshooter-plugin && make install clean
touch ~/.config/xfce4/xfce4-screenshooter		# (没有他工作不了!)
# 运行方法:菜单-附件-截图
# 进入 keyboard 设置 shotcut	(PrtScreen) 或 从菜单栏点击程序

12、音乐播放器:
Rhythmbox
安装方法: pkg install rhythmbox

Mplayer

安装方法一:

pkg install mplayer

安装方法二:prots 编译安装,需要一两个小时编译

cd /usr/ports/multimedia/mplayer
make WITHOUT_GUI=yes install clean # 不安装 Mplayer GUI

cd /usr/ports/multimedia/smplayer # Mplayer 更漂亮的 GUI 界面
make install clean
mplayer -playlist <file or url>
-loop 0 无限循环

有用的快捷键

以下是 MPlayer 中一些有用的快捷键:

f-当播放视频时,在全屏和窗口模式之间切换。你也可以在命令行中使用 -fs 选项,以便让 MPlayer 开始在全屏模式中播放。
o-在播放视频时切换 OSD(OnScreen Display)模式。
p 或 Space-暂停/继续播放。
q 或 Esc-退出 MPlayer。在 GUI 模式时,Esc 不会退出,仅停止播放。
/ 和 * 或 9 和 0-减小或增大音量。
m-静音切换。
T(通常是 Shift + t)-播放窗口置顶切换。
b 和 j-在可用的字幕间循环。
x 和 z-调整字幕的延迟时间。
I(Shift + i)-显示播放电影的文件名称。
1 和 2-调整对比度。
3 和 4-调整亮度。
5 和 6-调整色度。
7 和 8-调整饱和度。

我发现使用mplayer在命令行下听歌很有一番意镜。

13、电子书类:

chm 格式的 使用 xchm 阅读,安装方法 cd /usr/ports/deskutils/xchm && make install clean

安装完成后没有启动图标,需要右击你要打开的.chm格式文件,自己填入打开程序的执行路径 /usr/local/bin/xchm

或者使用 运行程序 填入路径也可以启动。

推荐一篇文章 详细记录了 FreeBSD XFCE 桌面环境下的各种软件 http://blog.chinaunix.net/uid-25256412-id-2939430.html

三星 GT-S7562C root 第三方Recovery google服务框架安装记录

年前刷了最新的官网包S7562CZNUANA1_S7562CCHUANA1_CHU.zip,结果无法root。

小C因为有两种基带:S7562CZNAMI2和 S7562CZNUANA1这两种。S7562CZNAMI2是2013年年底的基带版本此版本可以ROOT.
而 S7562CZNUANA1是2014年年初的基带版本这个版本的基带系统有打包系统的补丁,所以这个版本的手机不支持ROOT。
所以我们解这个版本的小C所用的方法就是刷回原来的系统。这样就可以轻松获取ROOT权限。

ROOT的方法

地址:http://pan.baidu.com/s/1o6wgEHc
这个包 S7562CZNUAMI2_S7562CCHUAMI2_CHU.7z 是可以用各类Root软件一键root的。
“SS_DL.dll”是Kies软件认定手机用的,这里完全无视即可。

里面有驱动软件。驱动下载后待系统安装好驱动后就可以开刷了。
1使用工具是Odin3 v3.06
2解压开S7562CZNUAMI2_S7562CCHUAMI2_CHU.7z,然后运行Odin3 v3.06
3然后选择他开刷吧。

成功后第一次开机会比较久,会初化程序。但进入系统后发现之前的APP都在,通信录也都在,完全没变化,但是可以ROOT了,用LEB大师删除了N多三星自带的软件。
三sansing字样的差不多都删除了。。。。

安装google的服务

比如Gmail、google play、google 通信录之类的。
所需要的工具和软件:
Odin3 v3.06
Recovery 同步CM源码编译 Recovery6.0.3.7 中文版
对应安卓 4.1.X 版本的 gapps-jb-20121011-signed.zip 下载地址: http://pan.baidu.com/s/1i3p5u8t
还要有一张SD卡

其中下面这个地址有讲到Recovery
http://tieba.baidu.com/p/2865324390#sub

工具齐全了,下面讲讲怎么刷入第三方Recovery,和刷入google框架服务包。
因系统自带的Recovery有验证签名,所以第三方的东西是刷不进去的。
1先用数据线把gapps-jb-20121011-signed.zip传到SD外置卡里面,我是用电脑上的蓝牙传的,速度不是一般的快。
2应用Odin3 v3.06把Recovery 同步CM源码编译 Recovery6.0.3.7 中文版刷入 就成功刷入了。
3按音量上键+Home键+开机键一小会,屏亮了就松开,就进入了Recovery6.0.3.7 中文版的界面。
4然后选择你的那个gapps-jb-20121011-signed.zip包就开始刷入了。
5成功后,开机也会有自动处理新软件的进程。
6然后你就看到了google play Gtalk 等等

注:google play的版本很老了,但发现Google plqy里没有自己的更新包,所以我就用豌豆夹升级了google play。

Django APPEND_SLASH 参数自动给网址结尾加’/’

Django seetings.py配置文件中默认没有 APPEND_SLASH 这个参数,但 Django 默认这个参数为 APPEND_SLASH = True。 作用就是自动在网址结尾加’/’。

如下URL视图:

urls.py:
--------
from django.conf.urls.defaults import *
from mysite.views import hello

urlpatterns = patterns('',
('^hello/$', hello),
)

因定义了hello/结尾:

http://example.com/hello
自动转到
http://example.com/hello/

默认地,任何不匹配或尾部没有斜杠(/)的申请URL,将被重定向至尾部包含斜杠的相同字眼的URL。

当 seetings.py 设置为 APPEND_SLASH = False 时,访问 http://example.com/hello 将会返回 404。

所以我觉得还是按照官方默认开启这个参数方便些,如果不想要后面的 / ,可以在 urls.py 定义成 ‘^hello$’ 这样的形式。