为了研究apk的签名,看了下签名和加密的问题,不过本文和apk的签名毫无关系。
加密算法有两种,对称密钥算法和非对称密钥算法。对称密钥算法包括DES,AES等,非对称密钥算法包括RSA,DSA等。对称密钥算法在加密和解密的时候使用同一个密钥。加密解密速度快,如果同时和多方通信,密钥管理成本高;非对称密钥算法则有私钥和公钥之分。私钥保留在用户手中,不对外透漏,公钥公布在互联网上,比如可以放在keys.gnupg.net。公钥和私钥都可以用来加密数据。密钥管理成本低,但是加密解密速度慢。Gnupg简称gpg,是生成和管理密钥的工具。Gnome用seahorse做前端,KDE用Kgpg做前端。
签名是指身份认证,即证明和B通讯的另一方就是A,而不是C冒充的。即A使用私钥签名,B使用A的公钥进行解密。解密成功,则证明对方就是A。
加密是指将信息加密,即使其他用户获得加密后的信息,也无法获得信息正确内容。即B使用A的公钥进行加密,再将加密数据传给A,A收到数据后,利用私钥解密,C即使获得了加密数据,但是由于C没有A的私钥,因此信息依然是安全的。
gpg 命令:
生成key: gpg --gen-key
修改key信息: gpg --edit-key ilout
查看当前的公钥: gpg --list-keys
查看当前的私钥: gpg --list-secret-keys
删除私钥:gpg --delete-secret-keys ilout
删除公钥:gpg --delete-keys ilout
加密信息:gpg -e -r ilout file
解密信息:gpg -d file.asc >file
导出公钥:gpg --export -a ilout >ilout.pk
将公钥上传到网站: gpg --import --keyserver keys.gnupg.net --send-key E7201101
从文件导入公钥:gpg --import -a ilout.pk
从网站导入公钥:gpg --import --keyserver keys.gnupg.net --recv-keys E7201101
导入公钥后需要对公钥签名,以表示信任该公钥: gpg --sign-key E7201101
上述的签名过程有个漏洞:如果C谎称自己是A,然后将自己的公钥发送给B,B直接导入假冒的公钥,也可以顺利的完成签名认证的过程。为了解决此问题,就产生了数字证书来保证A的公钥无法被任何人冒充。
2012年2月20日星期一
2012年1月18日星期三
linux利用无线网卡做热点
这是一篇失败的文档,只留作记录,无太大参考价值。
操作系统:opensuse12.1 i586
内核:3.1.0-1.2-desktop
硬件: thinkpad x201i
网卡:Intel Corporation Centrino Advanced-N 6200
软件:hostapd-0.7.3
参考:http://linuxwireless.org/en/users/Documentation/hostapd
过程:
1 创建了最简单的一个配置文件 /tmp/hostapd.min.conf:
interface=wlan0
driver=nl80211
ssid=test
channel=1
2 启动hostapd,hostapd -dd /tmp/hostapd.min.conf,报错:
nl80211: Register Action command failed: ret=-114 (Operation already in progress)
nl80211: Register Action match - hexdump(len=1): 06
nl80211: Failed to register Action frame processing - ignore for now
nl80211: Add own interface ifindex 3
nl80211: Failed to set interface 3 to mode 3: -95 (Operation not supported)
nl80211: Failed to set interface 3 to mode 3: -95 (Operation not supported)
nl80211: Interface mode change to 3 from 0 failed
nl80211: Failed to set interface wlan0 into AP mode
nl80211 driver initialization failed.
ELOOP: remaining socket: sock=4 eloop_data=0x80c5958 user_data=0x80c5e38 handler=0x80751f0
ELOOP: remaining socket: sock=6 eloop_data=0x80c7ae0 user_data=(nil) handler=0x807f2f0
经 google 有人解答是linux驱动不支持AP,不清楚该如何验证这种说法。(理论依据?)基本死翘翘了,不再折腾了。
操作系统:opensuse12.1 i586
内核:3.1.0-1.2-desktop
硬件: thinkpad x201i
网卡:Intel Corporation Centrino Advanced-N 6200
软件:hostapd-0.7.3
参考:http://linuxwireless.org/en/users/Documentation/hostapd
过程:
1 创建了最简单的一个配置文件 /tmp/hostapd.min.conf:
interface=wlan0
driver=nl80211
ssid=test
channel=1
2 启动hostapd,hostapd -dd /tmp/hostapd.min.conf,报错:
nl80211: Register Action command failed: ret=-114 (Operation already in progress)
nl80211: Register Action match - hexdump(len=1): 06
nl80211: Failed to register Action frame processing - ignore for now
nl80211: Add own interface ifindex 3
nl80211: Failed to set interface 3 to mode 3: -95 (Operation not supported)
nl80211: Failed to set interface 3 to mode 3: -95 (Operation not supported)
nl80211: Interface mode change to 3 from 0 failed
nl80211: Failed to set interface wlan0 into AP mode
nl80211 driver initialization failed.
ELOOP: remaining socket: sock=4 eloop_data=0x80c5958 user_data=0x80c5e38 handler=0x80751f0
ELOOP: remaining socket: sock=6 eloop_data=0x80c7ae0 user_data=(nil) handler=0x807f2f0
经 google 有人解答是linux驱动不支持AP,不清楚该如何验证这种说法。(理论依据?)基本死翘翘了,不再折腾了。
2012年1月13日星期五
android手机利用Linux主机的网络上网
PC利用android手机的网络联网,英语称为usb tethering;如果反过来,手机利用PC的网络上网,则称为reverse-tethering。如果PC为windows或者MAC,则在安装htc sync后,可以直接进行reverse-tethering;如果PC的操作系统为Linux,则有两种方案:
1 将Linux配置为路由器,利用NAT联网。
2 在Linux上启动bridge,然后联网。
本文简述利用NAT上网的办法,bridge方式与此大同小异。
思路:
1 利用usb线将root过的手机连接到PC上,并在PC上创建虚拟设备usb0
2 在android手机上设定usb0设备的IP地址,dns,路由信息
3 在PC上设定新创建的网卡usb0的IP地址(该地址即为android设备的网关地址)
4 在PC上打开ip_forward,并配置NAT
软硬件要求:
1 root过的android手机
2 Gscript(只为方便,非必须)
配置过程:
1 修改/sys/devices/platform/msm_hsusb/usb_function_switch 的值:
经测试,该文件中值的含义如下:
==== 1 ==== usb_mass_storage:enable
==== 2 ==== adb:enable
==== 4 ==== ether:enable
==== 8 ==== diag:enable
==== 16 ==== serial:enable
==== 32 ==== projector:enable
==== 128 ==== adb:enable
==== 256 ==== modem:enable
==== 512 ==== cdc_ethernet:enable
比如echo 1 >usb_function_switch,表示将android设备作为存储;echo 6>usb_function_switch,表示在PC上创建网卡usb0,并打开adb调试开关。为方便调试,最好将值修改为6,否则直接设定为4也可以。
2 利用setprop配置android的网络信息
dnsserver="8.8.8.8"
setprop net.usb0.ps.ip 192.168.99.1
setprop net.usb0.ps.mask 255.255.255.0
setprop net.usb0.ps.gw 192.168.99.254
setprop net.usb0.ps.dns $dnsserver
setprop net.dns1 $dnsserver
ifconfig usb0 192.168.99.1 netmask 255.255.255.0
ip route add default via 192.168.99.254 dev usb0
3 在Linux主机上,设置usb0的IP地址为192.168.99.254,掩码为24位。可利用ifconfig,或者直接在NetworkManager中设置,不再详述。
4 在Linux主机上设定NAT以及ip_forward
iptables -t nat -A POSTROUTING -j MASQUERADE
echo 1>/proc/sys/net/ipv4/ip_forward
经过以上操作后,android手机理论上就可以上网了。但经过测试,发现不是所有应用程序都可以连接网络,原因见该链接,但是没有解决方案 http://android.stackexchange.com/questions/14046/android-usb-reverse-tethering-how-to-fool-the-apps 。 可以连接网络的程序有:支付宝,电子市场,uc浏览器;无法连接网络的程序有:gtalk,新浪微博,安全隧道。
为方便输入以上命令,最好安装Gscript,创建一个脚本net.sh,内容如下:
#!/bin/sh
dnsserver="8.8.8.8"
echo 6 >/sys/devices/platform/msm_hsusb/usb_function_switch
sleep 3
setprop net.usb0.ps.ip 192.168.99.1
setprop net.usb0.ps.mask 255.255.255.0
setprop net.usb0.ps.gw 192.168.99.254
setprop net.usb0.ps.dns $dnsserver
setprop net.dns1 $dnsserver
ifconfig usb0 192.168.99.1 netmask 255.255.255.0
ip route add default via 192.168.99.254 dev usb0
附录:
如果需要将android手机设置成为硬盘,除了需要
echo 3 >/sys/devices/platform/msm_hsusb/usb_function_switch 以外,还需要设定存储设备的路径,对于我的手机,需要:
echo "/dev/block/vold/179:64" >/sys/devices/platform/usb_mass_storage/lun0/file
具体的值,可以先将手机挂载为硬盘设备,然后记录下 /sys/devices/platform/usb_mass_storage/lun0/file的内容,最后写个disk.sh 文件利用Gscript运行:
#!/bin/sh
echo 3 >/sys/devices/platform/msm_hsusb/usb_function_switch
echo "/dev/block/vold/179:64" >/sys/devices/platform/usb_mass_storage/lun0/file
1 将Linux配置为路由器,利用NAT联网。
2 在Linux上启动bridge,然后联网。
本文简述利用NAT上网的办法,bridge方式与此大同小异。
思路:
1 利用usb线将root过的手机连接到PC上,并在PC上创建虚拟设备usb0
2 在android手机上设定usb0设备的IP地址,dns,路由信息
3 在PC上设定新创建的网卡usb0的IP地址(该地址即为android设备的网关地址)
4 在PC上打开ip_forward,并配置NAT
软硬件要求:
1 root过的android手机
2 Gscript(只为方便,非必须)
配置过程:
1 修改/sys/devices/platform/msm_hsusb/usb_function_switch 的值:
经测试,该文件中值的含义如下:
==== 1 ==== usb_mass_storage:enable
==== 2 ==== adb:enable
==== 4 ==== ether:enable
==== 8 ==== diag:enable
==== 16 ==== serial:enable
==== 32 ==== projector:enable
==== 128 ==== adb:enable
==== 256 ==== modem:enable
==== 512 ==== cdc_ethernet:enable
比如echo 1 >usb_function_switch,表示将android设备作为存储;echo 6>usb_function_switch,表示在PC上创建网卡usb0,并打开adb调试开关。为方便调试,最好将值修改为6,否则直接设定为4也可以。
2 利用setprop配置android的网络信息
dnsserver="8.8.8.8"
setprop net.usb0.ps.ip 192.168.99.1
setprop net.usb0.ps.mask 255.255.255.0
setprop net.usb0.ps.gw 192.168.99.254
setprop net.usb0.ps.dns $dnsserver
setprop net.dns1 $dnsserver
ifconfig usb0 192.168.99.1 netmask 255.255.255.0
ip route add default via 192.168.99.254 dev usb0
3 在Linux主机上,设置usb0的IP地址为192.168.99.254,掩码为24位。可利用ifconfig,或者直接在NetworkManager中设置,不再详述。
4 在Linux主机上设定NAT以及ip_forward
iptables -t nat -A POSTROUTING -j MASQUERADE
echo 1>/proc/sys/net/ipv4/ip_forward
经过以上操作后,android手机理论上就可以上网了。但经过测试,发现不是所有应用程序都可以连接网络,原因见该链接,但是没有解决方案 http://android.stackexchange.com/questions/14046/android-usb-reverse-tethering-how-to-fool-the-apps 。 可以连接网络的程序有:支付宝,电子市场,uc浏览器;无法连接网络的程序有:gtalk,新浪微博,安全隧道。
为方便输入以上命令,最好安装Gscript,创建一个脚本net.sh,内容如下:
#!/bin/sh
dnsserver="8.8.8.8"
echo 6 >/sys/devices/platform/msm_hsusb/usb_function_switch
sleep 3
setprop net.usb0.ps.ip 192.168.99.1
setprop net.usb0.ps.mask 255.255.255.0
setprop net.usb0.ps.gw 192.168.99.254
setprop net.usb0.ps.dns $dnsserver
setprop net.dns1 $dnsserver
ifconfig usb0 192.168.99.1 netmask 255.255.255.0
ip route add default via 192.168.99.254 dev usb0
附录:
如果需要将android手机设置成为硬盘,除了需要
echo 3 >/sys/devices/platform/msm_hsusb/usb_function_switch 以外,还需要设定存储设备的路径,对于我的手机,需要:
echo "/dev/block/vold/179:64" >/sys/devices/platform/usb_mass_storage/lun0/file
具体的值,可以先将手机挂载为硬盘设备,然后记录下 /sys/devices/platform/usb_mass_storage/lun0/file的内容,最后写个disk.sh 文件利用Gscript运行:
#!/bin/sh
echo 3 >/sys/devices/platform/msm_hsusb/usb_function_switch
echo "/dev/block/vold/179:64" >/sys/devices/platform/usb_mass_storage/lun0/file
2011年11月7日星期一
sysctl 中 vm.overcommit_memory 的含义
vm.overcommit_memory 表示内核在分配内存时候做检查的方式。这个变量可以取到0,1,2三个值。对取不同的值时的处理方式都定义在内核源码 mm/mmap.c 的 __vm_enough_memory 函数中。
取 1 的时候 :
此时宏为 OVERCOMMIT_ALWAYS,函数直接 return 0,分配成功。
取 2 的时候:
此时宏为 OVERCOMMIT_NEVER,内核计算:内存总量×vm.overcommit_ratio/100+SWAP 的总量,如果申请空间超过此数值,则分配失败。vm.overcommit_ratio 的默认值为50。
取 0 的时候:
此时宏为 OVERCOMMIT_GUESS,内核计算:NR_FILE_PAGES 总量+SWAP总量+slab中可以释放的内存总量,如果申请空间超过此数值,则将此数值与空闲内存总量减掉 totalreserve_pages(?) 的总量相加。如果申请空间依然超过此数值,则分配失败。
以上为粗略描述,在实际计算时,如果非root进程,则在计算时候会保留3%的空间,而root进程则没有该限制。详细过程可看源码。
大概过程如上所述,但还有很多数据结构还没搞清楚。
2011年11月4日星期五
resolv.conf 的配置和dns解析的关系
本文为笔记,部分地方不准确。目的:resolv.conf 中配置了 search 选项和 domain 选项后,检查系统查询域名的步骤和行为。
0 若不存在 resolv.conf,则将本机做为dns服务器,然后取主机名的domain,然后附加到域名中进行查询。查询时首先查询AAAA记录,再查询A记录。以下均为查询nxyi-dns2.hst.xyi.cn.xdc.net时,得到的不同结果。
1 若没有search(最长为6个)和domain选项,则取主机名的domain,然后附加到域名中进行查询:
17-Oct-2011 23:35:17.536 queries: client 172.22.41.176#44119: query: nxyi-dns2.hst.xyi.cn.xdc.net IN AAAA +
17-Oct-2011 23:35:17.536 queries: client 172.22.41.176#56562: query: nxyi-dns2.hst.xyi.cn.xdc.net.hst.xyi.cn.xdc.net IN AAAA +
17-Oct-2011 23:35:17.536 queries: client 172.22.41.176#53616: query: nxyi-dns2.hst.xyi.cn.xdc.net IN A +
2 如有domain,(domain xdc.net)则,附加domain到域名中进行查询:
17-Oct-2011 23:38:02.031 queries: client 172.22.41.176#43411: query: nxyi-dns2.hst.xyi.cn.xdc.net IN AAAA +
17-Oct-2011 23:38:02.031 queries: client 172.22.41.176#41697: query: nxyi-dns2.hst.xyi.cn.xdc.net.xdc.net IN AAAA +
17-Oct-2011 23:38:02.031 queries: client 172.22.41.176#35978: query: nxyi-dns2.hst.xyi.cn.xdc.net IN A +
3 若有多个search (search hst.xyi.cn.xdc.net hst.dsl.crm.xdc.net hst.x.dw.xdc.net) 则依次附加,然后查询,顺序依然首先查询AAAA记录,再查A记录:
17-Oct-2011 23:39:25.272 queries: client 172.22.41.176#49875: query: nxyi-dns2.hst.xyi.cn.xdc.net IN AAAA +
17-Oct-2011 23:39:25.272 queries: client 172.22.41.176#36371: query: nxyi-dns2.hst.xyi.cn.xdc.net.hst.xyi.cn.xdc.net IN AAAA +
17-Oct-2011 23:39:25.272 queries: client 172.22.41.176#33367: query: nxyi-dns2.hst.xyi.cn.xdc.net.hst.dsl.crm.xdc.net IN AAAA +
17-Oct-2011 23:39:25.272 queries: client 172.22.41.176#42772: query: nxyi-dns2.hst.xyi.cn.xdc.net.hst.x.dw.xdc.net IN AAAA +
17-Oct-2011 23:39:25.273 queries: client 172.22.41.176#45355: query: nxyi-dns2.hst.xyi.cn.xdc.net.xdc.net IN AAAA +
17-Oct-2011 23:39:25.273 queries: client 172.22.41.176#35669: query: nxyi-dns2.hst.xyi.cn.xdc.net IN A +
4 若nxyi-dns5.hst.xyi.cn.xdc.net没有找到,则附加search进行查询A记录:
17-Oct-2011 23:52:21.527 queries: client 172.22.41.176#56298: query: nxyi-dns5.hst.xyi.cn.xdc.net IN AAAA +
17-Oct-2011 23:52:21.528 queries: client 172.22.41.176#40880: query: nxyi-dns5.hst.xyi.cn.xdc.net.xyi.cn.xdc.net IN AAAA +
17-Oct-2011 23:52:21.528 queries: client 172.22.41.176#40359: query: nxyi-dns5.hst.xyi.cn.xdc.net IN A +
17-Oct-2011 23:52:21.528 queries: client 172.22.41.176#36129: query: nxyi-dns5.hst.xyi.cn.xdc.net.xyi.cn.xdc.net IN A +
5 若存在ndots:6,则由于域名仅仅包含了5个点,则顺序改变,首先附加search查找,然后再查找域名本身。默认为ndots值为1,即域名只要包含一个点,就不会首先附加search:
17-Oct-2011 23:53:04.260 queries: client 172.22.41.176#50630: query: nxyi-dns5.hst.xyi.cn.xdc.net.xyi.cn.xdc.net IN AAAA +
17-Oct-2011 23:53:04.260 queries: client 172.22.41.176#38081: query: nxyi-dns5.hst.xyi.cn.xdc.net IN AAAA +
17-Oct-2011 23:53:04.260 queries: client 172.22.41.176#36043: query: nxyi-dns5.hst.xyi.cn.xdc.net.xyi.cn.xdc.net IN A +
17-Oct-2011 23:53:04.260 queries: client 172.22.41.176#58401: query: nxyi-dns5.hst.xyi.cn.xdc.net IN A +
总结:
系统查询域名主要使用 gethostbyname(过时) 和 getaddrinfo 两个函数,二者接收的参数和返回的数据类型都不相同。其中 gethostbyname 实际调用 gethostbyname2,根据传递的参数可以查询AAAA或者A记录。getaddrinfo 功能更强大,可以控制是查询AAAA,A,或者先AAAA后A记录。详细可见glibc中 resolv/gethnamaddr.c 和 sysdeps/posix/getaddrinfo.c 中的实现。
0 若不存在 resolv.conf,则将本机做为dns服务器,然后取主机名的domain,然后附加到域名中进行查询。查询时首先查询AAAA记录,再查询A记录。以下均为查询nxyi-dns2.hst.xyi.cn.xdc.net时,得到的不同结果。
1 若没有search(最长为6个)和domain选项,则取主机名的domain,然后附加到域名中进行查询:
17-Oct-2011 23:35:17.536 queries: client 172.22.41.176#44119: query: nxyi-dns2.hst.xyi.cn.xdc.net IN AAAA +
17-Oct-2011 23:35:17.536 queries: client 172.22.41.176#56562: query: nxyi-dns2.hst.xyi.cn.xdc.net.hst.xyi.cn.xdc.net IN AAAA +
17-Oct-2011 23:35:17.536 queries: client 172.22.41.176#53616: query: nxyi-dns2.hst.xyi.cn.xdc.net IN A +
2 如有domain,(domain xdc.net)则,附加domain到域名中进行查询:
17-Oct-2011 23:38:02.031 queries: client 172.22.41.176#43411: query: nxyi-dns2.hst.xyi.cn.xdc.net IN AAAA +
17-Oct-2011 23:38:02.031 queries: client 172.22.41.176#41697: query: nxyi-dns2.hst.xyi.cn.xdc.net.xdc.net IN AAAA +
17-Oct-2011 23:38:02.031 queries: client 172.22.41.176#35978: query: nxyi-dns2.hst.xyi.cn.xdc.net IN A +
3 若有多个search (search hst.xyi.cn.xdc.net hst.dsl.crm.xdc.net hst.x.dw.xdc.net) 则依次附加,然后查询,顺序依然首先查询AAAA记录,再查A记录:
17-Oct-2011 23:39:25.272 queries: client 172.22.41.176#49875: query: nxyi-dns2.hst.xyi.cn.xdc.net IN AAAA +
17-Oct-2011 23:39:25.272 queries: client 172.22.41.176#36371: query: nxyi-dns2.hst.xyi.cn.xdc.net.hst.xyi.cn.xdc.net IN AAAA +
17-Oct-2011 23:39:25.272 queries: client 172.22.41.176#33367: query: nxyi-dns2.hst.xyi.cn.xdc.net.hst.dsl.crm.xdc.net IN AAAA +
17-Oct-2011 23:39:25.272 queries: client 172.22.41.176#42772: query: nxyi-dns2.hst.xyi.cn.xdc.net.hst.x.dw.xdc.net IN AAAA +
17-Oct-2011 23:39:25.273 queries: client 172.22.41.176#45355: query: nxyi-dns2.hst.xyi.cn.xdc.net.xdc.net IN AAAA +
17-Oct-2011 23:39:25.273 queries: client 172.22.41.176#35669: query: nxyi-dns2.hst.xyi.cn.xdc.net IN A +
4 若nxyi-dns5.hst.xyi.cn.xdc.net没有找到,则附加search进行查询A记录:
17-Oct-2011 23:52:21.527 queries: client 172.22.41.176#56298: query: nxyi-dns5.hst.xyi.cn.xdc.net IN AAAA +
17-Oct-2011 23:52:21.528 queries: client 172.22.41.176#40880: query: nxyi-dns5.hst.xyi.cn.xdc.net.xyi.cn.xdc.net IN AAAA +
17-Oct-2011 23:52:21.528 queries: client 172.22.41.176#40359: query: nxyi-dns5.hst.xyi.cn.xdc.net IN A +
17-Oct-2011 23:52:21.528 queries: client 172.22.41.176#36129: query: nxyi-dns5.hst.xyi.cn.xdc.net.xyi.cn.xdc.net IN A +
5 若存在ndots:6,则由于域名仅仅包含了5个点,则顺序改变,首先附加search查找,然后再查找域名本身。默认为ndots值为1,即域名只要包含一个点,就不会首先附加search:
17-Oct-2011 23:53:04.260 queries: client 172.22.41.176#50630: query: nxyi-dns5.hst.xyi.cn.xdc.net.xyi.cn.xdc.net IN AAAA +
17-Oct-2011 23:53:04.260 queries: client 172.22.41.176#38081: query: nxyi-dns5.hst.xyi.cn.xdc.net IN AAAA +
17-Oct-2011 23:53:04.260 queries: client 172.22.41.176#36043: query: nxyi-dns5.hst.xyi.cn.xdc.net.xyi.cn.xdc.net IN A +
17-Oct-2011 23:53:04.260 queries: client 172.22.41.176#58401: query: nxyi-dns5.hst.xyi.cn.xdc.net IN A +
总结:
系统查询域名主要使用 gethostbyname(过时) 和 getaddrinfo 两个函数,二者接收的参数和返回的数据类型都不相同。其中 gethostbyname 实际调用 gethostbyname2,根据传递的参数可以查询AAAA或者A记录。getaddrinfo 功能更强大,可以控制是查询AAAA,A,或者先AAAA后A记录。详细可见glibc中 resolv/gethnamaddr.c 和 sysdeps/posix/getaddrinfo.c 中的实现。
2011年10月20日星期四
Linux 字体的一些概念
google + baidu 得到的结果,不保证准确。
字体有矢量字体和位图字体两种类型。矢量字体中的字形由数学曲线描述,这种字体由于需要计算,因此显示速度慢,但是该字体可以任意缩放,主要包括Truetype,Type1,OpenType等;位图字体又叫点阵字体,字形由点组成,显示速度快,但是缩放后会有锯齿。显示字形时要将矢量字体转换为位图字体,这个过程称为光栅化。
FreeType 是字体函数库。应用程序通过FreeType可以访问字体文件,获取字体信息,字形数据,而无需关心字体文件的位置。
相关文档参见:http://www.unixresources.net/linux/clf/kylix/archive/00/00/59/21/592188.html
X包含两种字体系统:原始的核心X11字体系统和Xft系统。 Xft比核心X11字体系统对缩放字形支持要好,并且提供了更多的功能。另外,Xft和核心X11字体系统是不兼容的。Xft 是 FreeType 之上的库,编写 Xft 库是为了给X应用程序提供一个能访问 FreeType 字体光栅化引擎和X渲染的接口。对于不支持渲染的X服务器,还要提供一个访问原始核心X11字体系统的功能。
相关文档参见:http://www.x.org/archive/X11R6.8.2/doc/fonts.html
https://wiki.archlinux.org/index.php/Font_Configuration_%28%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87%29#X.E7.9A.84.E5.AD.97.E4.BD.93.E9.85.8D.E7.BD.AE.E5.92.8C.E7.BE.8E.E5.8C.96
http://it.china-b.com/olbf/468958.html
Fontconfig 配置了程序如何选取字形,主要配置文件为 /etc/fonts/fonts.conf。除了字体信息外,还定义了字体的cache目录以及用户的字体目录。
具体配置方法参见:http://www.xfree86.org/~dawes/4.3.0/fonts2.html#4
https://wiki.archlinux.org/index.php/Font_Configuration_%28%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87%29
最后记录两个命令:
fc-cache 添加新字体后刷新cache,否则新字体无法使用。
fc-list 查看所有配置过的字体。
xlsfont 查看所有的X字体。
快速配置字体的方案:http://www.ikde.org/news/linux_font_config_from_beginner_to_expert_1/
字体有矢量字体和位图字体两种类型。矢量字体中的字形由数学曲线描述,这种字体由于需要计算,因此显示速度慢,但是该字体可以任意缩放,主要包括Truetype,Type1,OpenType等;位图字体又叫点阵字体,字形由点组成,显示速度快,但是缩放后会有锯齿。显示字形时要将矢量字体转换为位图字体,这个过程称为光栅化。
FreeType 是字体函数库。应用程序通过FreeType可以访问字体文件,获取字体信息,字形数据,而无需关心字体文件的位置。
相关文档参见:http://www.unixresources.net/linux/clf/kylix/archive/00/00/59/21/592188.html
X包含两种字体系统:原始的核心X11字体系统和Xft系统。 Xft比核心X11字体系统对缩放字形支持要好,并且提供了更多的功能。另外,Xft和核心X11字体系统是不兼容的。Xft 是 FreeType 之上的库,编写 Xft 库是为了给X应用程序提供一个能访问 FreeType 字体光栅化引擎和X渲染的接口。对于不支持渲染的X服务器,还要提供一个访问原始核心X11字体系统的功能。
相关文档参见:http://www.x.org/archive/X11R6.8.2/doc/fonts.html
https://wiki.archlinux.org/index.php/Font_Configuration_%28%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87%29#X.E7.9A.84.E5.AD.97.E4.BD.93.E9.85.8D.E7.BD.AE.E5.92.8C.E7.BE.8E.E5.8C.96
http://it.china-b.com/olbf/468958.html
Fontconfig 配置了程序如何选取字形,主要配置文件为 /etc/fonts/fonts.conf。除了字体信息外,还定义了字体的cache目录以及用户的字体目录。
具体配置方法参见:http://www.xfree86.org/~dawes/4.3.0/fonts2.html#4
https://wiki.archlinux.org/index.php/Font_Configuration_%28%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87%29
最后记录两个命令:
fc-cache 添加新字体后刷新cache,否则新字体无法使用。
fc-list 查看所有配置过的字体。
xlsfont 查看所有的X字体。
快速配置字体的方案:http://www.ikde.org/news/linux_font_config_from_beginner_to_expert_1/
2011年10月17日星期一
vsftpd 配置虚拟用户
最近配置两遍VSFTPD的虚拟用户了,第一次去google,第二次ssh到第一次的机器上运行history。。。现在记录一下vsftpd使用虚拟用户需要的相关配置:
1 配置vsftpd使用的虚拟用户,以及虚拟用户配置文件的目录。
本示例中虚拟用户映射到系统真实的notes用户,虚拟用户的配置目录在 /etc/vsftpd/vsftpd_user_conf
chroot_local_user=YES
guest_enable=YES
guest_username=notes
user_config_dir=/etc/vsftpd/vsftpd_user_conf
virtual_use_local_privs=YE
2 在一个文件中配置虚拟用户的账户名和密码,该文件奇数行为用户名,偶数行为密码。
本示例中该文件为 /etc/vsftpd/userlist,虚拟用户名为tom,密码为456b7016a91
#cat /etc/vsftpd/userlist
tom
456b7016a91
3 利用该文件生成数据库文件,可能需要安装 db4-utils
yum -y install db4-utils
db_load -T -t hash -f /etc/vsftpd/userlist /etc/vsftpd/vsftpd_login.db
4 配置虚拟用户 tom 的具体权限
#cat /etc/vsftpd/vsftpd_user_conf/tom
local_root=/home/video_files
write_enable=YES
anon_other_write_enable=YES
anon_umask=022
allow_writeable_chroot=YES
4 配置 vsftpd 使用 PAM 验证:
pam_service_name=vsftpd
5 PAM验证使用刚才生成的数据库文件:
#cat /etc/pam.d/vsftpd
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
1 配置vsftpd使用的虚拟用户,以及虚拟用户配置文件的目录。
本示例中虚拟用户映射到系统真实的notes用户,虚拟用户的配置目录在 /etc/vsftpd/vsftpd_user_conf
chroot_local_user=YES
guest_enable=YES
guest_username=notes
user_config_dir=/etc/vsftpd/vsftpd_user_conf
virtual_use_local_privs=YE
2 在一个文件中配置虚拟用户的账户名和密码,该文件奇数行为用户名,偶数行为密码。
本示例中该文件为 /etc/vsftpd/userlist,虚拟用户名为tom,密码为456b7016a91
#cat /etc/vsftpd/userlist
tom
456b7016a91
3 利用该文件生成数据库文件,可能需要安装 db4-utils
yum -y install db4-utils
db_load -T -t hash -f /etc/vsftpd/userlist /etc/vsftpd/vsftpd_login.db
4 配置虚拟用户 tom 的具体权限
#cat /etc/vsftpd/vsftpd_user_conf/tom
local_root=/home/video_files
write_enable=YES
anon_other_write_enable=YES
anon_umask=022
allow_writeable_chroot=YES
4 配置 vsftpd 使用 PAM 验证:
pam_service_name=vsftpd
5 PAM验证使用刚才生成的数据库文件:
#cat /etc/pam.d/vsftpd
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
订阅:
博文 (Atom)