/* ****************************************************************************
* 安装指南 *
**************************************************************************** */
1. 下载组件提取器
http://www.cygwin.com/setup-x86_64.exe
2. 启动安装程序选择
Choose Installation Type: "install from internet"
Select Connection Type: "Direct Connection"
Choose A Download Site: http://mirrors.163.com
显示正在下载安装配置文件:setup.ini
3. 到"Select Packages"阶段,在"View"选项选择"Category",
Package选择主要组件(32和64两版):
Base(全选),
Devel(
GCC: gcc-core, gcc-g++,colorgcc,gcc-tools-epoch1-autoconf|automake,
gcc-tools-epoch2-autoconf|automake
G++: gcc-g++
GDB: gdb
),
bash: Base里的bash
mingw64: mingw64-x86_64-gcc-core, mingw64-x86_64-gcc-g++
具体子组件及版本查看: setup.log
4. 安装(Cygwin 3.1.7-1)时遇到提示
"... /etc/postinstall/0p_000_autorebase.dash",
它执行安装前检查,比较耗时间(十几分钟),耐心等等。
如果等太久,觉得有问题,参考:
http://cygwin.1069669.n5.nabble.com/Setup-of-texlive-collection-basic-waits-in-postinstall-0p-texlive-prep-dash-td127961.html
作者: marco atzeri-4
I found the solution doing following steps:
a. I removed /etc/postinstall/0p_texlive_prep.dash so setup of
unaffected packages (i.e. other than texlive-*) did not stall anymore.
b. I unchecked the "Hide obsolete packages" checkbox in Cygwin Setup and
uninstalled all the packages I had in the "_obsolete" category.
c. I also looked over the Full View of packages and removed all the
packages which had question mark in the column Size.
cygcheck-dep can help you to identify packages in such state
5. 启动前配置
开始运行bash之前,应该设置一些环境变量。cygwin提供了一个.bat文件,
里面已经设置好了最重要的环境变量。通过它来启动bash是最安全的办法。
这个.bat文件安装在cygwin所在的根目录下。可以在里面设置几个主要变量:
a. CYGWIN
用来针对cygwin运行时系统进行多种全局设置。开始时,可以不设置CYGWIN
或者在执行bash前用类似下面的格式在CMD下把它设为tty
C:\> set CYGWIN=tty notitle glob
b. PATH
该变量被cygwin应用程序作为搜索可执行文件的路径列表。当cygwin进程启动时,
该变量被从windows格式(e.g. C:/WinNT/system32;C:/WinNT)转换成unix格式
(e.g., /WinNT/system32:/WinNT)。如果想在不运行bash的时候也能够使用cygwin
工具集,PATH起码应该包含x:/cygwin/bin,其中x:/cygwin 是你的系统中的cygwin
目录。
c. HOME
用来指定主目录,推荐在执行bash前定义该变量。当 cygwin进程启动时,该变量
也被从windows格式转换成unix格式,例如,作者的机器上HOME的值为C:/
(dos命令set HOME就可以看到他的值,set HOME=XXX可以进行设置),在bash中用
echo $HOME
看其值为/cygdrive/c.
d. TERM
指定终端型态。如果没对它进行设置,它将自动设为cygwin。
e. LD_LIBRARY_PATH
该变量被cygwin函数dlopen()作为搜索.dll文件的路径列表,该变量也被从windows
格式转换成unix格式。多数Cygwin应用程序不使用dlopen,因而不需要该变量。
6. 改变cygwin的最大存储容量
Cygwin程序缺省可以分配的内存不超过384 MB(program+data)。多数情况下
不需要修改这个限制。然而,如果需要更多实际或虚拟内存,应该修改注册表的
HKEY_LOCAL_MACHINE或HKEY_CURRENT_USER区段。添加一个DWORD键
heap_chunk_in_mb并把它的值设为需要的内存限制,单位是十进制MB。也可以用
cygwin中的regtool完成该设置。例子如下:
regtool -i set /HKLM/Software/Cygnus/Solutions/Cygwin/heap_chunk_in_mb 1024
regtool -v list /HKLM/Software/Cygnus/Solutions/Cygwin
因为我的安装路径不一样,要把Cygnus/Solutions/去掉。
7. 查看版本
cygcheck -c cygwin # 查看Cygwin版本
bash --version # 查看bash版本
gcc --version # 查看gcc版本
gdb --version # 查看gdb版本
g++ --version # 查看g++ 版本
8. 查看安装日志
C:\Cygwin64\var\log\setup.log.full
9. 安装后的下载目录,可以当成离线包使用。
10. 安装系统服务
cygrunsrv
11.cygwin下使用SSHD
a. 需要安装了cygrunsrc,openssh
b. 运行
$ ssh-host-config -y
一路回车,直到出现CYGWIN=时,输入tty ntsec,再回车,
(或者,增加一系统环境变量CUGWIN=nesec tty)
c. 已经安装好SSHD服务到你的Windows服务中,可以直接在服务中启动,关闭。
$ cygrunsrc -S sshd #或者
$ net start sshd
12.cygwing下使用rsync
a. 安装rsync组件
b. 进入cygwin,配置服务器
$ vi /etc/rsyncd.conf
添加 ...screts file=/etc/tom.ipaddr.pas
配置文件,参考我写的另外两篇rsync的文章
cnblogs博主大CC: "rsync安装指南","RSYNC安装使用详解"
注意:密码文件权限必须是0400
$ chmod 0400 /etc/tom.ipaddr.pas
c. 启动服务端
$ rsync --daemon
d. 客户端同步
在客户端的cygwin下面,运行rsync同步,具体命令,请参考另外一篇rsync的文章。
/* ****************************************************************************
* 配置环境 *
**************************************************************************** */
1. .minttyrc文件
使用Cygwin Terminal,更改其相关属性option,相关信息会生成在.minttyrc文件中。
2. 中文显示,识别中文路径
a. 修改home目录下的 .inputrc,去除以下几行的注释:
set meta-flag on
# 关闭bash命令行8字节字符转义符的转换
set convert-meta off
# 使bash命令行支持8字节字符输入输出
set input-meta on
set output-meta on
# 忽略大小写
set completion-ignore-case on
b. 修改home目录下的 .bashrc,
# 对于一些较老的系统繁体字不在"zh_CN.GB2312"字体内。
# 让ls和dir命令显示中文和颜色
alias ls='ls -hF --show-control-chars --color=tty'
# alias ls='ls --show-control-chars --color'
alias dir='dir -N --color'
# 设置为中文环境,使提示成为中文
export LC_ALL="zh_CN.GBK"
export LC_CTYPE="zh_CN.GBK"
export LANG="zh_CN.GBK"
# 输出为中文编码
export OUTPUT_CHARSET="GBK"
export XMODIFIERS="@im=Chinput"
stty cs8 -istrip
stty pass8
export LESSCHARSET=latin1
c. cygwin.bat 里添加 set MAKE_MODE=UNIX #这一步似乎没必要
$ locale #查看当前字体
$ local -a #查看所有字体
3. 控制台临时修改中文
右键--option--text--手动修改--Locale(zh-GN),Character set(GBK Chinese)
查看本地编码:
$ locale
4. Cygwin/X的Xwin中文支持
(1)locale支持
Cygwin的locale支持一直都有问题,好在X程序还可以使用XLOCALE
建议还是使用zh_CN.gbk, 不要使用zh_CN.GB2312。
(2)移植程序
移植程序时需要注意不要让程序连接libcygwin.a里面的setlocale,而是采用
libX11.a里面的_Xsetlocale。方法是:检查被移植程序的全部源代码,发现
#include 就修改为
#define X_LOCALE
#include
同时注意程序的连接库要添加 -lX11 。如果对于结果没有把握,可以找个
Dependency Walker查看程序是否连接到了 cygwin1.dll 里面的 setlocale,
如果是,就说明有遗漏。
(3)X程序中文字体
a.PCF点阵字体
GTK1.x 和其他一些老的X程序都是用X字体。
注意必须要有编码与locale一致的字体,比如
用zh_CN.gbk就必须要由GBK编码的字体,
用zh_CN.GB2312就必须要有GB2312编码的字体。
如果使用zh_CN.GB2312,这里有一个RedOffice面带的点阵字体包。可以采用
ttf2bdf从TTF抽取得到bdf格式,然后再用bdf2pcf得到pcf格式的字体文件。
(这里有一个Windows版本的TTF2BDF,可以将Windows TTF字体转换出BDF字体,
注意得到bdf后要手工编辑一下文件头,将编码声明修改正确)
得到字体之后,放到某个目录下,执行mkfontdir生成fonts.dir,然后用
xset +fp /path/to/your/fonts
将字体路径加入即可(注意与fontconfig的配置不同,这里路径是不递归的,
如果有的字体放在子目录里面,子目录也需要添加进去才行)。
b.TTF字体
很多新的应用程序(比如GTK2)都使用fontconfig/libxft2来显示字体,
它对TTF字体的支持比较好(X以前通过freetype, xft模块也支持TTF字体,
但对中日韩字体的支持不是太好,而且也在Cygwin下似乎也没有这些模块)
完全可以使用Linux下的arphic字体包. 如果没有安装Linux,可以到
http://packages.debian.org下载相应的包,然后用7zip解压提取出ttf文件。
得到字体文件之后,放到某个目录之下,编辑/etc/fonts/local.conf,
将字体路径加入: /path/to/my/ttf/fonts 如果只是自己使用,可以将字体
文件放到 ~/.fonts下,不需要修改任何配置,最多三十秒fontconfig
就能够发现这些字体了。
(4)中文输入法
老黄(hzhr)移植了miniChinput到Cygwin,我也移植了fcitx-1.8.5和3.0,
均可以从我的网站上找到 http://www.oliwen.com/bama
一般设置了LC_CTYPE和XMODIFIERS就可以在程序中激活输入输入法了
(除非这个程序没有XIM支持):
LC_CTYPE=zh_CN.gbk
XMODIFIERS="@im=Chinput"
export LC_CTYPE XMODIFIERS
对于fcitx而言,XMODIFIERS设置成什么都可以(但必须要设置),所以设置为
"@im=Chinput"的话chinput和fcitx都可以正常使用。
5. vi 的Backspace 与 Delete 按鍵异常
首先确定 $TERM的设定为cygwin
$ echo $TERM
若不是,请设定为
TERM = cygwin
export TERM
Backspace 与 Delete这两个键正常情况下只有一个有用。可在 $HOME/.bash_profile
任选一个来使用。
stty erase '^H' //ctrl+v, ctrl+h
stty erase '^?'
6. cygwin 缺少头文件或模块可以在
https://cygwin.com/cgi-bin2/package-grep.cgi
上搜索如 crypt.h
7. visual studio调用cygwin时,把下面内容,
添加添加到VS里的“属性页”-"VC++目录"
C
C:\Cygwin\usr\lib\gcc\i686-pc-cygwin\3.4.4\include
C:\Cygwin\lib\gcc\i686-pc-cygwin\3.4.4\include
C:\Cygwin\usr\include
C:\Cygwin\usr\include\w32api
C:\Cygwin\include\w32api
C++
C:\Cygwin\usr\lib\gcc\i686-pc-cygwin\3.4.4\include\c++
C:\Cygwin\lib\gcc\i686-pc-cygwin\3.4.4\include\c++
C:\Cygwin\usr\lib\gcc\i686-pc-cygwin\3.4.4\include\c++\i686-pc-cygwin
C:\Cygwin\lib\gcc\i686-pc-cygwin\3.4.4\include\c++\i686-pc-cygwin
C:\Cygwin\usr\lib\gcc\i686-pc-cygwin\3.4.4\include\c++\backward
C:\Cygwin\lib\gcc\i686-pc-cygwin\3.4.4\include\c++\backward
/* ****************************************************************************
* 使用心得 *
**************************************************************************** */
1. 映射路径名
cygwin同时支持win32和posix风格的路径,路径分隔符可以是正斜杠也可以是反斜杠。
还支持UNC路径名。(在网络中,UNC是一种确定文件位置的方法, 使用这种方法用户
可以不关心存储设备的物理位置,方便了用户使用。
在Windows操作系统,Novell Netware和其它操作系统中,都已经使用了这种规范以取代
本地命名系统。
在UNC中,我们不用关心文件在什么盘(或卷)上,不用关心这个盘(或卷)所在服务器
在什么地方。我们只要以下面格式就可以访问文件:
//服务器名/共享名/路径/文件名
共享名有时也被称为文件所在卷或存储设备的逻辑标识,但使用它的目的是让用户不必
关心这些卷或存储设备所在的物理位置。
符合posix标准的操作系统(如linux)没有盘符的概念。所有的绝对路径都以一个斜杠
开始,而不是盘符(如c:)。所有的文件系统都是其中的子目录。例如,两个硬盘,
其中之一为根,另一个可能是在/disk2路径下。
因为许多unix系统上的程序假定存在单一的posix文件系统结构,所以cygwin专门维护
了一个针对win32文件系统的内部posix视图,使这些程序可以在windows下正确运行。
在某些必要的情况下,cygwin会使用这种映射来进行win32和posix路径之间的转换。
2. mount表
cygwin中的mount程序用来把win32盘符和网络共享路径映射到cygwin的内部posix目录树
这是与典型unix mount程序相似的概念。对于那些对unix不熟悉而具有windows背景
的人来说,mount程序和早期的dos命令join非常相似,就是把一个盘符作为其他路径的
子目录。
路径映射信息存放在当前用户的cygwin mount表中,这个mount table 又在windows的
注册表中。这样,当该用户下一次登录进来时,这些信息又从注册表中取出。
mount 表分为两种,除了每个用户特定的表,还有系统范围的mount表,每个cygwin用户
的安装表都继承自系统表。系统表只能由拥有合适权限的用户(windows NT的管理员)
修改。当前用户的mount表可以在注册表
"HKEY_CURRENT_USER/Software/Red Hat, Inc./Cygwin/mounts v"
下看到。系统表存在HKEY_LOCAL_MACHINE下。
posix 根路径/缺省指向系统分区,但是可以使用mount命令重新指向到windows文件系统
中的任何路径。cygwin从win32路径生成posix路径时,总是使用mount表中最长的前缀。
例如如果c:被同时安装在/c和/,cygwin将把C:/foo/bar转换成/c/foo/bar。
如果不加任何参数地调用mount命令,会把Cygwin当前安装点集合全部列
出。在下面的例子中,c盘是POSIX根,而d盘被映射到/d。
下例中,根是一个系统范围的安装点,它对所有用户都是可见的,而/d仅对当前用户可
见。
c:/> mount
f:/cygwin/bin on /usr/bin type system (binmode)
f:/cygwin/lib on /usr/lib type system (binmode)
f:/cygwin on / type system (binmode)
e:/src on /usr/src type system (binmode)
c: on /cygdrive/c type user (binmode,noumount)
e: on /cygdrive/e type user (binmode,noumount)
还可以使用mount命令增加新的安装点,用umount删除安装点。
当Cygwin不能根据已有的安装点把某个win32路径转化为posix路径时,cygwin会自动把
它转化到一个处于缺省posix路径/cygdrive下的的一个安装点. 例如,如果Cygwin访问
Z:/foo,而Z盘当前不在安装表内,那么Z:/将被自动转化成/cygdrive/Z.
可以给每个安装点赋予特殊的属性。自动安装的分区显示为“auto”安装。安装点还可以
选择是"textmode"还是 "binmode",这个属性决定了文本文件和二进制文件是否按同样
的方式处理。
3. 配置cygwin命令工具路径
修改安装目录下的cygwin.bat,添加
$ set HOMEPATH=/home/your_name #或其它工作目录
$ path C:/cygwin/bin;C:/cygwin/sbin;C:/cygwin/usr/bin;C:/cygwin/usr/x86_64-pc-cygwin/bin;%PATH%;
这一步也可以在windows环境变量path里添加。
Cygwin环境变量在前,优先执行与windows同名的命令,如Cygwin的find命令。
4. 查看home目录:
$ printenv HOME
$ cd ~
$ pwd
可以看到,路径,都是相对于$CYGWIN的,需要访问C盘的,请用/cygdrive/c/
5. 在Bash Shell中添加临时变量:
(':'为分割符)
$ export PATH=.:/home/your_name/bin:/bin:/usr/local/bin
在TCSH Shell中添加临时变量:
$ setenv PATH=.:/home/your_name/bin:/bin:/usr/local/bin
追加路径变量到上一个PATH:
$ export PATH=.:/home/your_name/bin:`printenv PATH`
6. 同步Windows系统用户账号
$ mkpasswd -l > /etc/passwd
$ mkgroup -l > /etc/group
如果有Domain的话,需要加上-d domainname
/* ****************************************************************************
* 参考资料 *
**************************************************************************** */
1. cygwin使用心得
https://www.cnblogs.com/me115/archive/2011/05/28/2060727.html
2. rsync安装指南
https://www.cnblogs.com/me115/archive/2011/02/28/1967213.html
3. RSYNC安装使用详解
https://www.cnblogs.com/me115/archive/2011/02/28/1967024.html
4. http://edu.qddown.com/