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
Salut :)
Je contrôle un serveur à distance via SSH. (Putty depuis un client XP)
J’ai aussi installé Cygwin sur ce client, de manière à pouvoir faire du X forwarding.
Mon objectif est de pouvoir lancer firefox "forwardé" sur le client XP et ainsi de faire naviguer le serveur controlé à distance sans que ce dernier ai de serveur graphique installé...
C’est la première fois que je tente de mettre en place une solution comme ca, est ce que quelqu’un peut m’aider ???
D’avance, Merci. :)
Bonsoir,
Si tu veux utiliser ton PC avec cygwin comme client X, pas de problème mais il faut qu’un serveur X soit installé sur ta machine distante. Firefox ne pourra pas démarrer sans la couche X sur ton serveur.
Sinon, tu peux également utiliser ssh (slogin) depuis cygwin avec rxvt à la place de Putty.
bonjour Monsieur
j’ai réussis à installer cygwin j’ai uniquement la console bash
en effet mon nom d’utilisateur étant en 2 mots la config automatique de base ne c’est pas faite.
je n’ai donc pas de fichier etc/passwd
pouvez m’aidez à configurer les paths de base à la main et le cygwin.bat
dans un premier temps pour réapprendre unix
lancer mc
et pouvoir installer gnome
merci beaucoup pour ce site
patrick
ps : j’ai changé le nom d’utilisateur
Bonsoir,
Il est toujours possible avec votre nouveau login de rajouter une entrée avec la commande mkpasswd. Je suis en revanche étonné qu’il n’existe pas de fichier /etc/passwd !!!
Créer également le répertoire de votre home dir :
ex:
cd /
mkdir -p /home/mon_nom
en remplacant mon_nom avec un contenu correct
Je conseille fw ou wmaker comme gestionnaire de fenetres sous cygwin, gnome est trop gourmand en ressources et fonctionnera beaucoup plus rapidement sous Linux. Sous Windows, l’explorateur et gvim restent une alternative tout à fait correcte vis a vis de cygwin/mc.
Bonne continuation.
Bonjour,
j’ai installé cygwin avec différents packages utiles pour le devéloppement (ada, C, java) mais j’ai cependant un problème avec java, lorsque que je tape la commande javac ou java, il me dit "command not found" . comment faire ?
Merci
Le compilateur GNU java est gcj et non javac, voir le descriptif du paquet gcc-java sous http://cygwin.com/packages/gcc-java/gcc-java-3.4.4-1
Pour utiliser le compilateur javac de Sun, il faut installer le jdk depuis le site http://java.sun.com/j2se/1.5.0/download.jsp
Pour l’utiliser sous cygwin, ne pas oublier de rajouter le chemin du compilateur dans le path. On peut le faire dans le fichier cygwin.bat en rajoutant la ligne suivante avant le lancement du shell bash :
@echo off
set path=C:\jdk-1_5_0_06\bin;%PATH%
Bonjour je suis en train d’essayer cygwin pour developper en c sous windows mais je n’arrive pas à trouver un site ou les packages avec vim, emacs soient disponibles
Bonjour,
Ces packages sont disponibles sur la plupart des sites de distribution, par ex : http://cygwin.cict.fr. Le mieux est d’y acceder en lançant le setup de cygwin et de selectionner les packages voulus dans la rubrique "Editors".
G.
Bnojour
Je viens d’installer cygwin sur mon pc windows XP. Lorsque je tape "make" au prompt de la fenêtre cygwin, cette commande n’est pas reconnue (cette commande doit être tapée pour installer un logiciel linux).
Merci par avance.
Laurent
Lorsque vous avez installé Cygwin avec le programme SETUP.EXE, avez vous bien sélectionné le paquet make du group "devel" ?
Je crois me souvenir qu’il n’est pas inclu dans l’installation par défaut.
En effet, il manquait ce paquet dans l’installation par défaut. J’ai dü aussi sélectionner le paquet gcc pour installer mon logiciel. Merci pour cette information.
Bonjour,
J’ai installé cygwin mais je n’arrive pas à installer les packages (perl, gcc, java et postgresql). Pourriez-vous me dire s’il y a une moyen de télécharger les packages sur un site et de les mettre dans un répertoire de cygwin ?
Je vous remercie.
Perl, gcc s’installent depuis le setup, catégories devel pour gcc et interpreters pour Perl.
Le compilateur gcj livré en complément de gcc permet de générer des exécutables Windows sous certaines restrictions, voir lien gnu gcj, sinon installer java depuis le site de Sun.
Quand à PostgreSQL, pour avoir longtemps utilisé la version compilée sous Cygwin, je vous conseille maintenant d’installer la version native sous Windows, voir lien
Par contre, le binaire Windows psql.exe ne fonctionne pas correctement sous Windows, vous trouverez ci-dessous une version 8.0.4 compilée sous cygwin du client psql et autres utilitaires, à copier sous /usr/local/pgsql/bin et rajouter ce chemin dans votre path.
Le lien vers la version 8.0.4 compilée sous client psql et autres utilitaires ne marche pas. Serait-il possible de m’accoder la possibilité d’avoir acées et de récupérer ca surtout que l’installation à partir du psql.exe m’a causé des pbs.
J’ai toujours le réflexe d’installer cygwin sur une machine windows. Cela permet au moins d’avoir la plupart de sfonctionnalités des commandes Unix, que le clikcodrome Windows ne propose pas toujours. Même avec une souris sans fil, les commandes "ls" et "wc" restent inégalées.
Oui, quelques commandes Unix restent incontournables.
Exemple, la commande cp -rpuv de binutil remplace avantageusement la copie de fichiers avec l’Explorateur, comme par exemple, mettre à jour le contenu d’un répertoire sur un autre disque, ou sur un DVD RW.
A rajouter dans son .bashrc
alias cpu=’\cp -rpuv’
bonjour,
j’ai installé cygwin sur mon PC (windows XP) et lorsque je le lance, il me met un message d’erreur me disant que cela peut venir de la DLL cygwin1.dll.
Auriez-vous une solution SVP ?
cygwin1.dll est la bibliothèque qui sert d’interface entre les API Unix/Posix et Windows. Elle est mise à jour à chaque nouvelle version de cygwin.
Votre message concernant l’erreur générée n’est pas assez précis pour établir un diagnotisc fiable.
Comment avez vous installé cygwin ? avez vous fait une mise à jour ? Quel est le message d’erreur ?
Bonjour,
J’ai installé cygwin pour me connecter à un serveur Linux depuis ma machine Windows XP.
Jusqu’à la semaine dernière, j’utilisais le fichier statxdmcp.bat (modifié pour s’adresser au bon serveur) sans problème.
J’ai fait une mise à jour de cygwin, et depuis, quand je me connecte avec ce startxdmcp.bat, j’ai un clavier qwerty.
Impossible de trouver comment modifier cela.
Pourtant, lorsque je lance le shell cygwin, j’ai bien mon clavier azerty habituel.
Une idée ?
Merci,
Alain
Essayez de rajouter l’option -xkblayout fr
à la ligne
run XWin -query %REMOTE_HOST% -nodecoration -lesspointer -xkblayout fr
dans le fichier /usr/X11R6/bin/startxdmcp.bat
Personnellement, je préfère lancer directement le serveur X depuis le shell cygwin avec la commande suivante :
$ X -query <hostname>
On utilisera startxdmcp.bat
plutot sous forme d’un raccourci sur le bureau pour démarrer une session X.
Essayez avec l’option suivante :
$X -query <hostname> -xkblayout fr
Voir la FAQ de cygwin-X
Les options de Xwin :
$ Xwin --help
Bonjour,
J’ai installé CYGWIN sur mon PC XP Pro mais je n’arrive pas à utiliser RSH. Le processus se bloque sans message d’erreur .
J’aimerai lancer des remote commands sur un serveur VMS.
Je precise que mon PC est declaré dans le .RHOSTS de la machine distante
Merci pour votre aide.
Jean Marc Buils
Bonjour,
Je vous suggère plutot d’utiliser les commandes ssh et slogin à la place des "remotes" commandes non sécurisées qui elles fonctionnent correctement sous cygwin