Mis à jour le 02 décembre 2010
Présentation de Cygwin
Cygwin est un environnement de développement réalisé sous l’égide de l’équipe de Cygnus qui a été racheté par RedHat.
Une communauté active de programmeurs participe également à son développement.
Le but de Cygwin était au départ de porter tous les outils GNU sous Windows.
Pour cela, Cygwin intègre une dll (cygwin1.dll) qui agit comme un émulateur Unix fournissant ainsi toutes les fonctions API Unix.
Cygwin contient également une multitude d’outils provenant du monde Unix procurant les mêmes sensations mais sous Windows.
Ainsi il est possible d’utiliser des outils comme gcc, make, ld, sed, awk, Flex, Bison, Python, Perl, vim, TCL, CVS, des shells comme bash, sh, tcsh, zsh... sous Windows exactement comme si l’OS était de type UNIX.
Cygwin possède également un serveur X11, les librairies X11, et des gestionnaires de fenêtres (windowmaker, fvwm, kde).
Cygwin est avant tout un environnement ligne de commandes mais il est possible grâce à aux modules TCL/TK de créer ses propres interfaces graphiques Unix portables. Le "debugger" Insight est un bon exemple de réalisation d’interface graphique.
Cygwin est également un environnement de développement. Les distributions de logiciels fonctionnant sous UNIX considèrent Cygwin comme un OS à part entière et intègrent la possibilité de générer un Makefile permettant la compilation de projets Unix sous Cygwin avec la procédure classique :
./configure ; make ; make install
sans autre modification préalable.
Outre le développement, on peut utiliser sous Cygwin des langages de scripts comme Perl, Python, Ruby ou Groovy.
Avec Perl par exemple il est possible d’utiliser ses programmes de traitement de données sous Windows exactement comme sous Solaris ou Linux même si l’exécution des scripts n’est pas aussi rapide que sous Linux.
Il est également possible d’utiliser Cygwin pour se connecter à un ordinateur distant. L’utilisation du programme RXVT permet de travailler dans un terminal de qualité bien supérieur à la console Windows. RXVT utilisé conjointement avec les outils openssh (secure shell) permettra de réaliser des connections sécurisées vers n’importe quel serveur Unix.
Cygwin respecte toutes les normes d’UNIX. Le répertoire Cygwin respecte le même type de hiérarchie que celui des environnements UNIX. On retrouve ainsi à la racine de Cygwin les composants suivants :
Répertoire | Description |
---|---|
"/"bin | Ensemble des dll et programmes |
/tmp | Contient les données temporaires des différents programmes(parfois, /tmp est un lien symbolique vers /var/tmp) |
"/"etc | Contient les fichiers de configuration généraux de tous les programmes du système |
"/"etc/bashrc | contient les alias et fonctions globales au système |
"/"etc/profile | positionne globalement les variables d’environnement et lance les programmes de démarrage communs |
/home | Est réservé à l’hébergement des comptes des utilisateurs (un sous-dossier par personne) |
/lib | Ensemble des librairies |
/sbin | Contient des commandes nécessaires lors du démarrage de Cygwin, mais en général inutiles pour les utilisateurs |
/usr | Contient tous les programmes et fichiers de données qui ont pour caractéristiques de ne pas être nécessaires au démarrage de la machine |
/usr/local | Contient les programmes compilés par l’utilisateur |
/var | Contient des données mises à jour par différents programmes durant le fonctionnement du système |
/opt | Ce répertoire n’est pas créé par défaut. Il pourra contenir des programmes tierces (binaires) déjà compilés (exemple : La chaîne de traitement des VMADCP CODAS |
Installation de Cygwin
Récupérer et installer le programme setup.exe et se reporter à la documentation officielle pour l’installation et la configuration.
Configuration de Cygwin
Vous trouverez ci dessous quelques remarques qui peuvent être utiles dans la configuration de Cygwin.
Cygwin évoluant rapidement, certains points de configuration peuvent être intégrés dans les scripts de configuration automatique, mais il peut toujours être utile de savoir les réaliser manuellement.
Environnement :
J’utilise un environnement quelque peu modifié avec un fichier bashrc à copier sous "/"etc. Je ne touche pas au fichier "/"etc/profile mais je rajoute les fichiers .bashrc et .bash_profile dans mon répertoire personnel (home dir).
Je modifie également le fichier de démarrage cygwin.bat se trouvant sous c :\cygwin afin d’utiliser RXVT à la place de la console Windows.
Important :
Si au lancement de Cygwin, vous obtenez brièvement une fenêtre DOS noire, puis plus rien, vous avez généralement un problème de configuration. Soit rxvt n’est pas accessible, soit vous avez un problème avec la configuration de Cygwin (variable $HOME non définie, /tmp n’existe pas, etc...).
Commenter la ligne contenant rxvt et utiliser la première pour lancer bash dans une console Windows.
Il sera ensuite plus facile de diagnostiquer la provenance de l’erreur.
Si vous ne parvenez toujours pas à utiliser correctement Cygwin, reportez vous au chapitre, "Installation manuelle par copie de Cygwin", à la fin de ce document, les techniques mises en oeuvre vous permettront certainement de résoudre votre problème.
bash --login -i
rem rxvt -fn "-*-Courier-medium-r-*-13-*" -geometry 90x32+100+80 -sr -bg "white" -fg "black" -sl 8000 -termName xterm -e /usr"/"bin/bash --login -i
Variable path :
Si vous désirez utiliser des utilitaires Windows en ligne de commande, rajouter au début du fichier cygwin.bat le chemin d’accès dans la variable PATH.
Exemple, le compilateur java de Sun et le validateur XML XmlSpy :
@echo off
set path=C:\Program Files\Altova\AltovaXML2006;C:\j2sdk1.4.2\bin;%PATH%
Sous UNIX, le répertoire courant ne fait pas partie du chemin de recherche pour un script ou un exécutable. Toute commande qui ne se trouve pas dans le chemin de la variable PATH devra être préfixée de ./
Si ce comportement ne vous convient pas, il est toujours possible de rajouter le répertoire courant dans la variable PATH. Rajouter pour cela la ligne suivante dans votre fichier ~/.bash_profile
export PATH=$PATH:.
Les fichiers passwd et group
Les fichiers "/"etc"/"passwd et "/"etc/group sont créés lors du lancement de Cygwin par l’exécution du script "/"etc/profile.
Il n’est plus nécessaire de créer ces fichiers manuellement comme c’était le cas avec les versions ultérieures :
$ mkpasswd -l > "/"etc"/"passwd
$ mkgroup -l > "/"etc/group
Le script "/"etc/profile vérifie la configuration de l’utilisateur, et si c’est une première utilisation, il va créer automatiquement les entrées correspondantes dans les fichiers "/"etc"/"passwd et "/"etc/group
Lorsque l’on travaille sous Windows 2000/XP dans un domaine NT, il peut être utile de modifier manuellement l’emplacement de sa home dir dans le fichier "/"etc"/"passwd :
$ cat "/"etc"/"passwd | grep moi
moi:unused_by_nt/2000/xp:111111:10545:Prenom Nom,Location,Domaine\moi,S-1-5-21-11111111-11111111111-111111111-1111://machine/moi:"/"bin/bash
J’ai noté une erreur qui persiste depuis plusieurs version. Par défaut, l’entrée pour votre compte est créée pour le groupe mkgroup-l-d
avec un gid = 10545. Il faut alors créer une nouvelle entrée correspondant à votre group réel dans le fichier "/"etc/group puis modifier la ligne de votre compte dans le fichier "/"etc"/"passwd.
Pour modifier ce gid, utiliser la commande mkgroup pour obtenir votre gid réel (ici remplacé par xxxxx :
$ mkgroup -d <domaine> -g <group> >> "/"etc/group
Faire un cat du fichier "/"etc/group pour récupérer votre gid :
$ cat "/"etc/group
mongroup:S-1-5-21-111111111-1111111111-1111111111-1544:xxxxx:
Puis remplacer votre gid dans la ligne du fichier "/"etc"/"passwd correspondant à votre compte utilisateur :
moi:unused_by_nt/2000/xp:15927:xxxxx:user,Domaine\user,S-1-5-21-11111111-1111111111-11111111-1111:/q/cygwin:"/"bin/bash
On voit qu’il est également possible de modifier le répertoire de sa homedir (ici /q/cygwin).
rxvt :
J’utilise par défaut rxvt comme console à la place de la classique et triste invite de commande Windows.
Cette console émule une fenêtre xterm et se configure de la même façon, via des arguments sur la ligne de commande, ou avec un fichier .Xdefault.
[jgrelet]:~> alias rxvt
alias rxvt='rxvt -fn "-*-Courier-medium-r-*-13-*" -geometry 110x43+0+0 -sr -bg "white" -fg "black" -sl 2000 -termName vt100 -e /usr"/"bin/bash &'
On peut également se connecter sur une station Solaris ou Linux en utilisant rlogin (à oublier) ou mieux slogin (paquet openssh).
Afin d’éviter les problèmes d’affichage avec VI liés aux dimensions de l’écran, il est conseillé de positionner la variable TERM à VT100 et de lancer la commande resize si la fenêtre à une taille autre que 80 colonnes par 25 lignes.
[jgrelet]:~> slogin machine
Password:
Last login: Tue Apr 2 12:14:26 from :0
Sun Microsystems Inc. SunOS 5.7 Generic October 1998
vendredi, 5 avril 2002, 11:22:17 MET DST
/home/machine/moi
type de terminal (vt100) :
perceval> resize
perceval> alias resize
eval `/usr/openwin"/"bin/resize`
perceval>
Unicode
La console rxvt en mode texte ne gère pas l’unicode. Dés que l’on se connecte via ssh sur un serveur Linux, si ce dernier est configuré en UTF8 et Français pour la langue, l’affichage de la commande man ls
par exemple ne se fera pas correctement.
Pour le vérifier, on utilisera la commande locale
qui donnera par défaut sous cygwin :
LANG=FR
LC_CTYPE="C"
LC_NUMERIC="C"
...
LC_ALL=
et sur le serveur Linux/Unix distant :
LANG=fr_FR.UTF-8
LC_CTYPE="fr_FR.UTF-8"
LC_NUMERIC="fr_FR.UTF-8"
...
LC_ALL=
La solution consiste à utiliser le même encodage sur les 2 machines, ce qui se fait en rajoutant les lignes suivantes dans le fichier cygwin.bat
set LANG=fr_FR
set LC_ALL=fr_FR
Sur le serveur distant, il suffit de modifier ces variables d’environnement comme suit :
sous bash
export LANG=fr_FR
export LC_ALL=fr_FR
sous csh ou tcsh
setenv LANG fr_FR
setenv LC_ALL fr_FR
C’est tout, et bien plus agréable à lire....
Divers :
rebaseall
Lors de l’exécution de programmes ou utilisation de librairies externes, il se peut que vous obteniez le message contenant les informations suivantes :
unableto remap
to same address as parent : 0x100000 != 0x2B0000
Dans ce cas il faut lancer la commande rebaseall comme suit :
Vérifier que le paquetage rebase soit installé via le setup.
Quitter toutes les instances de cygwin, et en cas d’echec de la commande rebaseall, n’hésitez pas à redémarrer Windows.
Menu Démarrer/Exécuter, entrer la commande suivante :
cmd, pour lancer un interpréteur windows, puis
cd c:\cygwin\bin
ash
/usr/bin/rebaseall -v
Configuration
Pour obtenir des informations sur la configuration de votre système, utiliser la commande cygcheck comme ci-dessous et visualiser le résultat dans le fichier cygcheck.out :
cygcheck -s -v -r > cygcheck.out
Utiliser le client X de Cygwin
Pour ouvrir une session X distante, depuis une console rxvt, taper la commande :
$ X -query <hostname> &
C’est rapide, simple et gratuit.
Mieux, placer un raccourci directement sur le bureau contenant la ligne suivante dans le champ "cible" :
C:\cygwin\bin\rxvt.exe -e /usr/local"/"bin/X.sh
puis créer un fichier X.sh sous /usr/local"/"bin qui contiendra les lignes suivantes :
#! "/"bin/sh
PATH=/usr"/"bin:/usr/X11R6"/"bin:/usr/sbin:/usr/local"/"bin:$PATH
export PATH
/usr/X11R6"/"bin/X -clipboard -query <hostname>
en remplacant
Sous Solaris, il faudra rajouter l’option -fp afin d’utiliser le serveur de font de la machine Solaris distante :
$ Xwin -clipboard -query <hostname> -fp tcp/<hostname>:7100
Voir http://x.cygwin.com/docs/faq/cygwin...
Utilisation du serveur X et WMaker :
Depuis quelque temps, il devient impossible de lancer le serveur X en local avec wmaker.
Si vous obtenez le message suivant au démarrage du serveur X :
winClipboardProc - XOpenDisplay () returned and successfully opened the display.
winProcSetSelectionOwner - Clipboard not yet started, aborting.
winProcSetSelectionOwner - Clipboard not yet started, aborting.
wmaker fatal error: it seems that there is already a window manager running
waiting for X server to shut down winClipboardProc - Call to select () failed: -1. Bailing.
winClipboardProc - XDestroyWindow succeeded.
Il faut alors désactiver le mode "multiwindows" dans le script de démarrage /usr/X11R6"/"bin/startx
Editez le scripts de démarrage startx et modifier la ligne suivante :
defaultserverargs="-multiwindow -clipboard"
par
defaultserverargs="-emulate3buttons -clipboard"
Pour lancer automatiquement wmaker, commenter la dernière ligne du fichier de configuration personnelle sous /.xinitrc
comme suit :
# start some nice programs
#exec xterm -e /usr"/"bin/bash -l
exec wmaker
Perl sous Cygwin
Pour l’installation des modules Perl sous Cygwin, se référer à l’article précédent.
Ayant eu parfois des difficultés à compiler certains modules via CPAN (PDL et DBD::Pg), je conseille de récupérer les paquets Perl depuis le site Cygwin Ports project.
Récupérer et copier localement les paquets avec votre client ftp. Lancer le setup Cygwin en spécifiant cette fois le répertoire local ou se trouvent les paquets. Suivre ensuite la procédure classique d’installation.
Installation manuelle par copie de Cygwin
L’installation par une copie de Cygwin sur un PC n’ayant jamais eu de version de Cygwin préalablement installée nécessite quelques manipulations préalables :
Copie du répertoire Cygwin dans C :
Faire un raccourci du fichier cygwin.bat sur le bureau, modifier
éventuellement son icone.
Décommenter la ligne :
rem bash --login -i
en
bash --login -i
Lancer cygwin.bat
$ echo $HOME
$ unset HOME
mettre c :\cygwin\bin dans le PATH windows, appeler le gestionnaire des propriétés Windows (touche Windows + Pause), onglet "avancé", bouton "variables d’environnement"
Sous le bash Cygwin, créer les points de montages :
$ mount c:/cygwin /
$ mount c:/cygwin"/"bin /usr"/"bin
$ mount c:/cygwin/lib /usr/lib
"sourcer" le fichier d’init
$ . /c/cygwin"/"etc/defaut"/"etc/profile
si ca ne marche pas correctement, faire eventuellement :
$ id -n
(et noter le nom du user utilisé dans la ligne suivante)
$ mkdir -p /home/<user>
par ex:
$ mkdir -p /home/moi
puis
$ mkpassword -u <user> -l >> "/"etc"/"passwd
Copier les fichiers .bashrc et .bash_profile joints dans la home directory nouvellement creee
sous /home/
Normalement, ca devrait marcher...
Lancer ensuite un terminal rxvt
rxvt -fn "-*-Courier-medium-r-*-13-*" -geometry 90x32+100+80 -sr -bg "white" -fg "black" -sl 8000 -termName xterm -e /usr"/"bin/bash --login -i
Liens utiles
bonjour,
J’ai utilisé gcc sous Cygwin pour générer une application initialement destinée à Linux, j’obtiens un exécutable, mais l’exécution se passe mal ("permission denied" sous Bash shell).
Je ne sais pas s’il est nécessaire de mentionner explicitement au link cygwin1.dll (ou une autre lib), je n’ai pas du tout modifié le makefile initial.
Une idée ?
Yves.
Bonjour,
Les scripts et autres programmes doivent être en lecture et exécutable, pour cela utiliser la commande chmod a+rx pour rendre le fichier exécutable a tout le monde.
Les problèmes liés aux droits d’accès sont en général assez facile à mettre en évidence. Utiliser la commande ls -la pour vérifier les droits de ces fichiers, programmes et autres scripts utilisés. Vérifier qui est le propriétaire des fichiers et sous quel compte ils sont exécutés. Si vous avez compilés vos sources depuis un répertoire réseau partagé avec samba, vérifier également les options de la commande mount.
Bonjour,
je suis entrain de faire une auto-formation sur les scripts ksh, j’ai installé cygwin avec les packages qu’il faut pour ça.
j’ai fais un script qui contient ces deux ligne ( juste pour tester le lancement) :
# !/bin/ksh
echo "test reussi"
et quand je lance test.ksh j’ai le message suivant : bash : test.ksh : command not found
Merci de votre aide.
Sous Unix, le répertoire courant n’est pas dans le PATH par défaut. Il faut soit le rajouter, ex :
export PATH=$PATH:.
soit spécifier le répertoire courant dans la commande, ex
./test.ksh
Merci, c’est tres util ! rxvt est une bonne solution pour travailler avec cygwin et sunos !
Bonjour
Je suis un nouvel utilisateur de cygwin.
Exécution de mes différnets programmes se solde par le messamge d’erreur suivant :
"command not found" alors que je me trouve à chaque fois dans le bon repertoie.
Le systeme ne retrouvepas les fichiers DLL.
comment resoudre ce problème ?
Bonjour,
je n’arrive plus à lancer mon Xterm de cygwin, et je ne sais pas pourquoi. Si je lance cygwin.bat tout ce passe bien, mais si je lance mon Xterm, j’ai une fenêtre DOS avec écrit StartXwin mais après plus rien alors que tout fonctionnais correctement jusqu’il y’a une semaine environ. Je ne sais pas pourquoi, d’un coup cela ne fonctionne plus. Que puis-je faire pour résoudre ce problème ? Merci beaucoup.
Bonjour,
j’avais installé Cygwin sur C : et il fonctionnait très bien pour compiler mes programmes C mais j’ai tout supprimé pour le ré-installer sur une autre partition et également pouvoir utiliser Java mais maintenant quand je le lance j’ai la fenêtre Dos noire 1/10ème de seconde et rien ne se passe.
Vous en parlez dans la page ci-dessus mais je ne vois pas quoi faire, je ne sais pas d’où vient le problème.
Pourriez vous m’aider svp.
Merci.
Alex
Bonjour Alex,
Si vous avez changé l’emplacement de cygwin, vérifier que l’emplacement de cygwin est toujours correct dans votre fichier cygwin.bat. Par défaut, on trouve ceci :
c :
chdir c :\cygwin\bin
bash —login -i
Si cygwin ne se trouve plus sur c : mais d :, il faut modifier le fichier cygwin.bat en accord avec votre installation.
Bonjour,
j’utilise cygwin sur un poste PC pour émuler à distance la console de mes serveurs Linux.
Pour cela, je lance simplement le fichier C :\Cygwin\usr\X11R6\bin\startxwin.bat dans lequel j’ai paramétré le nom de mon serveur (ou son adresse IP).
Cela marche très bien pour des seveurs sous Red Hat 3. En revanche avec des serveurs en Red Hat 4, la fenêtre Cygwin s’ouvre, mais le fond d’écran reste gris. Je n’ai aucun message d’erreur mais je ne récupère pas l’interface graphique (KDE).
Avez-vous une idée ?
D’avance merci.
J’ai exactement le même problème... Est-ce que quelqu’un a la réponse ? Merci.
Christian
Bonjour à tous !
j’arrive pas a exécuter mes scripts shell sous cygwin
m’affice tjr le message : permission denied pour la commande sh et en plus sh en mode 777
j’aimerais bien avoir une solution
cdt
Rabye
Bonjour,
Les scripts doivent etre en lecture et executable, pour cela utiliser la commande chmod a+rx
Les problèmes liés aux droits d’accès sont en général assez facile à mettre en évidence. Utiliser la commande ls -la pour vérifier les droits de ces fichiers, programmes et autres scripts utilisés. Vérifier qui est le propriétaire des fichiers et sous quel compte ils sont exécutés.
A+
Salut ;
Jai le meme problème as tu eu une solution ?
Tiens moi au courant merci
vr6_2004@hotmail.com
Comment tu as fait ton installation, via le setup ?
Au premier lancement, ta home dir a t’elle été crée ? sous quel compte ? as tu une entrée dans le fichier passwd ?
Qu’affiche la commande pwd au prompt ?, etc...
Il me faut un peu plus d’informations sur l’historique de ton installation afin de pouvoir te donner une piste.
Bonjour,
est-il possible d’installer le package net-snmp sous cygwin ?
J’ai tenté d’installer la version 5.3.1 mais impossible de l’installer le systeme me renvoyant une erreur.
Merci pour ce site et à bientôt.
MH
Bonjour,
Quel est le message d’erreur ?
J’ai installé et compilé les sources ce matin en lançant ./configure par défaut puis make et make test. J’ai eu 50 tests sur 59 mais je n’ai pas essayé make install car il est préférable de faire l’installation dans un répertoire dédié avec ./configure --prefix=/usr/local/net-snmp
Pour une réelle compilation et installation sous cygwin, lire et suivre les instructions du fichier Readme.win32 en ligne 1095
./configure --prefix=/usr/local/net-snmp \
--with-mib-modules="host agentx disman/event-mib examples/example" \
--with-out-mib-modules=host/hr_network --with-libs="-lws2_32" \
If you want to use SNMPv3 auth and privacy features, add:
--with-openssl="/usr" \
If you want to use IPv6 transports, add:
--enable-ipv6 --with-transports="TCPIPv6 UDPIPv6"
hi all,
J’adore cygwin, on y retrouve toute la puissance des lignes de commande de linux. Si j’ai bien compris, l’install (setup.exe) n’a pas la même présélection de package suivant le "Download Site ftp://" que l’on choisit.
Mais peut importe l’intall, j’ai un problème sur ma machine :
$ which ftp
/usr/bin/ftp
$ ftp.exe
ftp: ftp/tcp : unknown service
Je ne peux pas me servir d’ftp! Alors que le ftp de windows marche :
C :>which ftp
/cygdrive/c/MYWIN/system32/ftp
Quelqu’un pourrait-il m’aider ? merci mille fois. (j’aimerai pouvoir me servir de lftp!)
Installe ncftp (catégorie net), c’est un très bon client ftp, puissant et simple à utiliser