2010年1月24日星期日
eclipse安装php插件错误
解决方法是:在synaptic中把eclipse这个报选中,安装之后,就可以安装php插件了。
-----------------------------------------------------------------------------
参考:
http://www.mail-archive.com/android-beginners@googlegroups.com/msg17325.html
2010年1月17日星期日
设置键盘布局
xmodmap -pke:生成一个配置文件内容,与当前使用的配置一样。
xmodmap -grammer:显示xmodmap的语法。
xmodmap -pm:显示当前修饰符的配置内容。
2。.Xmodmap设置:
1)用xmodmap -pke生成一个配置模板。
2)用xev查看实际键盘的keycode。
3)查看可用的keysym:http://judgingbee.blogspot.com/2010/01/list-of-keysyms-recognised-by-xmodmap.html
4)把1)生成的.Xmodmap中的keycode改为想要的keysym
5)用xmodmap -pm查看各个修饰符的内容。其中mod1就是Alt键。如果那个修饰符的内容不对就修改一下,比如Control键不好用:
--------------------------------------------------------
clear control
add control = Control_L
add control = Control_R
--------------------------------------------------------
上面的Control_L,Control_R是已经用:
Keycode 37 = Control_L
定义过的。
参考:
-----------------------------------------------------------
1.http://technique.sonots.com/?cmd=read&page=UNIX%2F%E8%A8%AD%E5%AE%9A%E3%80%81%E8%A8%AD%E5%AE%9A%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%2F.Xmodmap&word=xmodmap
2.http://wiki.linuxquestions.org/wiki/List_of_Keysyms_Recognised_by_Xmodmap
3.
List of Keysyms Recognised by Xmodmap
Not all of these may be available, depending on your configuration.
Symbol name Numeric Value Visual representation/Explanation
VoidSymbol 0xFFFFFF Does nothing
BackSpace 0xFF08 Erase the previous character, unlike loadkeys, Delete does not do the same thing
Tab 0xFF09
Linefeed 0xFF0A Linefeed, LF
Clear 0xFF0B
Return 0xFF0D Return, enter
Pause 0xFF13 Pause, hold
Scroll_Lock 0xFF14
Sys_Req 0xFF15
Escape 0xFF1B
Delete 0xFFFF Erase the character under the cursor. This is the same as Rubout in loadkeys.
Multi_key 0xFF20 Allows odd characters to be entered, in the same way as Compose in loadkeys
Codeinput 0xFF37 Kanji_Bangou is a synonym
SingleCandidate 0xFF3C
MultipleCandidate 0xFF3D Zen_Koho is a synonym
PreviousCandidate 0xFF3E Mae_Koho is a synonym
Kanji 0xFF21 Kanji, Kanji convert
Muhenkan 0xFF22 Cancel Conversion
Henkan_Mode 0xFF23 Start/Stop Conversion; Henkan is a synonym
Romaji 0xFF24 to Romaji
Hiragana 0xFF25 to Hiragana
Katakana 0xFF26 to Katakana
Hiragana_Katakana 0xFF27 Hiragana/Katakana toggle
Zenkaku 0xFF28 to Zenkaku
Hankaku 0xFF29 to Hankaku
Zenkaku_Hankaku 0xFF2A Zenkaku/Hankaku toggle
Touroku 0xFF2B Add to Dictionary
Massyo 0xFF2C Delete from Dictionary
Kana_Lock 0xFF2D Kana Lock
Kana_Shift 0xFF2E Kana Shift
Eisu_Shift 0xFF2F Alphanumeric Shift
Eisu_toggle 0xFF30 Alphanumeric toggle
Home 0xFF50
Left 0xFF51 Move left, left arrow
Up 0xFF52 Move up, up arrow
Right 0xFF53 Move right, right arrow
Down 0xFF54 Move down, down arrow
Prior 0xFF55 Prior, previous; Page_Up is a synonym
Next 0xFF56 Next; Page_Down is a synonym
End 0xFF57 EOL
Begin 0xFF58 BOL
Select 0xFF60 Select, mark
Print 0xFF61
Execute 0xFF62 Execute, run, do
Insert 0xFF63 Insert, insert here
Undo 0xFF65 Undo, oops
Redo 0xFF66 redo, again
Menu 0xFF67
Find 0xFF68 Find, search
Cancel 0xFF69 Cancel, stop, abort, exit
Help 0xFF6A Help
Break 0xFF6B
Mode_switch 0xFF7E Shiftlevel two, giving access to the third and fourth columns of keysyms; script-, Greek-, Arabic-, kana-, Hangul- and Hebrew- _switch are synonyms
Num_Lock 0xFF7F
KP_Space 0xFF80 space
KP_Tab 0xFF89
KP_Enter 0xFF8D enter
KP_F1 0xFF91 PF1, KP_A, ...
KP_F2 0xFF92
KP_F3 0xFF93
KP_F4 0xFF94
KP_Home 0xFF95
KP_Left 0xFF96
KP_Up 0xFF97
KP_Right 0xFF98
KP_Down 0xFF99
KP_Prior 0xFF9A KP_Page_Up is a synonym
KP_Next 0xFF9B KP_Page_Down is a synonym
KP_End 0xFF9C
KP_Begin 0xFF9D
KP_Insert 0xFF9E
KP_Delete 0xFF9F
KP_Equal 0xFFBD equals
KP_Multiply 0xFFAA
KP_Add 0xFFAB
KP_Separator 0xFFAC separator, often comma
KP_Subtract 0xFFAD
KP_Decimal 0xFFAE
KP_Divide 0xFFAF
KP_0 through 9 0xFFB0 through 0xFFB9
F1 through 35 0xFFBE through 0xFFE0 F11 through 20 have synonyms L1 through 10; F21 through 35 have synonyms R1 through 15
Shift_L 0xFFE1 Left shift
Shift_R 0xFFE2 Right shift
Control_L 0xFFE3 Left control
Control_R 0xFFE4 Right control
Caps_Lock 0xFFE5 Caps lock
Shift_Lock 0xFFE6 Shift lock
Meta_L 0xFFE7 Left meta
Meta_R 0xFFE8 Right meta
Alt_L 0xFFE9 Left alt
Alt_R 0xFFEA Right alt
Super_L 0xFFEB Left super
Super_R 0xFFEC Right super
Hyper_L 0xFFED Left hyper
Hyper_R 0xFFEE Right hyper
dead_hook 0xFE61
dead_horn 0xFE62
3270_Duplicate 0xFD01
3270_FieldMark 0xFD02
3270_Right2 0xFD03
3270_Left2 0xFD04
3270_BackTab 0xFD05
3270_EraseEOF 0xFD06
3270_EraseInput 0xFD07
3270_Reset 0xFD08
3270_Quit 0xFD09
3270_PA1 0xFD0A
3270_PA2 0xFD0B
3270_PA3 0xFD0C
3270_Test 0xFD0D
3270_Attn 0xFD0E
3270_CursorBlink 0xFD0F
3270_AltCursor 0xFD10
3270_KeyClick 0xFD11
3270_Jump 0xFD12
3270_Ident 0xFD13
3270_Rule 0xFD14
3270_Copy 0xFD15
3270_Play 0xFD16
3270_Setup 0xFD17
3270_Record 0xFD18
3270_ChangeScreen 0xFD19
3270_DeleteWord 0xFD1A
3270_ExSelect 0xFD1B
3270_CursorSelect 0xFD1C
3270_PrintScreen 0xFD1D
3270_Enter 0xFD1E
space 0x020
exclam 0x021 !
quotedbl 0x022 "
numbersign 0x023 #
dollar 0x024 $
percent 0x025 %
ampersand 0x026 &
apostrophe 0x027 '; quoteright is a deprecated synonym
parenleft 0x028 (
parenright 0x029 )
asterisk 0x02a *
plus 0x02b +
comma 0x02c ,
minus 0x02d -
period 0x02e .
slash 0x02f /
0 through 9 0x030 through 0x039
colon 0x03a :
semicolon 0x03b ;
less 0x03c <
equal 0x03d =
greater 0x03e >
question 0x03f ?
at 0x040 @
A through Z 0x041 through 0x05a
bracketleft 0x05b [
backslash 0x05c \
bracketright 0x05d ]
asciicircum 0x05e ^
underscore 0x05f _
grave 0x060 `; quoteleft is a deprecated synonym
a through z 0x061 through 0x07a
braceleft 0x07b {
bar 0x07c |
braceright 0x07d }
asciitilde 0x07e ~
nobreakspace 0x0a0
exclamdown 0x0a1 ¡
cent 0x0a2 ¢
sterling 0x0a3 £
currency 0x0a4 ¤
yen 0x0a5 ¥
brokenbar 0x0a6 ¦
section 0x0a7 §
diaeresis 0x0a8 ¨
copyright 0x0a9 ©
ordfeminine 0x0aa ª
guillemotleft 0x0ab «
notsign 0x0ac ¬
hyphen 0x0ad
registered 0x0ae ®
macron 0x0af ¯
degree 0x0b0 °
plusminus 0x0b1 ±
twosuperior 0x0b2 ²
threesuperior 0x0b3 ³
acute 0x0b4 ´
mu 0x0b5 µ
paragraph 0x0b6 ¶
periodcentered 0x0b7 ·
cedilla 0x0b8 ¸
onesuperior 0x0b9 ¹
masculine 0x0ba º
guillemotright 0x0bb »
onequarter 0x0bc ¼
onehalf 0x0bd ½
threequarters 0x0be ¾
questiondown 0x0bf ¿
Agrave 0x0c0 À
Aacute 0x0c1 Á
Acircumflex 0x0c2 Â
Atilde 0x0c3 Ã
Adiaeresis 0x0c4 Ä
Aring 0x0c5 Å
AE 0x0c6 Æ
Ccedilla 0x0c7 Ç
Egrave 0x0c8 È
Eacute 0x0c9 É
Ecircumflex 0x0ca Ê
Ediaeresis 0x0cb Ë
Igrave 0x0cc Ì
Iacute 0x0cd Í
Icircumflex 0x0ce Î
Idiaeresis 0x0cf Ï
ETH 0x0d0 Ð; Eth is a deprecated synonym
Ntilde 0x0d1 Ñ
Ograve 0x0d2 Ò
Oacute 0x0d3 Ó
Ocircumflex 0x0d4 Ô
Otilde 0x0d5 Õ
Odiaeresis 0x0d6 Ö
multiply 0x0d7 ×
Ooblique 0x0d8 Ø; Oslash is a synonym
Ugrave 0x0d9 Ù
Uacute 0x0da Ú
Ucircumflex 0x0db Û
Udiaeresis 0x0dc Ü
Yacute 0x0dd Ý
THORN 0x0de Þ; Thorn is a deprecated synonym
ssharp 0x0df ß
agrave 0x0e0 à
aacute 0x0e1 á
acircumflex 0x0e2 â
atilde 0x0e3 ã
adiaeresis 0x0e4 ä
aring 0x0e5 å
ae 0x0e6 æ
ccedilla 0x0e7 ç
egrave 0x0e8 è
eacute 0x0e9 é
ecircumflex 0x0ea ê
ediaeresis 0x0eb ë
igrave 0x0ec ì
iacute 0x0ed í
icircumflex 0x0ee î
idiaeresis 0x0ef ï
eth 0x0f0 ð
ntilde 0x0f1 ñ
ograve 0x0f2 ò
oacute 0x0f3 ó
ocircumflex 0x0f4 ô
otilde 0x0f5 õ
odiaeresis 0x0f6 ö
division 0x0f7 ÷
oslash 0x0f8 ø; ooblique is a synonym
ugrave 0x0f9 ù
uacute 0x0fa ú
ucircumflex 0x0fb û
udiaeresis 0x0fc ü
yacute 0x0fd ý
thorn 0x0fe þ
ydiaeresis 0x0ff ÿ
Aogonek 0x1a1
breve 0x1a2
Lstroke 0x1a3
Lcaron 0x1a5
Sacute 0x1a6 Ś
Scaron 0x1a9
Scedilla 0x1aa Ş
Tcaron 0x1ab
Zacute 0x1ac Ź
Zcaron 0x1ae
Zabovedot 0x1af
aogonek 0x1b1
ogonek 0x1b2
lstroke 0x1b3
lcaron 0x1b5
sacute 0x1b6 ś
caron 0x1b7
scaron 0x1b9
scedilla 0x1ba ş
tcaron 0x1bb
zacute 0x1bc ź
doubleacute 0x1bd
zcaron 0x1be
zabovedot 0x1bf
Racute 0x1c0 Ŕ
Abreve 0x1c3
Lacute 0x1c5 Ĺ
Cacute 0x1c6 Ć
Ccaron 0x1c8
Eogonek 0x1ca
Ecaron 0x1cc
Dcaron 0x1cf
Dstroke 0x1d0
Nacute 0x1d1 Ń
Ncaron 0x1d2
Odoubleacute 0x1d5
Rcaron 0x1d8
Uring 0x1d9
Udoubleacute 0x1db
Tcedilla 0x1de
racute 0x1e0 ŕ
abreve 0x1e3
lacute 0x1e5 ĺ
cacute 0x1e6 ć
ccaron 0x1e8
eogonek 0x1ea
ecaron 0x1ec
dcaron 0x1ef
dstroke 0x1f0
nacute 0x1f1 ń
ncaron 0x1f2
odoubleacute 0x1f5
udoubleacute 0x1fb
rcaron 0x1f8
uring 0x1f9
tcedilla 0x1fe
abovedot 0x1ff
Hstroke 0x2a1
Hcircumflex 0x2a6
Iabovedot 0x2a9
Gbreve 0x2ab
Jcircumflex 0x2ac
hstroke 0x2b1
hcircumflex 0x2b6
idotless 0x2b9
gbreve 0x2bb
jcircumflex 0x2bc
Cabovedot 0x2c5
Ccircumflex 0x2c6
Gabovedot 0x2d5
Gcircumflex 0x2d8
Ubreve 0x2dd
Scircumflex 0x2de
cabovedot 0x2e5
ccircumflex 0x2e6
gabovedot 0x2f5
gcircumflex 0x2f8
ubreve 0x2fd
scircumflex 0x2fe
kra 0x3a2 kappa is a deprecated synonym
Rcedilla 0x3a3 Ŗ
Itilde 0x3a5 Ĩ
Lcedilla 0x3a6 Ļ
Emacron 0x3aa
Gcedilla 0x3ab Ģ
Tslash 0x3ac
rcedilla 0x3b3 ŗ
itilde 0x3b5 ĩ
lcedilla 0x3b6 ļ
emacron 0x3ba
gcedilla 0x3bb
tslash 0x3bc
ENG 0x3bd
eng 0x3bf
Amacron 0x3c0
Iogonek 0x3c7
Eabovedot 0x3cc
Imacron 0x3cf
Ncedilla 0x3d1 Ņ
Omacron 0x3d2
Kcedilla 0x3d3 Ķ
Uogonek 0x3d9
Utilde 0x3dd Ũ
Umacron 0x3de
amacron 0x3e0
iogonek 0x3e7
eabovedot 0x3ec
imacron 0x3ef
ncedilla 0x3f1 ņ
omacron 0x3f2
kcedilla 0x3f3 ķ
uogonek 0x3f9
utilde 0x3fd ũ
umacron 0x3fe
Babovedot 0x12a1
babovedot 0x12a2
Dabovedot 0x12a6
Wgrave 0x12a8
Wacute 0x12aa
dabovedot 0x12ab
Ygrave 0x12ac
Fabovedot 0x12b0
fabovedot 0x12b1
Mabovedot 0x12b4
mabovedot 0x12b5
Pabovedot 0x12b7
wgrave 0x12b8
pabovedot 0x12b9
wacute 0x12ba
Sabovedot 0x12bb
ygrave 0x12bc
Wdiaeresis 0x12bd
wdiaeresis 0x12be
sabovedot 0x12bf
Wcircumflex 0x12d0
Tabovedot 0x12d7
Ycircumflex 0x12de
wcircumflex 0x12f0
tabovedot 0x12f7
ycircumflex 0x12fe
OE 0x13bc
oe 0x13bd
Ydiaeresis 0x13be Ÿ
overline 0x47e
kana_fullstop 0x4a1
kana_openingbracket 0x4a2
kana_closingbracket 0x4a3
kana_comma 0x4a4
kana_conjunctive 0x4a5 kana_middledot is a deprecated synonym
kana_WO 0x4a6
kana_a 0x4a7
kana_i 0x4a8
kana_u 0x4a9
kana_e 0x4aa
kana_o 0x4ab
kana_ya 0x4ac
kana_yu 0x4ad
kana_yo 0x4ae
kana_tsu 0x4af kana_tu is a deprecated synonym
prolongedsound 0x4b0
kana_A 0x4b1
kana_I 0x4b2
kana_U 0x4b3
kana_E 0x4b4
kana_O 0x4b5
kana_KA 0x4b6
kana_KI 0x4b7
kana_KU 0x4b8
kana_KE 0x4b9
kana_KO 0x4ba
kana_SA 0x4bb
kana_SHI 0x4bc
kana_SU 0x4bd
kana_SE 0x4be
kana_SO 0x4bf
kana_TA 0x4c0
kana_CHI 0x4c1 kana_TI is a deprecated synonym
kana_TSU 0x4c2 kana_TU is a deprecated synonym
kana_TE 0x4c3
kana_TO 0x4c4
kana_NA 0x4c5
kana_NI 0x4c6
kana_NU 0x4c7
kana_NE 0x4c8
kana_NO 0x4c9
kana_HA 0x4ca
kana_HI 0x4cb
kana_FU 0x4cc kana_HU is a deprecated synonym
kana_HE 0x4cd
kana_HO 0x4ce
kana_MA 0x4cf
kana_MI 0x4d0
kana_MU 0x4d1
kana_ME 0x4d2
kana_MO 0x4d3
kana_YA 0x4d4
kana_YU 0x4d5
kana_YO 0x4d6
kana_RA 0x4d7
kana_RI 0x4d8
kana_RU 0x4d9
kana_RE 0x4da
kana_RO 0x4db
kana_WA 0x4dc
kana_N 0x4dd
voicedsound 0x4de
semivoicedsound 0x4df
Farsi_0 through 9 0x590 through 0x599
Arabic_percent 0x5a5
Arabic_superscript_alef 0x5a6
Arabic_tteh 0x5a7
Arabic_peh 0x5a8
Arabic_tcheh 0x5a9
Arabic_ddal 0x5aa
Arabic_rreh 0x5ab
Arabic_comma 0x5ac
Arabic_fullstop 0x5ae
Arabic_0 through 9 0x5b0 through 0x5b9
Arabic_semicolon 0x5bb
Arabic_question_mark 0x5bf
Arabic_hamza 0x5c1
Arabic_maddaonalef 0x5c2
Arabic_hamzaonalef 0x5c3
Arabic_hamzaonwaw 0x5c4
Arabic_hamzaunderalef 0x5c5
Arabic_hamzaonyeh 0x5c6
Arabic_alef 0x5c7
Arabic_beh 0x5c8
Arabic_tehmarbuta 0x5c9
Arabic_teh 0x5ca
Arabic_theh 0x5cb
Arabic_jeem 0x5cc
Arabic_hah 0x5cd
Arabic_khah 0x5ce
Arabic_dal 0x5cf
Arabic_thal 0x5d0
Arabic_ra 0x5d1
Arabic_zain 0x5d2
Arabic_seen 0x5d3
Arabic_sheen 0x5d4
Arabic_sad 0x5d5
Arabic_dad 0x5d6
Arabic_tah 0x5d7
Arabic_zah 0x5d8
Arabic_ain 0x5d9
Arabic_ghain 0x5da
Arabic_tatweel 0x5e0
Arabic_feh 0x5e1
Arabic_qaf 0x5e2
Arabic_kaf 0x5e3
Arabic_lam 0x5e4
Arabic_meem 0x5e5
Arabic_noon 0x5e6
Arabic_ha 0x5e7 Arabic_heh is a deprecated synonym
Arabic_waw 0x5e8
Arabic_alefmaksura 0x5e9
Arabic_yeh 0x5ea
Arabic_fathatan 0x5eb
Arabic_dammatan 0x5ec
Arabic_kasratan 0x5ed
Arabic_fatha 0x5ee
Arabic_damma 0x5ef
Arabic_kasra 0x5f0
Arabic_shadda 0x5f1
Arabic_sukun 0x5f2
Arabic_madda_above 0x5f3
Arabic_hamza_above 0x5f4
Arabic_hamza_below 0x5f5
Arabic_jeh 0x5f6
Arabic_veh 0x5f7
Arabic_keheh 0x5f8
Arabic_gaf 0x5f9
Arabic_noon_ghunna 0x5fa
Arabic_heh_doachashmee 0x5fb
Farsi_yeh 0x5fc Arabic_farsi_yeh is a synonym
Arabic_yeh_baree 0x5fd
Arabic_heh_goal 0x5fe
Cyrillic_GHE_bar 0x680
Cyrillic_ghe_bar 0x690
Cyrillic_ZHE_descender 0x681
Cyrillic_zhe_descender 0x691
Cyrillic_KA_descender 0x682
Cyrillic_ka_descender 0x692
Cyrillic_KA_vertstroke 0x683
Cyrillic_ka_vertstroke 0x693
Cyrillic_EN_descender 0x684
Cyrillic_en_descender 0x694
Cyrillic_U_straight 0x685
Cyrillic_u_straight 0x695
Cyrillic_U_straight_bar 0x686
Cyrillic_u_straight_bar 0x696
Cyrillic_HA_descender 0x687
Cyrillic_ha_descender 0x697
Cyrillic_CHE_descender 0x688
Cyrillic_che_descender 0x698
Cyrillic_CHE_vertstroke 0x689
Cyrillic_che_vertstroke 0x699
Cyrillic_SHHA 0x68a
Cyrillic_shha 0x69a
Cyrillic_SCHWA 0x68c
Cyrillic_schwa 0x69c
Cyrillic_I_macron 0x68d
Cyrillic_i_macron 0x69d
Cyrillic_O_bar 0x68e
Cyrillic_o_bar 0x69e
Cyrillic_U_macron 0x68f
Cyrillic_u_macron 0x69f
Serbian_dje 0x6a1
Macedonia_gje 0x6a2
Cyrillic_io 0x6a3
Ukrainian_ie 0x6a4 Ukranian_je is a deprecated synonym
Macedonia_dse 0x6a5
Ukrainian_i 0x6a6 Ukranian_i is a deprecated synonym
Ukrainian_yi 0x6a7 Ukranian_yi is a deprecated synonym
Cyrillic_je 0x6a8 Serbian_je is a deprecated synonym
Cyrillic_lje 0x6a9 Serbian_lje is a deprecated synonym
Cyrillic_nje 0x6aa Serbian_nje is a deprecated synonym
Serbian_tshe 0x6ab
Macedonia_kje 0x6ac
Ukrainian_ghe_with_upturn 0x6ad
Byelorussian_shortu 0x6ae
Cyrillic_dzhe 0x6af Serbian_dze is a deprecated synonym
numerosign 0x6b0
Serbian_DJE 0x6b1
Macedonia_GJE 0x6b2
Cyrillic_IO 0x6b3
Ukrainian_IE 0x6b4 Ukranian_JE is a deprecated synonym
Macedonia_DSE 0x6b5
Ukrainian_I 0x6b6 Ukranian_I is a deprecated synonym
Ukrainian_YI 0x6b7 Ukranian_YI is a deprecated synonym
Cyrillic_JE 0x6b8 Serbian_JE is a deprecated synonym
Cyrillic_LJE 0x6b9 Serbian_LJE is a deprecated synonym
Cyrillic_NJE 0x6ba Serbian_NJE is a deprecated synonym
Serbian_TSHE 0x6bb
Macedonia_KJE 0x6bc
Ukrainian_GHE_WITH_UPTURN 0x6bd
Byelorussian_SHORTU 0x6be
Cyrillic_DZHE 0x6bf Serbian_DZE is a deprecated synonym
Cyrillic_yu 0x6c0
Cyrillic_a 0x6c1
Cyrillic_be 0x6c2
Cyrillic_tse 0x6c3
Cyrillic_de 0x6c4
Cyrillic_ie 0x6c5
Cyrillic_ef 0x6c6
Cyrillic_ghe 0x6c7
Cyrillic_ha 0x6c8
Cyrillic_i 0x6c9
Cyrillic_shorti 0x6ca
Cyrillic_ka 0x6cb
Cyrillic_el 0x6cc
Cyrillic_em 0x6cd
Cyrillic_en 0x6ce
Cyrillic_o 0x6cf
Cyrillic_pe 0x6d0
Cyrillic_ya 0x6d1
Cyrillic_er 0x6d2
Cyrillic_es 0x6d3
Cyrillic_te 0x6d4
Cyrillic_u 0x6d5
Cyrillic_zhe 0x6d6
Cyrillic_ve 0x6d7
Cyrillic_softsign 0x6d8
Cyrillic_yeru 0x6d9
Cyrillic_ze 0x6da
Cyrillic_sha 0x6db
Cyrillic_e 0x6dc
Cyrillic_shcha 0x6dd
Cyrillic_che 0x6de
Cyrillic_hardsign 0x6df
Cyrillic_YU 0x6e0
Cyrillic_A 0x6e1
Cyrillic_BE 0x6e2
Cyrillic_TSE 0x6e3
Cyrillic_DE 0x6e4
Cyrillic_IE 0x6e5
Cyrillic_EF 0x6e6
Cyrillic_GHE 0x6e7
Cyrillic_HA 0x6e8
Cyrillic_I 0x6e9
Cyrillic_SHORTI 0x6ea
Cyrillic_KA 0x6eb
Cyrillic_EL 0x6ec
Cyrillic_EM 0x6ed
Cyrillic_EN 0x6ee
Cyrillic_O 0x6ef
Cyrillic_PE 0x6f0
Cyrillic_YA 0x6f1
Cyrillic_ER 0x6f2
Cyrillic_ES 0x6f3
Cyrillic_TE 0x6f4
Cyrillic_U 0x6f5
Cyrillic_ZHE 0x6f6
Cyrillic_VE 0x6f7
Cyrillic_SOFTSIGN 0x6f8
Cyrillic_YERU 0x6f9
Cyrillic_ZE 0x6fa
Cyrillic_SHA 0x6fb
Cyrillic_E 0x6fc
Cyrillic_SHCHA 0x6fd
Cyrillic_CHE 0x6fe
Cyrillic_HARDSIGN 0x6ff
Greek_ALPHAaccent 0x7a1
Greek_EPSILONaccent 0x7a2
Greek_ETAaccent 0x7a3
Greek_IOTAaccent 0x7a4
Greek_IOTAdieresis 0x7a5 Greek_IOTAdiaeresis is a synonym thanks to a typo
Greek_OMICRONaccent 0x7a7
Greek_UPSILONaccent 0x7a8
Greek_UPSILONdieresis 0x7a9
Greek_OMEGAaccent 0x7ab
Greek_accentdieresis 0x7ae
Greek_horizbar 0x7af
Greek_alphaaccent 0x7b1
Greek_epsilonaccent 0x7b2
Greek_etaaccent 0x7b3
Greek_iotaaccent 0x7b4
Greek_iotadieresis 0x7b5
Greek_iotaaccentdieresis 0x7b6
Greek_omicronaccent 0x7b7
Greek_upsilonaccent 0x7b8
Greek_upsilondieresis 0x7b9
Greek_upsilonaccentdieresis 0x7ba
Greek_omegaaccent 0x7bb
Greek_ALPHA 0x7c1
Greek_BETA 0x7c2
Greek_GAMMA 0x7c3
Greek_DELTA 0x7c4
Greek_EPSILON 0x7c5
Greek_ZETA 0x7c6
Greek_ETA 0x7c7
Greek_THETA 0x7c8
Greek_IOTA 0x7c9
Greek_KAPPA 0x7ca
Greek_LAMDA 0x7cb Greek_LAMBDA is a deprecated synonym
Greek_MU 0x7cc
Greek_NU 0x7cd
Greek_XI 0x7ce
Greek_OMICRON 0x7cf
Greek_PI 0x7d0
Greek_RHO 0x7d1
Greek_SIGMA 0x7d2
Greek_TAU 0x7d4
Greek_UPSILON 0x7d5
Greek_PHI 0x7d6
Greek_CHI 0x7d7
Greek_PSI 0x7d8
Greek_OMEGA 0x7d9
Greek_alpha 0x7e1
Greek_beta 0x7e2
Greek_gamma 0x7e3
Greek_delta 0x7e4
Greek_epsilon 0x7e5
Greek_zeta 0x7e6
Greek_eta 0x7e7
Greek_theta 0x7e8
Greek_iota 0x7e9
Greek_kappa 0x7ea
Greek_lamda 0x7eb Greek_lambda is a deprecated synonym
Greek_mu 0x7ec
Greek_nu 0x7ed
Greek_xi 0x7ee
Greek_omicron 0x7ef
Greek_pi 0x7f0
Greek_rho 0x7f1
Greek_sigma 0x7f2
Greek_finalsmallsigma 0x7f3
Greek_tau 0x7f4
Greek_upsilon 0x7f5
Greek_phi 0x7f6
Greek_chi 0x7f7
Greek_psi 0x7f8
Greek_omega 0x7f9
leftradical 0x8a1
topleftradical 0x8a2
horizconnector 0x8a3
topintegral 0x8a4
botintegral 0x8a5
vertconnector 0x8a6
topleftsqbracket 0x8a7
botleftsqbracket 0x8a8
toprightsqbracket 0x8a9
botrightsqbracket 0x8aa
topleftparens 0x8ab
botleftparens 0x8ac
toprightparens 0x8ad
botrightparens 0x8ae
leftmiddlecurlybrace 0x8af
rightmiddlecurlybrace 0x8b0
topleftsummation 0x8b1
botleftsummation 0x8b2
topvertsummationconnector 0x8b3
botvertsummationconnector 0x8b4
toprightsummation 0x8b5
botrightsummation 0x8b6
rightmiddlesummation 0x8b7
lessthanequal 0x8bc
notequal 0x8bd
greaterthanequal 0x8be
integral 0x8bf
therefore 0x8c0
variation 0x8c1
infinity 0x8c2
nabla 0x8c5
approximate 0x8c8
similarequal 0x8c9
ifonlyif 0x8cd
implies 0x8ce
identical 0x8cf
radical 0x8d6
includedin 0x8da
includes 0x8db
intersection 0x8dc
union 0x8dd
logicaland 0x8de
logicalor 0x8df
partialderivative 0x8ef
function 0x8f6
leftarrow 0x8fb
uparrow 0x8fc
rightarrow 0x8fd
downarrow 0x8fe
blank 0x9df
soliddiamond 0x9e0
checkerboard 0x9e1
ht 0x9e2
ff 0x9e3
cr 0x9e4
lf 0x9e5
nl 0x9e8
vt 0x9e9
lowrightcorner 0x9ea
uprightcorner 0x9eb
upleftcorner 0x9ec
lowleftcorner 0x9ed
crossinglines 0x9ee
horizlinescan1 0x9ef
horizlinescan3 0x9f0
horizlinescan5 0x9f1
horizlinescan7 0x9f2
horizlinescan9 0x9f3
leftt 0x9f4
rightt 0x9f5
bott 0x9f6
topt 0x9f7
vertbar 0x9f8
emspace 0xaa1
enspace 0xaa2
em3space 0xaa3
em4space 0xaa4
digitspace 0xaa5
punctspace 0xaa6
thinspace 0xaa7
hairspace 0xaa8
emdash 0xaa9
endash 0xaaa
signifblank 0xaac
ellipsis 0xaae
doubbaselinedot 0xaaf
onethird 0xab0
twothirds 0xab1
onefifth 0xab2
twofifths 0xab3
threefifths 0xab4
fourfifths 0xab5
onesixth 0xab6
fivesixths 0xab7
careof 0xab8
figdash 0xabb
leftanglebracket 0xabc
decimalpoint 0xabd
rightanglebracket 0xabe
marker 0xabf
oneeighth 0xac3
threeeighths 0xac4
fiveeighths 0xac5
seveneighths 0xac6
trademark 0xac9
signaturemark 0xaca
trademarkincircle 0xacb
leftopentriangle 0xacc
rightopentriangle 0xacd
emopencircle 0xace
emopenrectangle 0xacf
leftsinglequotemark 0xad0
rightsinglequotemark 0xad1
leftdoublequotemark 0xad2
rightdoublequotemark 0xad3
prescription 0xad4
minutes 0xad6
seconds 0xad7
latincross 0xad9
hexagram 0xada
filledrectbullet 0xadb
filledlefttribullet 0xadc
filledrighttribullet 0xadd
emfilledcircle 0xade
emfilledrect 0xadf
enopencircbullet 0xae0
enopensquarebullet 0xae1
openrectbullet 0xae2
opentribulletup 0xae3
opentribulletdown 0xae4
openstar 0xae5
enfilledcircbullet 0xae6
enfilledsqbullet 0xae7
filledtribulletup 0xae8
filledtribulletdown 0xae9
leftpointer 0xaea
rightpointer 0xaeb
club 0xaec
diamond 0xaed
heart 0xaee
maltesecross 0xaf0
dagger 0xaf1
doubledagger 0xaf2
checkmark 0xaf3
ballotcross 0xaf4
musicalsharp 0xaf5
musicalflat 0xaf6
malesymbol 0xaf7
femalesymbol 0xaf8
telephone 0xaf9
telephonerecorder 0xafa
phonographcopyright 0xafb
caret 0xafc
singlelowquotemark 0xafd
doublelowquotemark 0xafe
cursor 0xaff
leftcaret 0xba3
rightcaret 0xba6
downcaret 0xba8
upcaret 0xba9
overbar 0xbc0
downtack 0xbc2
upshoe 0xbc3
downstile 0xbc4
underbar 0xbc6
jot 0xbca
quad 0xbcc
uptack 0xbce
circle 0xbcf
upstile 0xbd3
downshoe 0xbd6
rightshoe 0xbd8
leftshoe 0xbda
lefttack 0xbdc
righttack 0xbfc
hebrew_doublelowline 0xcdf
hebrew_aleph 0xce0
hebrew_bet 0xce1 hebrew_beth is a deprecated synonym
hebrew_gimel 0xce2 hebrew_gimmel is a deprecated synonym
hebrew_dalet 0xce3 hebrew_daleth is a deprecated synonym
hebrew_he 0xce4
hebrew_waw 0xce5
hebrew_zain 0xce6 hebrew_zayin is a deprecated synonym
hebrew_chet 0xce7 hebrew_het is a deprecated synonym
hebrew_tet 0xce8 hebrew_teth is a deprecated synonym
hebrew_yod 0xce9
hebrew_finalkaph 0xcea
hebrew_kaph 0xceb
hebrew_lamed 0xcec
hebrew_finalmem 0xced
hebrew_mem 0xcee
hebrew_finalnun 0xcef
hebrew_nun 0xcf0
hebrew_samech 0xcf1 hebrew_samekh is a deprecated synonym
hebrew_ayin 0xcf2
hebrew_finalpe 0xcf3
hebrew_pe 0xcf4
hebrew_finalzade 0xcf5 hebrew_finalzadi is a deprecated synonym
hebrew_zade 0xcf6 hebrew_zadi is a deprecated synonym
hebrew_qoph 0xcf7 hebrew_kuf is a deprecated synonym
hebrew_resh 0xcf8
hebrew_shin 0xcf9
hebrew_taw 0xcfa hebrew_taf is a deprecated synonym
Thai_kokai 0xda1
Thai_khokhai 0xda2
Thai_khokhuat 0xda3
Thai_khokhwai 0xda4
Thai_khokhon 0xda5
Thai_khorakhang 0xda6
Thai_ngongu 0xda7
Thai_chochan 0xda8
Thai_choching 0xda9
Thai_chochang 0xdaa
Thai_soso 0xdab
Thai_chochoe 0xdac
Thai_yoying 0xdad
Thai_dochada 0xdae
Thai_topatak 0xdaf
Thai_thothan 0xdb0
Thai_thonangmontho 0xdb1
Thai_thophuthao 0xdb2
Thai_nonen 0xdb3
Thai_dodek 0xdb4
Thai_totao 0xdb5
Thai_thothung 0xdb6
Thai_thothahan 0xdb7
Thai_thothong 0xdb8
Thai_nonu 0xdb9
Thai_bobaimai 0xdba
Thai_popla 0xdbb
Thai_phophung 0xdbc
Thai_fofa 0xdbd
Thai_phophan 0xdbe
Thai_fofan 0xdbf
Thai_phosamphao 0xdc0
Thai_moma 0xdc1
Thai_yoyak 0xdc2
Thai_rorua 0xdc3
Thai_ru 0xdc4
Thai_loling 0xdc5
Thai_lu 0xdc6
Thai_wowaen 0xdc7
Thai_sosala 0xdc8
Thai_sorusi 0xdc9
Thai_sosua 0xdca
Thai_hohip 0xdcb
Thai_lochula 0xdcc
Thai_oang 0xdcd
Thai_honokhuk 0xdce
Thai_paiyannoi 0xdcf
Thai_saraa 0xdd0
Thai_maihanakat 0xdd1
Thai_saraaa 0xdd2
Thai_saraam 0xdd3
Thai_sarai 0xdd4
Thai_saraii 0xdd5
Thai_saraue 0xdd6
Thai_sarauee 0xdd7
Thai_sarau 0xdd8
Thai_sarauu 0xdd9
Thai_phinthu 0xdda
Thai_maihanakat_maitho 0xdde
Thai_baht 0xddf
Thai_sarae 0xde0
Thai_saraae 0xde1
Thai_sarao 0xde2
Thai_saraaimaimuan 0xde3
Thai_saraaimaimalai 0xde4
Thai_lakkhangyao 0xde5
Thai_maiyamok 0xde6
Thai_maitaikhu 0xde7
Thai_maiek 0xde8
Thai_maitho 0xde9
Thai_maitri 0xdea
Thai_maichattawa 0xdeb
Thai_thanthakhat 0xdec
Thai_nikhahit 0xded
Thai_leksun 0xdf0
Thai_leknung 0xdf1
Thai_leksong 0xdf2
Thai_leksam 0xdf3
Thai_leksi 0xdf4
Thai_lekha 0xdf5
Thai_lekhok 0xdf6
Thai_lekchet 0xdf7
Thai_lekpaet 0xdf8
Thai_lekkao 0xdf9
Hangul 0xff31 Hangul start/stop(toggle)
Hangul_Start 0xff32 Hangul start
Hangul_End 0xff33 Hangul end, English start
Hangul_Hanja 0xff34 Start Hangul->Hanja Conversion
Hangul_Jamo 0xff35 Hangul Jamo mode
Hangul_Romaja 0xff36 Hangul Romaja mode
Hangul_Codeinput 0xff37 Hangul code input mode
Hangul_Jeonja 0xff38 Jeonja mode
Hangul_Banja 0xff39 Banja mode
Hangul_PreHanja 0xff3a Pre Hanja conversion
Hangul_PostHanja 0xff3b Post Hanja conversion
Hangul_SingleCandidate 0xff3c Single candidate
Hangul_MultipleCandidate 0xff3d Multiple candidate
Hangul_PreviousCandidate 0xff3e Previous candidate
Hangul_Special 0xff3f Special symbols
Hangul_Kiyeog 0xea1
Hangul_SsangKiyeog 0xea2
Hangul_KiyeogSios 0xea3
Hangul_Nieun 0xea4
Hangul_NieunJieuj 0xea5
Hangul_NieunHieuh 0xea6
Hangul_Dikeud 0xea7
Hangul_SsangDikeud 0xea8
Hangul_Rieul 0xea9
Hangul_RieulKiyeog 0xeaa
Hangul_RieulMieum 0xeab
Hangul_RieulPieub 0xeac
Hangul_RieulSios 0xead
Hangul_RieulTieut 0xeae
Hangul_RieulPhieuf 0xeaf
Hangul_RieulHieuh 0xeb0
Hangul_Mieum 0xeb1
Hangul_Pieub 0xeb2
Hangul_SsangPieub 0xeb3
Hangul_PieubSios 0xeb4
Hangul_Sios 0xeb5
Hangul_SsangSios 0xeb6
Hangul_Ieung 0xeb7
Hangul_Jieuj 0xeb8
Hangul_SsangJieuj 0xeb9
Hangul_Cieuc 0xeba
Hangul_Khieuq 0xebb
Hangul_Tieut 0xebc
Hangul_Phieuf 0xebd
Hangul_Hieuh 0xebe
Hangul_A 0xebf
Hangul_AE 0xec0
Hangul_YA 0xec1
Hangul_YAE 0xec2
Hangul_EO 0xec3
Hangul_E 0xec4
Hangul_YEO 0xec5
Hangul_YE 0xec6
Hangul_O 0xec7
Hangul_WA 0xec8
Hangul_WAE 0xec9
Hangul_OE 0xeca
Hangul_YO 0xecb
Hangul_U 0xecc
Hangul_WEO 0xecd
Hangul_WE 0xece
Hangul_WI 0xecf
Hangul_YU 0xed0
Hangul_EU 0xed1
Hangul_YI 0xed2
Hangul_I 0xed3
Hangul_J_Kiyeog 0xed4
Hangul_J_SsangKiyeog 0xed5
Hangul_J_KiyeogSios 0xed6
Hangul_J_Nieun 0xed7
Hangul_J_NieunJieuj 0xed8
Hangul_J_NieunHieuh 0xed9
Hangul_J_Dikeud 0xeda
Hangul_J_Rieul 0xedb
Hangul_J_RieulKiyeog 0xedc
Hangul_J_RieulMieum 0xedd
Hangul_J_RieulPieub 0xede
Hangul_J_RieulSios 0xedf
Hangul_J_RieulTieut 0xee0
Hangul_J_RieulPhieuf 0xee1
Hangul_J_RieulHieuh 0xee2
Hangul_J_Mieum 0xee3
Hangul_J_Pieub 0xee4
Hangul_J_PieubSios 0xee5
Hangul_J_Sios 0xee6
Hangul_J_SsangSios 0xee7
Hangul_J_Ieung 0xee8
Hangul_J_Jieuj 0xee9
Hangul_J_Cieuc 0xeea
Hangul_J_Khieuq 0xeeb
Hangul_J_Tieut 0xeec
Hangul_J_Phieuf 0xeed
Hangul_J_Hieuh 0xeee
Hangul_RieulYeorinHieuh 0xeef
Hangul_SunkyeongeumMieum 0xef0
Hangul_SunkyeongeumPieub 0xef1
Hangul_PanSios 0xef2
Hangul_KkogjiDalrinIeung 0xef3
Hangul_SunkyeongeumPhieuf 0xef4
Hangul_YeorinHieuh 0xef5
Hangul_AraeA 0xef6
Hangul_AraeAE 0xef7
Hangul_J_PanSios 0xef8
Hangul_J_KkogjiDalrinIeung 0xef9
Hangul_J_YeorinHieuh 0xefa
Korean_Won 0xeff
Armenian_eternity 0x14a1
Armenian_ligature_ew 0x14a2
Armenian_full_stop 0x14a3 Armenian_verjaket is a deprecated synonym
Armenian_parenright 0x14a4
Armenian_parenleft 0x14a5
Armenian_guillemotright 0x14a6
Armenian_guillemotleft 0x14a7
Armenian_em_dash 0x14a8
Armenian_dot 0x14a9 Armenian_mijaket is a deprecated synonym
Armenian_separation_mark 0x14aa Armenian_but is a deprecated synonym
Armenian_comma 0x14ab
Armenian_en_dash 0x14ac
Armenian_hyphen 0x14ad Armenian_yentamna is a deprecated synonym
Armenian_ellipsis 0x14ae
Armenian_exclam 0x14af Armenian_amanak is a deprecated synonym
Armenian_accent 0x14b0 Armenian_shesht is a deprecated synonym
Armenian_question 0x14b1 Armenian_paruyk is a deprecated synonym
Armenian_AYB 0x14b2
Armenian_ayb 0x14b3
Armenian_BEN 0x14b4
Armenian_ben 0x14b5
Armenian_GIM 0x14b6
Armenian_gim 0x14b7
Armenian_DA 0x14b8
Armenian_da 0x14b9
Armenian_YECH 0x14ba
Armenian_yech 0x14bb
Armenian_ZA 0x14bc
Armenian_za 0x14bd
Armenian_E 0x14be
Armenian_e 0x14bf
Armenian_AT 0x14c0
Armenian_at 0x14c1
Armenian_TO 0x14c2
Armenian_to 0x14c3
Armenian_ZHE 0x14c4
Armenian_zhe 0x14c5
Armenian_INI 0x14c6
Armenian_ini 0x14c7
Armenian_LYUN 0x14c8
Armenian_lyun 0x14c9
Armenian_KHE 0x14ca
Armenian_khe 0x14cb
Armenian_TSA 0x14cc
Armenian_tsa 0x14cd
Armenian_KEN 0x14ce
Armenian_ken 0x14cf
Armenian_HO 0x14d0
Armenian_ho 0x14d1
Armenian_DZA 0x14d2
Armenian_dza 0x14d3
Armenian_GHAT 0x14d4
Armenian_ghat 0x14d5
Armenian_TCHE 0x14d6
Armenian_tche 0x14d7
Armenian_MEN 0x14d8
Armenian_men 0x14d9
Armenian_HI 0x14da
Armenian_hi 0x14db
Armenian_NU 0x14dc
Armenian_nu 0x14dd
Armenian_SHA 0x14de
Armenian_sha 0x14df
Armenian_VO 0x14e0
Armenian_vo 0x14e1
Armenian_CHA 0x14e2
Armenian_cha 0x14e3
Armenian_PE 0x14e4
Armenian_pe 0x14e5
Armenian_JE 0x14e6
Armenian_je 0x14e7
Armenian_RA 0x14e8
Armenian_ra 0x14e9
Armenian_SE 0x14ea
Armenian_se 0x14eb
Armenian_VEV 0x14ec
Armenian_vev 0x14ed
Armenian_TYUN 0x14ee
Armenian_tyun 0x14ef
Armenian_RE 0x14f0
Armenian_re 0x14f1
Armenian_TSO 0x14f2
Armenian_tso 0x14f3
Armenian_VYUN 0x14f4
Armenian_vyun 0x14f5
Armenian_PYUR 0x14f6
Armenian_pyur 0x14f7
Armenian_KE 0x14f8
Armenian_ke 0x14f9
Armenian_O 0x14fa
Armenian_o 0x14fb
Armenian_FE 0x14fc
Armenian_fe 0x14fd
Armenian_apostrophe 0x14fe
Armenian_section_sign 0x14ff
Georgian_an 0x15d0
Georgian_ban 0x15d1
Georgian_gan 0x15d2
Georgian_don 0x15d3
Georgian_en 0x15d4
Georgian_vin 0x15d5
Georgian_zen 0x15d6
Georgian_tan 0x15d7
Georgian_in 0x15d8
Georgian_kan 0x15d9
Georgian_las 0x15da
Georgian_man 0x15db
Georgian_nar 0x15dc
Georgian_on 0x15dd
Georgian_par 0x15de
Georgian_zhar 0x15df
Georgian_rae 0x15e0
Georgian_san 0x15e1
Georgian_tar 0x15e2
Georgian_un 0x15e3
Georgian_phar 0x15e4
Georgian_khar 0x15e5
Georgian_ghan 0x15e6
Georgian_qar 0x15e7
Georgian_shin 0x15e8
Georgian_chin 0x15e9
Georgian_can 0x15ea
Georgian_jil 0x15eb
Georgian_cil 0x15ec
Georgian_char 0x15ed
Georgian_xan 0x15ee
Georgian_jhan 0x15ef
Georgian_hae 0x15f0
Georgian_he 0x15f1
Georgian_hie 0x15f2
Georgian_we 0x15f3
Georgian_har 0x15f4
Georgian_hoe 0x15f5
Georgian_fi 0x15f6
Ccedillaabovedot 0x16a2
Xabovedot 0x16a3
Qabovedot 0x16a5
IE 0x16a7
UO 0x16a8
Zstroke 0x16a9
ccedillaabovedot 0x16b2
xabovedot 0x16b3
qabovedot 0x16b5
ie 0x16b7
uo 0x16b8
zstroke 0x16b9
SCHWA 0x16c6
schwa 0x16f6
Lbelowdot 0x16d1
Lstrokebelowdot 0x16d2
lbelowdot 0x16e1
lstrokebelowdot 0x16e2
Gtilde 0x16d3
gtilde 0x16e3
Abelowdot 0x1ea0
abelowdot 0x1ea1
Ahook 0x1ea2
ahook 0x1ea3
Acircumflexacute 0x1ea4
acircumflexacute 0x1ea5
Acircumflexgrave 0x1ea6
acircumflexgrave 0x1ea7
Acircumflexhook 0x1ea8
acircumflexhook 0x1ea9
Acircumflextilde 0x1eaa
acircumflextilde 0x1eab
Acircumflexbelowdot 0x1eac
acircumflexbelowdot 0x1ead
Abreveacute 0x1eae
abreveacute 0x1eaf
Abrevegrave 0x1eb0
abrevegrave 0x1eb1
Abrevehook 0x1eb2
abrevehook 0x1eb3
Abrevetilde 0x1eb4
abrevetilde 0x1eb5
Abrevebelowdot 0x1eb6
abrevebelowdot 0x1eb7
Ebelowdot 0x1eb8
ebelowdot 0x1eb9
Ehook 0x1eba
ehook 0x1ebb
Etilde 0x1ebc
etilde 0x1ebd
Ecircumflexacute 0x1ebe
ecircumflexacute 0x1ebf
Ecircumflexgrave 0x1ec0
ecircumflexgrave 0x1ec1
Ecircumflexhook 0x1ec2
ecircumflexhook 0x1ec3
Ecircumflextilde 0x1ec4
ecircumflextilde 0x1ec5
Ecircumflexbelowdot 0x1ec6
ecircumflexbelowdot 0x1ec7
Ihook 0x1ec8
ihook 0x1ec9
Ibelowdot 0x1eca
ibelowdot 0x1ecb
Obelowdot 0x1ecc
obelowdot 0x1ecd
Ohook 0x1ece
ohook 0x1ecf
Ocircumflexacute 0x1ed0
ocircumflexacute 0x1ed1
Ocircumflexgrave 0x1ed2
ocircumflexgrave 0x1ed3
Ocircumflexhook 0x1ed4
ocircumflexhook 0x1ed5
Ocircumflextilde 0x1ed6
ocircumflextilde 0x1ed7
Ocircumflexbelowdot 0x1ed8
ocircumflexbelowdot 0x1ed9
Ohornacute 0x1eda
ohornacute 0x1edb
Ohorngrave 0x1edc
ohorngrave 0x1edd
Ohornhook 0x1ede
ohornhook 0x1edf
Ohorntilde 0x1ee0
ohorntilde 0x1ee1
Ohornbelowdot 0x1ee2
ohornbelowdot 0x1ee3
Ubelowdot 0x1ee4
ubelowdot 0x1ee5
Uhook 0x1ee6
uhook 0x1ee7
Uhornacute 0x1ee8
uhornacute 0x1ee9
Uhorngrave 0x1eea
uhorngrave 0x1eeb
Uhornhook 0x1eec
uhornhook 0x1eed
Uhorntilde 0x1eee
uhorntilde 0x1eef
Uhornbelowdot 0x1ef0
uhornbelowdot 0x1ef1
Ybelowdot 0x1ef4
ybelowdot 0x1ef5
Yhook 0x1ef6
yhook 0x1ef7
Ytilde 0x1ef8
ytilde 0x1ef9
Ohorn 0x1efa U+01a0
ohorn 0x1efb U+01a1
Uhorn 0x1efc U+01af
uhorn 0x1efd U+01b0
combining_tilde 0x1e9f U+0303
combining_grave 0x1ef2 U+0300
combining_acute 0x1ef3 U+0301
combining_hook 0x1efe U+0309
combining_belowdot 0x1eff U+0323
EcuSign 0x20a0
ColonSign 0x20a1
CruzeiroSign 0x20a2
FFrancSign 0x20a3
LiraSign 0x20a4
MillSign 0x20a5
NairaSign 0x20a6
PesetaSign 0x20a7
RupeeSign 0x20a8
WonSign 0x20a9
NewSheqelSign 0x20aa
DongSign 0x20ab
EuroSign 0x20ac
Read more: http://wiki.linuxquestions.org/wiki/List_of_Keysyms_Recognised_by_Xmodmap#ixzz0cridlBQd
ibus输入法
sudo apt-get install ibus ibus-pinyin ibus-table ibus-qt4
其中ibus-table是一些额外码表,有五笔、郑码、仓颉等,可以根据自己
的需要进行选择。
安装后,在自己的/.profile文件中增加如下几行
export XMODIFIERS=”@im=ibus”
export GTK_IM_MODULE=”ibus”
ibus &
保存之后打开一个终端输入im-switch -s ibus
注销重新登录
2010年1月16日星期六
使用backports
在 /etc/apt/sources.list 加入
deb http://www.backports.org/debian etch-backports main contrib non-free
使用 aptitude 時指定 -t etch-backports,如
sudo aptitude -t etch-backports search xxx
sudo aptitude -t etch-backports install xxx
sudo apt-get -t etch-backports install xxx
apt-show-versions
$ apt-show-versions python-gtk2
python-gtk2/squeeze upgradeable from 2.12.1-6 to 2.16.0-1
认识top的显示结果
top命令的显示结果如下所示:
top - 01:06:48 up 1:22, 1 user, load average: 0.06, 0.60, 0.48
Tasks: 29 total, 1 running, 28 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.3% us, 1.0% sy, 0.0% ni, 98.7% id, 0.0% wa, 0.0% hi, 0.0% si
Mem: 191272k total, 173656k used, 17616k free, 22052k buffers
Swap: 192772k total, 0k used, 192772k free, 123988k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1379 root 16 0 7976 2456 1980 S 0.7 1.3 0:11.03 sshd
14704 root 16 0 2128 980 796 R 0.7 0.5 0:02.72 top
1 root 16 0 1992 632 544 S 0.0 0.3 0:00.90 init
2 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/0
3 root RT 0 0 0 0 S 0.0 0.0 0:00.00 watchdog/0
统计信息区
前五行是系统整体的统计信息。第一行是任务队列信息,同 uptime 命令的执行结果。其内容如下:
01:06:48 | 当前时间 |
up 1:22 | 系统运行时间,格式为时:分 |
1 user | 当前登录用户数 |
load average: 0.06, 0.60, 0.48 | 系统负载,即任务队列的平均长度。 三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。 |
第二、三行为进程和CPU的信息。当有多个CPU时,这些内容可能会超过两行。内容如下:
Tasks: 29 total | 进程总数 |
1 running | 正在运行的进程数 |
28 sleeping | 睡眠的进程数 |
0 stopped | 停止的进程数 |
0 zombie | 僵尸进程数 |
Cpu(s): 0.3% us | 用户空间占用CPU百分比 |
1.0% sy | 内核空间占用CPU百分比 |
0.0% ni | 用户进程空间内改变过优先级的进程占用CPU百分比 |
98.7% id | 空闲CPU百分比 |
0.0% wa | 等待输入输出的CPU时间百分比 |
0.0% hi | |
0.0% si |
最后两行为内存信息。内容如下:
Mem: 191272k total | 物理内存总量 |
173656k used | 使用的物理内存总量 |
17616k free | 空闲内存总量 |
22052k buffers | 用作内核缓存的内存量 |
Swap: 192772k total | 交换区总量 |
0k used | 使用的交换区总量 |
192772k free | 空闲交换区总量 |
123988k cached | 缓冲的交换区总量。 内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖, 该数值即为这些内容已存在于内存中的交换区的大小。 相应的内存再次被换出时可不必再对交换区写入。 |
进程信息区
统计信息区域的下方显示了各个进程的详细信息。首先来认识一下各列的含义。
序号 | 列名 | 含义 |
a | PID | 进程id |
b | PPID | 父进程id |
c | RUSER | Real user name |
d | UID | 进程所有者的用户id |
e | USER | 进程所有者的用户名 |
f | GROUP | 进程所有者的组名 |
g | TTY | 启动进程的终端名。不是从终端启动的进程则显示为 ? |
h | PR | 优先级 |
i | NI | nice值。负值表示高优先级,正值表示低优先级 |
j | P | 最后使用的CPU,仅在多CPU环境下有意义 |
k | %CPU | 上次更新到现在的CPU时间占用百分比 |
l | TIME | 进程使用的CPU时间总计,单位秒 |
m | TIME+ | 进程使用的CPU时间总计,单位1/100秒 |
n | %MEM | 进程使用的物理内存百分比 |
o | VIRT | 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES |
p | SWAP | 进程使用的虚拟内存中,被换出的大小,单位kb。 |
q | RES | 进程使用的、未被换出的物理内存大小,单位kb。RES=CO |
r | CO | 可执行代码占用的物理内存大小,单位kb |
s | DA | 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb |
t | SHR | 共享内存大小,单位kb |
u | nFLT | 页面错误次数 |
v | nDRT | 最后一次写入到现在,被修改过的页面数。 |
w | S | 进程状态。 D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程 |
x | COMMAND | 命令名/命令行 |
y | WCHAN | 若该进程在睡眠,则显示睡眠中的系统函数名 |
z | Flags | 任务标志,参考 sched.h |
默认情况下仅显示比较重要的 PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、COMMAND 列。可以通过下面的快捷键来更改显示内容。
更改显示内容
通过 f 键可以选择显示的内容。按 f 键之后会显示列的列表,按 a-z 即可显示或隐藏对应的列,最后按回车键确定。
按 o 键可以改变列的显示顺序。按小写的 a-z 可以将相应的列向右移动,而大写的 A-Z 可以将相应的列向左移动。最后按回车键确定。
按大写的 F 或 O 键,然后按 a-z 可以将进程按照相应的列进行排序。而大写的 R 键可以将当前的排序倒转
关于linux上,CPU平均负载
先用w命令查看该用户tty号,然后用fuser -k tty号(或显示pts/*)就可以踢出了
先用w命令查看在线用户
然后
pkill -kill -t tty
如pkill -kill -t pts/1
二、CPU平均负载
为什么要监控系统的平均负载?
有时我们会感觉到系统响应很慢,但是又找不到原因,
这时要查平均负载,是否有大量的进程在排队等待
1,平均负载是什么?
特定时间间隔内运行队列中的平均进程数
好象还不够明白:就是进程队列的长度,有多少个进程在排队等待运行
2,什么是"进程队列"?
一个进程满足以下条件就会位于进程队列中
1,它没有在等待I/O操作的结果
2,它没有主动进入等待状态(即没有调用wait)
3,它没有被停止
3,如何查看平均负载?
最简单的命令是uptime
例子:
[lhd@localhost ~]$ uptime
00:44:22 up 1:17, 3 users, load average: 8.13, 5.90, 4,94
4,显示的内容是什么意思?
load average: 8.13, 5.90, 4,94
显示的是过去的1, 5, 15分钟内进程队列中的平均进程数量
5,如何衡量当前系统是否负载过高?
如果每个cpu(可以按CPU核心的数量计算)上当前活动进程数不大于3,则系统性能良好,
不大于4,表示可以接受
如大于5,则系统性能问题严重
上面例中的8.13,如果有2个cpu核心,则8.13/2=4.065, 此系统性能可以接受
建议设置严格的报警值为: CPU核心的数量
比如:CPU核心数量为2,则设置报警值为2
(这样设置是合理的,因为毕竟不是每个应用都支持多CPU及多核心)
6,查看平均负载的命令
有5个可用:
tload 能够绘制出负载变化的图形
uptime 同时显示开机以来的时间
w 同时显示出已登录的用户
top 这个对资源占用太高,不建议使用
cat /proc/loadavg 通过/proc系统信息得到平均负载
注意:如果你要持续的观察平均负载,建议用 watch uptime
或 watch cat /proc/loadavg
备注:关于watch:每隔一定时间执行指定的程序,并全屏显示结果, 时间默认是2秒.
使用uptime命令监视系统状态
a) #uptime
12:54pm up 27 min, 2 users, load average: 0.00, 0.00, 0.00
现在时间 启动了多久 几个用户在线 CPU平均负载时间(共3个)
第一个 : 1分钟内平均负载值
第二个 : 5分钟内平均负载值
第三个 : 15分钟内平均负载值
当系统负载过大时,说明有多条命令被阻塞在内存和I/O系统中
在大型linux系统中,负载为2和3表示轻载,5和6 表示中等程度的负载,10以上为过载
2010年1月13日星期三
Linux下mp3标签乱码问题的分析和解决 Linux下mp3标签乱码问题的分析和解决 {转}
我们先来看看一些关于mp3的标签和编码的概念再来解决这个问题,大家就会比较清晰一些了。
mp3的标签类型和编码,现在主要存在这几种标准,ID3v1、ID3v2 2.3、ID3v2 2.4、APEv2。它们分别支持的编码为
ID3v1:只支持ISO--8859-1
ID3v2 2.3:ISO--8859-1、UTF-16
ID3v2 2.4:ISO--8859-1、UTF-16、UTF-8
APEv2:UTF-8
我们可以从上面的列表看出,mp3的标签类型和编码是多种多样,没有任何的规范可言的。ID3v1只支持ISO-8859-1这一种编码,它是不支持中文 的,所以一般来说只有ID3v1标签的mp3在Linux上基本上也都是乱码的命,而ID3v2 2.3支持的格式增加了UTF-16,直到ID3v2 2.4版才开始支持UTF-8,但是 ID3v2的两个版本标准并没有统一标签内容的编码。这里值得一提的是APEv2,它拥有最好的扩展性,它把编码格式统一为UTF-8,这样一来只要支持 APEv2读取的播放器播放带有APEv2标签的mp3就不会存在乱码问题。可惜的是现在在国内的网站上下载的mp3基本上都没有APEv2标签,而且 Linux下也没有几个播放器支持APEv2标签的读取。(目前Gnome里的Rhythmbox是支持APEv2标签读取的,包括Quod Libet都不可以。)
一首mp3的标签是可以包含多种类型的,当一首mp3同时含有ID3v1、ID3v2 2.3、ID3v2 2.4、APEv2这4种类型中两种以上的时候,播放器对mp3标签的读取顺序一般是由上往下的,APEv2(前提是播放器支持此编码的读 取)---ID3v2---ID3v1。所以有时候会出现同一文件Rhythmbox显示标签正常(读取APEv2标签),其他播放器不正常的情况(读取 了ID3的标签)。
接着我们说说在Linux系统里,为什么所有的mp3播放器都会有乱码的问题,这是因为这些mp3播放器都是依赖系统内的libid3tag库完全按照 ID3的标准来读取标签内容的。 它不论mp3是采取何种的标准的标签(ID3v1、ID3v2、APEv2),只要mp3的标签的内容是Unicode编码存储的,那么显示肯定是正常的 (ID3v1的ISO-8859-1严格说是不支持中文,但是并不是代表它不能存储中文)。如果遇到是以gbk、gb18030、big5等编码的中文内 容时,它还是会把它当成ISO-8859-1来读取,乱码就成了必然。
说了这么多,现在问题就变得简单了,似乎我们只需要把mp3标签里面用gbk、gb18030、big5等编码存储的中文内容修改为Unicode编码,那么基本上所有Linux下的播放器都能正常识别mp3标签了。
关于mp3编码的转换,这里介绍一个工具----Mutagen,假如你安装了Quod Libet,那么这个包已经安装上去了。如果没有,执行下列命令就可以了。
sudo apt-get install python-mutagen
工具的使用方法
mid3iconv -e gbk *.mp3 #转换当前目录的mp3文件
find . -iname "*.mp3" -execdir mid3iconv -e gbk {} \; #转换当前目录下所有mp3文件(包括子目录)
因为现在在网上下载的mp3绝大多数采用的都是gbk/gb18030编码,-e gbk 参数是代表把gbk编码的标签转换为Unicode编码,假如mp3标签本身是Unicode编码的就不转换。如果需要转换其他编码的文件可以自行修改 gbk参数,比如改为gb18030、big5。转换后为的mp3标签类型为ID3v2 2.4,编码格式为UTF-16。
到了这一步之后,在Linux下使用所有播放器估计都没有什么问题了。
下面我们回过头来看看,追溯一下根源,为什么这些mp3原来在Windows下用Media Player怎么都是显示正常的呢?难道是Linux不如Windows吗?其实这个道理很简单,Firefox同样也打不开很多IE轻松就能打开的页 面,能说明Firefox不如IE吗?知情的人一看就明白了。Windows为了它所谓的兼容性,完全无视规范,自定规则,貌似它的软件兼容性很好,其实 到头来,毁的还是用户,从众多的不符合W3C规范的网页和现在铺天盖地的mp3标签为gbk/gb18030编码就可见一斑(反正我现在从网上下载的 mp3在Linux下就没有看到几个能正常显示的)。
可以告诉大家的是,利用上面的方法转换编码之后,这些mp3在Windows的文件属性菜单和Media Player里都无法正常显示标签,将会全部变为"?"。因为mid3iconv命令在转换编码时默认它会用Unicode编码填满D3v1, ID3v2, APEv2标签(前提是文件本来就含有这些类型的标签),但是 ID3v1 又不支持中文的 Unicode 编码。而Media Player似乎只支持ID3v1的读取,当然你使用其他的支持ID3v2、APEv2类型读取的软件是没有问题的。
这里给大家推荐一个Windows下的mp3播放器---Foobar2000,在以前Windows的生涯中,我一直都是使用的这个播放 器,foobar2000支持全系列标签的读取,更值得称赞的是它默认使用ID3v2 2.4类型UTF-8编码的写入,完全解决了编码方面的问题。
给出一个个人提供的最终解决方案。
1.系统环境完全就是Linux。
直接使用下面的这条命令,转换所有mp3文件,完全无视Windows下的使用体验。
mid3iconv -e gbk *.mp3
当然了,如果你为了避免自己的mp3文件共享给Windows或者mp3的用户时,出现煞风景的"?",你可以添加一个--remove-v1这样一个参数来直接删除ID3v1标签,避免了文件属性和Media Player里出现"?"。
mid3iconv -e gbk *.mp3 --remove-v1
2.系统环境为Windows+Linux的双系统
推荐使用foobar2000播放器,对文件进行mp3标签的编辑,可以在foobar2000里选中所有mp3文件,进行文件标签重 写,foobar2000会把所有标签进行重写,使标签采用ID3v2 2.4类型UTF-8编码的写入,完全解决Windows和Linux下mp3文件的编码问题。这也是比较完美的解决办法。
2010年1月8日星期五
2010年1月5日星期二
密钥,密钥环,pgp
16.2.2 密钥环
16.2.2 密钥环
在以前所有的情景中,我们都假定爱丽丝只需要给鲍勃发送信息。事实并不总是这样。爱丽丝也许需要给许多人发送信息,这样她就要有一个密钥环。这种情 况下,爱丽丝需要一个公钥的环,这个公钥属于爱丽丝要与通信(发送或接收信息)的每一个人。此外,PGP的设计者还列出了一个公钥/私钥的环。一个原因 是,爱丽丝也许希望随时改变她的密钥对;另一个原因是,爱丽丝也许要与不同群中的人(朋友、同事等等)通信。爱丽丝也希望对不同群中的人使用不同的密钥 对。所以,每个用户要有两列环:一个私钥/公钥环和一个别人的公钥环。图16-6表示出了包含四个人的一个人群,每一个人有一个公钥/私钥对的环,同时, 公钥环属于人群中别的人。
例如,爱丽丝有几个私钥/公钥对是属于她自己的,有几个公钥是属于别人的。注意,每人可以具有多于一个的公钥。两种情况都有可能出现。
(1) 爱丽丝需要给人群中的另外一个人发送一个信息。
a. 她用她自己的密钥在摘要上签名。
b. 她用接收者的公钥加密新创建的会话密钥。
c. 她用创建的会话密钥加密信息并在摘要上签名。
图16-6 PGP中的密钥环 |
(2) 爱丽丝收到人群当中另外一个人的信息。
a. 她用自己的私钥解密这个会话密钥。
b. 她用会话密钥解密信息和摘要。
c. 她用她的公钥确认摘要。
1. PGP算法
PGP所用算法如下。
公钥算法 表16-1所列的公钥算法,用来在摘要上签名和加密信息。
表16-1 公 钥 算 法
ID | 描 述 |
1 | RSA (加密或签名) |
2 | RSA (只加密) |
3 | RSA (只签名) |
16 | ElGamal (只加密) |
17 | DSS |
18 | 为椭圆曲线保留 |
19 | 为ECDSA保留 |
20 | ElGamal (为加密或签名) |
21 | 为Diffie-Hellman保留 |
100~110 | 私密算法 |
对称密钥算法 用于传统加密的对称密钥算法如表16-2所示。
表16-2 对称密钥算法
ID | 描 述 |
0 | 不加密 |
1 | IDEA |
2 | 三重DES |
3 | CAST-128 |
4 | Blowfish |
5 | SAFER-SK128 |
6 | 为DES/SK保留 |
7 | 为AES-128保留 |
8 | 为AES-192 |
9 | 为AES-256保留 |
100-110 | 私密算法 |
Hash算法 用于在PGP中创建散列的散列算法如表16-3所示。
表16-3 散 列 算 法
ID | 描 述 |
1 | MD5 |
2 | SHA-1 |
3 | RIPE-MD/160 |
(续表)
ID | 描 述 |
4 | 为双重宽度的SHA保留 |
5 | MD2 |
6 | TIGER/192 |
7 | 为 HAVAL保留 |
100~110 | 私密算法 |
压缩算法 用来压缩文本的压缩算法如表16-4所示。
表16-4 压缩算法
ID | 描 述 |
0 | 不压缩 |
1 | ZIP |
2 | ZLIP |
100~110 | 私密方法 |
--------------------------------------
16.2.3 PGP证书(1)
16.2.3 PGP证书(1)
PGP和我们目前已了解到的其他协议一样,使用证书验证公钥。不过过程完全不同。
1. X.509证书
使用X.509证书的协议依赖于信任的分级结构。这里有一个预先确定的从根到任意证书的信任链。每一个用户在根这一层上完全相信CA的权威(必备条 件)。在第二层上根给CA发行证书,第二层的CA为第三层发行证书等等。需要被信任的每一方都要提供一个来自树型结构中某个CA的证书。如果爱丽丝不信任 鲍勃提供的证书,她可以向树形结构的上一层权威请求(这是系统所信任的)。也就是说,从一个值得完全依赖的CA到一个证书只有一条路径。
在X.509中,从完全信任权威到证书只有一条路径。
2. PGP证书
对PGP来说,并不需要CA,环中的任何人都可以为环中的其他人的证书签名。鲍勃可以为特德、安妮、约翰等的证书签名。在PGP中,信任是不分级 的,也没有树型结构。分级结构的缺乏也许会导致这样的事实:特德可能有一个来自鲍勃的证书,和另一个来自里兹的证书。如果爱丽丝想跟随在特德的证书之后, 则有两条路径:一条从鲍勃开始,一条从里兹开始,有趣的是,爱丽丝可能完全信任鲍勃但只是部分信任里兹。从一个完全或部分信任的权威到证书也许会有多条路 径。在PGP中,证书的发行者通常称为介绍人。
在PGP中,从完全或部分信任权威到别的目标有多条路径。
3. 信任和合法性
PGP的全部操作都基于对介绍人的信任、对证书的信任和公钥的合法性。
介绍人信任级别 由于中心权威的缺乏,显然,如果PGP环中的每一个用户对其它用户完全信任,环就不能非常大。(即使在现实生活中,我们也不能完全信任我们认识的每一个 人。)为了解决这个问题,PGP允许有不同级别的信任。级别的高低通常依赖于执行,但是,为了简洁,我们把信任的三个级别分配给任意一个介绍人:不信任、 部分信任、完全信任。介绍人信任级别确定由介绍人发布的对环里别的人的信任级别。例如,爱丽丝也许完全信任鲍勃,部分信任安妮,完全不信任约翰。在PGP 中,对如何确定介绍人的确实性,还没有一个能够做出决定的机制,不过用户有能力做这个决定。
证书信任级别 当爱丽丝收到一个来自介绍人的证书时,她就把这个证书储存在目标的名字下(鉴定过的实体 )。她分配一个信任级别给这个证书。证书信任级别通常和发行证书的介绍人的信任级别是相同的。假定爱丽丝完全信任鲍勃,部分信任安妮和简尼特,不信任约 翰。下面的情景就可以发生。
(1) 鲍勃发行两个证书,一个给林达(带有公钥K1)。一个给莱斯利(带有公钥K2)。爱丽丝把林达的公钥和证书储存在林达的名字下,并且给这个证书分配一个完全信任级别。爱丽丝也把莱斯利的证书和公钥储存在莱斯利的名字下,也给这个证书分配一个完全信任级别。
(2) 安妮给约翰(带有公钥K3)发行一个证书。爱丽丝把这个公钥和证书储存在约翰的名字下,但是,只给这个证书分配一个部分信任级别。
(3) 简尼特发行两个证书,一个给约翰(带有公钥K3),一个给李(带有公钥K4)。爱丽丝把约翰和李的证书分别储存在他们自己的名字下,并给每个证书分配一个部分信任级别。注意,现在约翰有两个证书,一个来自安妮一个来自简尼特,每个都是部分信任级别的。
(4) 约翰给利兹发一个证书。爱丽丝可以丢弃这个证书,也可以加上一个不信任的签名再保存起来。
密钥合法性 运用介绍人和证书信任的目的是确定公钥的合法性。爱丽丝需要知道鲍勃、利兹、安妮等的公钥是不是合法。PGP定出了一个非常清楚的确定密钥合法性的程序。用户密钥合法性的级别是用户加了权重的信任级别。例如,假设我们给证书信任级别分配下列权重:
(1) 一个0的权重给一个不信任的证书
(2) 一个1/2的权重给一个部分信任的证书
(3) 一个1的权重给一个完全信任的证书
那么要完全信任一个实体,爱丽丝就要有这个实体的一个完全信任证书,或两个部分信任证书。例如,在前面的情景中爱丽丝可以使用约翰的公钥,因为安妮 和简尼特已经给约翰发了证书,每个证书都是1/2信任级别的。注意,属于一个实体的公钥的合法性和某人的信任级别没有任何联系。虽然鲍勃可以用约翰的公钥 给他发送一个信息,但是因为对爱丽丝来说,约翰的信任级别是不信任,爱丽丝不能接收鲍勃发行的任何证书。
4. 环的开始
通过以上讨论你可能已经意识到一个问题:如果任何人都不给一个完全信任或者部分信任的实体发送证书,会怎么样呢?例如,如果没有一个人给鲍勃发送证书,怎样才能确定鲍勃公钥的合法性呢?在PGP中,信任或部分信任实体的公钥的合法性地可以通过别的方法确定。
(1) 爱丽丝可以用人工的方法得到鲍勃的公钥。例如,爱丽丝和鲍勃私下见面,并交换写在纸片或磁盘上的公钥。
(2) 如果爱丽丝可以听出鲍勃的声音,爱丽丝就可以给鲍勃打电话,从电话里得到鲍勃的公钥。
(3) PGP提出一个较好的解决办法,就是让鲍勃通过电子邮件把他的公钥发送给爱丽丝。鲍勃和爱丽丝都从密钥中制作了一个16字节的MD5(或20字节的 SHA-1)摘要。摘要通常显示为十六进制数的8组4位数(或10组4位数),并称为指纹。然后爱丽丝可以打电话给鲍勃来验证这个指纹。如果密钥在电子邮 件传送过程中已经被改变或更换,两个指纹就不匹配。为了使这个过程更方便,PGP创建了一个词语表,每个词代表一个4位数的组合。当爱丽丝给鲍勃打电话 时,鲍勃可以发出8个词(或10个)的音。为了避免那些发音相近的词,这些词都是经过PGP仔细选择的。例如,如果表中有sword,就不能有word。
(4) 在PGP中,任何事情都不能阻止爱丽丝在一个单独的过程中,从CA获得鲍勃的公钥。然后她就把获得的公钥插入到公钥环中。
5. 密钥环表
每个用户如爱丽丝都要保存两个密钥环的轨道:一个私钥环和一个公钥环。PGP以表格的形式为每一个密钥环定义一个结构。
私钥环表 图16-7所示,就是私钥环表的格式。
图16-7 私钥环表的格式 |
●用户ID 用户ID通常就是用户电子邮件的地址。不过,用户也许会为每个密钥对指定一个唯一的电子邮件地址,或别名。这个表列出了与每一个密钥对有关的用户ID。
●密钥ID 这一列只确定用户公钥当中的一个公钥。在PGP中,每一个对的密钥ID是公钥的第一个(最不重要的)64位。也就是说,密钥ID按(key mod 264)计算。因为鲍勃在他的公钥环中,也许有几个属于爱丽丝的公钥,所以在PGP的操作中需要有密钥ID。当鲍勃收到一个爱丽丝的信息,他必须要知道, 用哪一个密钥ID来验证信息。与信息一起发送的密钥ID,就像我们马上要了解到的那样,可以使鲍勃使用一个他公钥环中的爱丽丝的特殊公钥。你可能要问,为 什么不把整个的公钥都发送出去。答案就是在公钥加密中,公钥的长度也许是非常长的。只发送8比特就把信息的大小缩小了。
●公钥 这一列只列出了属于特殊私钥/公钥对的公钥。
●加密的私钥 这一列表示在公钥/私钥对中加密私钥的值。虽然爱丽丝是唯一的访问她自己私钥环的人,PGP只是保存了私钥的加密版。以后我们会了解私钥是如何进行加密和解密的。
●时间戳 这一列保存了创建密钥对的时间和日期。它可以帮助用户决定什么时候清洗旧的密钥对,什么时候创建新的密钥对。
例16.1
现在我们来看爱丽丝的一个私钥环表。假定爱丽丝只有两个用户ID,alice@some.com 和 alice@anet.net。也假定爱丽丝有两副公钥/私钥,每一副都对应一个用户ID。表16-5所示,就是爱丽丝的公钥环表。
表16-5 例1中的私钥环表
注意,虽然密钥ID、公钥和私钥的值都显示为十六进制,时间戳的格式是ddmmyy-time,但这些格式只是为了方便表述,实际操作中的格式也许会不同。
公钥环表 图16-8所示,就是公钥环表的格式。
图16-8 公钥环表的格式 |
16.2.3 PGP证书(2)
16.2.3 PGP证书(2)
●用户ID 就像私钥环表一样,用户ID通常是实体的电子邮件地址。
●密钥ID 就像私钥环表一样,密钥ID是公钥的第一个(最不重要的)64位.
●公钥 这是实体的公钥.
●生产者信任 这个列确定生产者的信任级别。在多数执行过程中,这个信任级别只有三个值:不信任、部分信任、或完全信任。
●证书 这个列保存证书或别的实体为该实体签过名的证书。一个用户ID也许具有多于一个的证书。
●证书信任 这个列描述证书信任或信任。如果安妮给约翰发送一个证书,PGP就搜索安妮那个行中的条目,找出安妮的生产者信任值,复制这个值,并把它插入到约翰那个条目的证书信任域内。
●密钥合法性 这个值是由PGP基于证书信任值和预先为每个证书信任确定的权重算出来的。
●时间戳 这个列保存列创建的日期和时间。
例16.2
按步骤表明爱丽丝的公钥环表是怎样形成的。
(1) 爱丽丝本人从某一行开始,如表16-6所示。用N(不信任),P(部分信任)和F(完全信任)表示信任级别。为了简便,每个人(包括爱丽丝)只有一个用户ID。
表16-6 例2起始表
注意,基于这个表,我们假定爱丽丝已经为她自己发了一个证书,爱丽丝当然对她自己是完全信任的。生产者信任级别也是完全的,所以这个密钥是合法的。虽然爱丽丝从来不用这个第一行,但第一行在PGP的操作上是需要的。
(2) 现在爱丽丝把鲍勃加在这个表中。爱丽丝完全信任鲍勃,但是为了得到他的公钥,她请求鲍勃通过电子邮件发送公钥和他的指纹。然后爱丽丝就打电话核对这个指纹。如表16-7所示。
表16-7 例2,鲍勃加到表中以后
注意,因为爱丽丝完全信任鲍勃,鲍勃的生产者信任值是完全。证书域的值为空,这就表明这个密钥已经间接地收到了,并且不是通过证书。
(3) 现在爱丽丝把特德加在这个表中。特德是完全信任的。不过因为他是个特殊用户,爱丽丝不能给特德打电话。而是鲍勃发送给爱丽丝一个包含特德公钥的证书,因为鲍勃知道特德的公钥,如表16-8所示。
表16-8 例 2, 把特德加入表中之后
注意,证书域的值表明了证书是来自鲍勃的。证书可信性的值是由PGP从鲍勃的生产者信任域中复制的。密钥合法性域的值就是证书可信性的值乘以1(权重)。
(4) 现在爱丽丝把安妮加到表中。爱丽丝部分信任安妮,但是,完全信任的鲍勃为安妮发送一个证书。如表16-9所示。
表16-9 例2, 把安妮加入表中之后
注意,安妮的生产者信任值是部分的,但是证书信任值和密钥合法性是完全的。
(5) 现在安妮向爱丽丝介绍不被她信任的约翰。表16-10表明了这个新的事件。
表16-10 例2,约翰加入到表中以后
注意,PGP 已经把安妮的生产者信任值(P)复制到约翰的证书信任域了。约翰的密钥合法性域的值现在是1/2(P),这就表明直到密钥的值变为1(F),爱丽丝才能用约翰的密钥。
(6) 现在爱丽丝不认识的简尼特把一个证书发送给李。因为爱丽丝并不认识简尼特,她完全忽略了这个证书。
(7) 现在特德发送一个证书给约翰(特德是信任约翰的,约翰也许会要求特德发送证书)。爱丽丝查看这个表以后,找出带有约翰相关密钥ID和公钥的用户ID。爱丽丝不是把另外一行加在这个表上,她只是如表16-11所示那样,对该表作一些修改。
表16-11 例2, 收到多于一个约翰的证书之后
(续表)
因为在爱丽丝的表中,约翰有两个证书,并且他的密钥合法性值是1,所以爱丽丝就可以使用他的密钥。但是约翰还是不信任的。注意,爱丽丝可以继续在表中增加条目。
6. PGP的信任模式
就像Zimmermann提出的那样,我们就可以和活动中心的用户一起,为环中的每一个用户创建一个信任模式。这个模式看上去和图16-9中的模式差不多。该图表明了爱丽丝在某时的信任模式。随着公钥环表的改变,该图也许会有变化。
(点击查看大图)图16-9 信任模式 |
我们详细说明一下这个图。图16-9表明,在爱丽丝完全信任的环中,有三个实体(爱丽丝自己、鲍勃和特德)。本图也表明了部分信任的三个实体(安 妮、马克和布鲁斯)。不信任的实体有六个。有九个实体具有合法的密钥。爱丽丝可以加密发给这些实体中任意一个实体的信息,或验证所收到的这些实体的签名 (爱丽丝的密钥从不在这个模式中使用)。也有三个实体没有任何爱丽丝的合法密钥。
鲍勃、安妮和马克通过使用电子邮件发送其密钥,并通过电话验证其指纹,来制作他们的密钥合法性。另一方面,因为爱丽丝不信任海伦,用电话验证也不可 能,海伦就发送了一个来自CA的证书。虽然特德是完全信任的,他还是发给爱丽丝一个由鲍勃签名的证书。约翰已经给爱丽丝发了两个证书,一个是由特德签名 的,一个是由安妮签名的。凯文也已经给爱丽丝发送了两个证书,一个是由安妮签名的,一个是由马克签名的。每个证书给予凯文半点的合法性,所以凯文的密钥是 合法的。杜克给爱丽丝发送了两个证书,一个是由马克签名的,另一个是海伦签名的。因为马克是半信任的,海伦是不信任的,杜克没有合法的密钥。詹妮发送了四 个证书,一个是由半信任实体签名的,两个是由不信任实体签名的,还有一个是由不认识的实体签名的。因此,詹妮没有足够的点使她的密钥具有合法性。路易丝发 送了一个由不认识的实体签名的证书。注意,爱丽丝也许要在表中保存路易丝的名字,以防将来会收到路易丝的证书。
7. 信任网
PGP最终可以在一群人之间制作一个信任网。如果每一个实体都给其他实体介绍更多的实体,每个实体的公钥环就会越来越大,环中的实体之间就可以发送安全电子邮件了。